<?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=OdfFhem</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=OdfFhem"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/OdfFhem"/>
	<updated>2026-04-11T07:04:06Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38013</id>
		<title>FTUI3 DWD Wettervorhersage</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38013"/>
		<updated>2023-01-30T21:32:31Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Zielsetzung ==&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten zur Verfügung, aus denen eine graphische Wettervorhersage generiert werden kann; diese soll in FTUI3 angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
Die verwendeten Namen entsprechen https://wiki.fhem.de/wiki/DWD_OpenData#Beispiel_f.C3.BCr_die_Einrichtung_eines_Weblinks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aktualisieren, wenn eine neue Vorhersage vom Wetterdienst veröffentlicht wurde (fc_time ; selten)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ftui-content [content]=&amp;quot;DWD:fc_time | getHTML(&#039;DWD_Weblink_Generator horizontalForecast&#039;)&amp;quot;&amp;gt;&amp;lt;/ftui-content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualisieren, wenn das FHEM-Device seine Daten zur Vorhersage erneuert hat (fc_state ; häufig)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ftui-content [content]=&amp;quot;DWD:fc_state:time | getHTML(&#039;DWD_Weblink_Generator horizontalForecast&#039;)&amp;quot;&amp;gt;&amp;lt;/ftui-content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um eine korrekte Darstellung zu erhalten, müssen noch einige CSS-Definitionen integriert werden. Da dies recht umfangreich ist, können die benötigten CSS-Definitionen kopiert, runtergeladen oder dem Weblink-Modul entnommen werden:&lt;br /&gt;
* Forenlink (Kopie) https://forum.fhem.de/index.php/topic,115259.msg1260606.html#msg1260606&lt;br /&gt;
* Forenlink (Download) https://forum.fhem.de/index.php/topic,83097.msg885505.html#msg885505&lt;br /&gt;
* GitHub-Link (Modul) https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot dwd wettervorhersage.png|500px]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38012</id>
		<title>FTUI3 DWD Wettervorhersage</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38012"/>
		<updated>2023-01-30T21:30:45Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Zielsetzung ==&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten zur Verfügung, aus denen eine graphische Wettervorhersage generiert werden kann; diese soll in FTUI3 angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
Die verwendeten Namen entsprechen https://wiki.fhem.de/wiki/DWD_OpenData#Beispiel_f.C3.BCr_die_Einrichtung_eines_Weblinks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aktualisieren, wenn eine neue Vorhersage vom Wetterdienst veröffentlicht wird (fc_time ; selten)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ftui-content [content]=&amp;quot;DWD:fc_time | getHTML(&#039;DWD_Weblink_Generator horizontalForecast&#039;)&amp;quot;&amp;gt;&amp;lt;/ftui-content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualisieren, wenn das FHEM-Device seine Daten zur Vorhersage erneuert hat (fc_state ; häufig)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ftui-content [content]=&amp;quot;DWD:fc_state:time | getHTML(&#039;DWD_Weblink_Generator horizontalForecast&#039;)&amp;quot;&amp;gt;&amp;lt;/ftui-content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um eine korrekte Darstellung zu erhalten, müssen noch einige CSS-Definitionen integriert werden. Da dies recht umfangreich ist, können die benötigten CSS-Definitionen kopiert, runtergeladen oder dem Weblink-Modul entnommen werden:&lt;br /&gt;
* Forenlink (Kopie) https://forum.fhem.de/index.php/topic,115259.msg1260606.html#msg1260606&lt;br /&gt;
* Forenlink (Download) https://forum.fhem.de/index.php/topic,83097.msg885505.html#msg885505&lt;br /&gt;
* GitHub-Link (Modul) https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot dwd wettervorhersage.png|500px]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI3_Best_Practices&amp;diff=38009</id>
		<title>FTUI3 Best Practices</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI3_Best_Practices&amp;diff=38009"/>
		<updated>2023-01-29T07:58:19Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FTUI3 Best practices ==&lt;br /&gt;
Auf diesen Seiten findest Du eine Sammlung von Tipps und Tricks bei der Verwendung von [[FHEM Tablet UI v3]], kurz auch FTUI3. Die Beispiele auf dieser Seite sind eine Sammlung von Ratschlägen aus dem [https://forum.fhem.de/index.php/board,71.0.html FHEM Forum] und sollen hier zwecks der besseren Übersichtlichkeit und Wiederauffindbarkeit gesammelt dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt bereits eine Reihe von [https://github.com/knowthelist/ftui/tree/master/www/ftui/examples Beispielen] zur Verwendung von FTUI3. Diese sollen hier nicht wiederholt werden, sondern die Fälle sollen eine Ergänzung zu speziellen Fragestellungen darstellen. &lt;br /&gt;
&lt;br /&gt;
== generelle Verwendung ==&lt;br /&gt;
Grundsätzlich kann man die verschiedenen Elemente aus FTUI alle auf die gleiche Art und Weise einsetzen. Zum einen kann man die Werte, die diese darstellen sollen, fest zuweisen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ftui-label text=&amp;quot;Hallo Welt&amp;quot;&amp;gt;&amp;lt;/ftui-label&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Öfter jedoch wird es gewünscht sein, die Werte eines Devices dynamisch aus FHEM zu beziehen. Im Standard wird hier der Wert gelesen, den das Device im reading &amp;quot;state&amp;quot; hat. Dies erreicht man mit folgender Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ftui-label [text]=&amp;quot;name des Devices&amp;quot;&amp;gt;&amp;lt;/ftui-label&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Will man ein anderes Reading als &amp;quot;state&amp;quot; auslesen, kann man das so machen: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ftui-label [text]=&amp;quot;name_des_Devices:name_des_readings&amp;quot;&amp;gt;&amp;lt;/ftui-label&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenfalls ist es möglich, Werte aus FTUI3 zurück an FHEM zu geben. Hierzu wird der Status des FTUI Controls per set Befehl and das gewählte Device geschickt. (In diesem Beispiel hat der Button die Standardwerte &amp;quot;on&amp;quot; und &amp;quot;off&amp;quot;. Diese werden dann beim Klick darauf an FHEM gesendet per &amp;quot;set name_des_zu_schaltenden_device on&amp;quot;.)&lt;br /&gt;
Es ist möglich, das FTUI Control so anzupassen, dass andere bzw. mehr Befehle als &amp;quot;on&amp;quot; oder &amp;quot;off&amp;quot; gesendet werden.  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ftui-button (value)=&amp;quot;name_des_zu_schaltenden_device&amp;quot;&amp;gt;&amp;lt;/ftui-button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Lesen und Senden von Befehlen kann auch in einem Control kombiniert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ftui-button [value]=&amp;quot;name_des_zu_lesenden_device&amp;quot; (value)=&amp;quot;name_des_zu_schaltenden_device&amp;quot;&amp;gt;&amp;lt;/ftui-button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ftui-button [(value)]=&amp;quot;device&amp;quot;&amp;gt;&amp;lt;/ftui-button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All diese Mechanismen des Lesens und Schreibens können nun in verschiedenster Weise beeinflusst werden. So ist es für das Lesen möglich, Werte aus FHEM vor ihrer Darstellung im Frontend entsprechend anzupassen. (z.B. ein Datum lesbarer zu machen oder auf spezielle Readings im Frontend zu reagieren)&lt;br /&gt;
&lt;br /&gt;
Damit können nicht nur die Werte eines Controls angepasst werden, sondern es ist ebenfalls möglich, andere Eigenschaften je nach FHEM Reading zu beeinflussen:&lt;br /&gt;
* Die Farben eines Controls können angepasst werden&lt;br /&gt;
* Die Größe kann sich ändern&lt;br /&gt;
* Das Control kann ein- oder ausgeblendet werden&lt;br /&gt;
* Bilder können angepasst werden&lt;br /&gt;
* Warnungen können erscheinen&lt;br /&gt;
* Popup Fenster können sich öffnen oder schließen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele geben einen Überblick über genau diese Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
# [[FTUI3 Füllstand Zisterne|Füllstand einer Zisterne in Schritten darstellen]]&lt;br /&gt;
# [[FTUI3 Analoguhr|Darstellung einer Analog-Uhr]]&lt;br /&gt;
# [[FTUI3 HTML Controls|Anpassen von Standard HTML Eigenschaften]]&lt;br /&gt;
# [[FTUI3 Readingsgroup|Anzeige einer Readingsgroup]]&lt;br /&gt;
# [[FTUI3 DWD Wettervorhersage|Anzeige einer DWD-Wettervorhersage]]&lt;br /&gt;
# [[FTUI3 Scrollbares Label|Scrollbares Label]]&lt;br /&gt;
# [[FTUI3 Testinstanz|FTUI3 in Testinstanz und Produktivinstanz aufteilen]]&lt;br /&gt;
# wird fortgesetzt&lt;br /&gt;
&lt;br /&gt;
== FTUI Dokumentation ==&lt;br /&gt;
https://github.com/knowthelist/ftui/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38008</id>
		<title>FTUI3 DWD Wettervorhersage</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI3_DWD_Wettervorhersage&amp;diff=38008"/>
		<updated>2023-01-29T07:56:20Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Die Seite wurde neu angelegt: „== Zielsetzung == Der Deutsche Wetterdienst (DWD) stellt Wetterdaten zur Verfügung, aus denen eine graphische Wettervorhersage generiert werden kann; diese so…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Zielsetzung ==&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten zur Verfügung, aus denen eine graphische Wettervorhersage generiert werden kann; diese soll in FTUI3 angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
Die verwendeten Namen entsprechen https://wiki.fhem.de/wiki/DWD_OpenData#Beispiel_f.C3.BCr_die_Einrichtung_eines_Weblinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ftui-content [content]=&amp;quot;DWD_Weblink | getHTML(&#039;DWD_Weblink_Generator horizontalForecast&#039;)&amp;quot;&amp;gt;&amp;lt;/ftui-content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um eine korrekte Darstellung zu erhalten, müssen noch einige CSS-Definitionen integriert werden. Da dies recht umfangreich ist, können die benötigten CSS-Definitionen kopiert, runtergeladen oder dem Weblink-Modul entnommen werden:&lt;br /&gt;
* Forenlink (Kopie) https://forum.fhem.de/index.php/topic,115259.msg1260606.html#msg1260606&lt;br /&gt;
* Forenlink (Download) https://forum.fhem.de/index.php/topic,83097.msg885505.html#msg885505&lt;br /&gt;
* GitHub-Link (Modul) https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot dwd wettervorhersage.png|500px]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Screenshot_dwd_wettervorhersage.png&amp;diff=38007</id>
		<title>Datei:Screenshot dwd wettervorhersage.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Screenshot_dwd_wettervorhersage.png&amp;diff=38007"/>
		<updated>2023-01-29T07:46:45Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot dwd wettervorhersage&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SVG&amp;diff=32534</id>
		<title>SVG</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SVG&amp;diff=32534"/>
		<updated>2020-01-22T08:56:40Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Diagramm umpositioniert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|Diese Beschreibung ist noch zu ergänzen / erweitern.}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Erstellung von Diagrammen aus Logdaten&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=98_SVG.pm &lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[SVG]] generiert Diagramme aus [[FileLog|Logdateien]] oder [[DbLog|-datenbanken]].&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften des zu erstellenden Diagrams werden in einer .gplot-Datei festgelegt.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=SVGlinkdefine}}.&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=SVGattr}}.&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=plotfunction}}.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsdaten einer Steckdose (FileLog) ===&lt;br /&gt;
&lt;br /&gt;
* Inhalt der Datei &#039;&#039;&#039;SVG_PlugX.gplot&#039;&#039;&#039;&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Gegebenenfalls sind die Feldnamen anzupassen}}&amp;lt;source&amp;gt;&lt;br /&gt;
# Leistungsdaten einer Steckdose (FileLog)&lt;br /&gt;
#&lt;br /&gt;
# plotReplace-Parameter: DataDevice        (von diesem Gerät stammen die Daten)&lt;br /&gt;
#                        FileLogDevice     (in diesem Gerät werden die Daten geloggt)&lt;br /&gt;
#                        stateOFFvalue     (y-Wert zur Darstellung von ausgeschaltetem Zustand)&lt;br /&gt;
#                        stateONvalue      (y-Wert zur Darstellung von eingeschaltetem Zustand)&lt;br /&gt;
#                        stateUNKNOWNvalue (y-Wert zur Darstellung von unbekanntem Zustand)&lt;br /&gt;
#                        title             (in der Regel ein perl-Ausdruck zur Darstellung von Eckwerten in der Titelzeile)&lt;br /&gt;
#                        yrange            (Wertebereich für Darstellung in W vorgeben)&lt;br /&gt;
#                        y2range           (Wertebereich für Darstellung in mA vorgeben)&lt;br /&gt;
&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;title&amp;gt;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics y2tics&lt;br /&gt;
set ylabel &amp;quot;Leistung (W)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Strom (mA)&amp;quot;&lt;br /&gt;
set yrange %yrange%&lt;br /&gt;
set y2range %y2range%&lt;br /&gt;
&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.power\x3a:0:&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.current\x3a:&amp;quot;&amp;quot;:($fld[3]*1000)&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.userRead_socket_state\x3a:&amp;quot;&amp;quot;:($fld[3]=~&amp;quot;off&amp;quot;?%stateOFFvalue%:($fld[3]=~&amp;quot;on&amp;quot;?%stateONvalue%:%stateUNKNOWNvalue%))&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Leistung&#039; ls l0 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Strom&#039; ls l1fill_stripe lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Schaltzustand&#039; ls l3 lw 1 with steps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Definition von SVG-Device &#039;&#039;&#039;SVG_Test&#039;&#039;&#039;&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Alle Vorkommen von ...Data-Device... und ...FileLog-Device... sind zu ersetzen}}&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
defmod SVG_Test SVG ...FileLog-Device...:SVG_PlugX:CURRENT&lt;br /&gt;
attr SVG_Test captionPos auto&lt;br /&gt;
attr SVG_Test plotReplace DataDevice=&amp;quot;...Data-Device...&amp;quot; FileLogDevice=&amp;quot;...FileLog-Device...&amp;quot; stateOFFvalue=&amp;quot;20&amp;quot; stateONvalue=&amp;quot;30&amp;quot; stateUNKNOWNvalue=&amp;quot;10&amp;quot; yrange=&amp;quot;[0:75]&amp;quot; y2range=&amp;quot;[0:300]&amp;quot; title={&amp;quot;Steckdose(Testgerät) --- W: $data{min1}...$data{max1} / $data{currval1} --- mA: $data{min2}...$data{max2} / $data{currval2}&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* So sieht das resultierende Diagramm aus&lt;br /&gt;
[[Datei:SVG Leistungsdaten einer Steckdose.png|thumb|left|300px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Temperatur- und Heizungsdaten eines Zimmers === &lt;br /&gt;
Quelle: {{Link2Forum|Topic=104935|Message=1011527}}&lt;br /&gt;
(Datenquelle ist ein DBLog-Device namens LogDB):&lt;br /&gt;
&lt;br /&gt;
[[Datei:PlotReplace Example DBLog.png|thumb|right|300px]]&lt;br /&gt;
&amp;lt;source&amp;gt;# Created by FHEM/98_SVG.pm, 2020-01-06&lt;br /&gt;
# to replace variables, use plotReplace like&lt;br /&gt;
# attr SVG_Thermostat plotReplace SPEC1=Thermostat TL=&amp;quot;My example thermostat&amp;quot; EXTERNALTEMPDEVICE=MYSENSOR_97 EXTERNALTEMPREADING=temperature2 \&lt;br /&gt;
# ROOMHUMIDITYDEVICE=HUEDevice3 EXTERNALHUMIDITYREADING=humidity ROOMTEMPDEVICE=HUEDevice4 ROOMTEMPREADING=temperature WINDOW1=Window1_MyRoom WINDOW2=Window2_MyRoom&lt;br /&gt;
&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;TL&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Valve/Window&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperature&amp;quot;&lt;br /&gt;
set yrange [-5:105]&lt;br /&gt;
set y2range [-15:35]&lt;br /&gt;
set isosample 20&lt;br /&gt;
&lt;br /&gt;
#LogDB %SPEC1%:desired-temp::&lt;br /&gt;
#LogDB %SPEC1%:measured-temp:0:&lt;br /&gt;
#LogDB %EXTERNALTEMPDEVICE%:%EXTERNALTEMPREADING%::&lt;br /&gt;
#LogDB %SPEC1%:actuator:0:int&lt;br /&gt;
#LogDB %ROOMHUMIDITYDEVICE%:%EXTERNALHUMIDITYREADING%:0:&lt;br /&gt;
#LogDB %ROOMTEMPDEVICE%:%ROOMTEMPREADING%:0:&lt;br /&gt;
#LogDB %WINDOW1%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq&amp;quot;open&amp;quot;?60:$1eq&amp;quot;tilted&amp;quot;?45:0/eg&lt;br /&gt;
#LogDB %WINDOW2%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq&amp;quot;open&amp;quot;?60:$1eq&amp;quot;tilted&amp;quot;?45:0/eg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Desired&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 2:2 axes x1y2 title &#039;Measured actuator&#039; ls l7 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aussen&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;Valve&#039; ls l5 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Humidity&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Measured roomsensor&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;%WINDOW1%&#039; ls l4fill lw 0.5 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;%WINDOW2%&#039; ls l5fill lw 0.5 with steps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Plots erzeugen]]&lt;br /&gt;
* [[Creating Plots]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;raw&amp;quot;&amp;gt;&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SVG&amp;diff=32529</id>
		<title>SVG</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SVG&amp;diff=32529"/>
		<updated>2020-01-22T07:11:06Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Ergänzung von Beispiel &amp;quot;Leistungsdaten einer Steckdose (FileLog)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|Diese Beschreibung ist noch zu ergänzen / erweitern.}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Erstellung von Diagrammen aus Logdaten&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=98_SVG.pm &lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[SVG]] generiert Diagramme aus [[FileLog|Logdateien]] oder [[DbLog|-datenbanken]].&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften des zu erstellenden Diagrams werden in einer .gplot-Datei festgelegt.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=SVGlinkdefine}}.&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=SVGattr}}.&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
Details in der {{Link2CmdRef|Anker=plotfunction}}.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsdaten einer Steckdose (FileLog) === &lt;br /&gt;
&lt;br /&gt;
* Inhalt der Datei &#039;&#039;&#039;SVG_PlugX.gplot&#039;&#039;&#039;&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Gegebenenfalls sind die Feldnamen anzupassen}}&amp;lt;source&amp;gt;&lt;br /&gt;
# Leistungsdaten einer Steckdose (FileLog)&lt;br /&gt;
#&lt;br /&gt;
# plotReplace-Parameter: DataDevice        (von diesem Gerät stammen die Daten)&lt;br /&gt;
#                        FileLogDevice     (in diesem Gerät werden die Daten geloggt)&lt;br /&gt;
#                        stateOFFvalue     (y-Wert zur Darstellung von ausgeschaltetem Zustand)&lt;br /&gt;
#                        stateONvalue      (y-Wert zur Darstellung von eingeschaltetem Zustand)&lt;br /&gt;
#                        stateUNKNOWNvalue (y-Wert zur Darstellung von unbekanntem Zustand)&lt;br /&gt;
#                        title             (in der Regel ein perl-Ausdruck zur Darstellung von Eckwerten in der Titelzeile)&lt;br /&gt;
#                        yrange            (Wertebereich für Darstellung in W vorgeben)&lt;br /&gt;
#                        y2range           (Wertebereich für Darstellung in mA vorgeben)&lt;br /&gt;
&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;title&amp;gt;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics y2tics&lt;br /&gt;
set ylabel &amp;quot;Leistung (W)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Strom (mA)&amp;quot;&lt;br /&gt;
set yrange %yrange%&lt;br /&gt;
set y2range %y2range%&lt;br /&gt;
&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.power\x3a:0:&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.current\x3a:&amp;quot;&amp;quot;:($fld[3]*1000)&lt;br /&gt;
#%FileLogDevice% 4:%DataDevice%.userRead_socket_state\x3a:&amp;quot;&amp;quot;:($fld[3]=~&amp;quot;off&amp;quot;?%stateOFFvalue%:($fld[3]=~&amp;quot;on&amp;quot;?%stateONvalue%:%stateUNKNOWNvalue%))&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Leistung&#039; ls l0 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Strom&#039; ls l1fill_stripe lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Schaltzustand&#039; ls l3 lw 1 with steps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Definition von SVG-Device &#039;&#039;&#039;SVG_Test&#039;&#039;&#039;&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Alle Vorkommen von ...Data-Device... und ...FileLog-Device... sind zu ersetzen}}&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
defmod SVG_Test SVG ...FileLog-Device...:SVG_PlugX:CURRENT&lt;br /&gt;
attr SVG_Test captionPos auto&lt;br /&gt;
attr SVG_Test plotReplace DataDevice=&amp;quot;...Data-Device...&amp;quot; FileLogDevice=&amp;quot;...FileLog-Device...&amp;quot; stateOFFvalue=&amp;quot;20&amp;quot; stateONvalue=&amp;quot;30&amp;quot; stateUNKNOWNvalue=&amp;quot;10&amp;quot; yrange=&amp;quot;[0:75]&amp;quot; y2range=&amp;quot;[0:300]&amp;quot; title={&amp;quot;Steckdose(Testgerät) --- W: $data{min1}...$data{max1} / $data{currval1} --- mA: $data{min2}...$data{max2} / $data{currval2}&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Temperatur- und Heizungsdaten eines Zimmers === &lt;br /&gt;
Quelle: {{Link2Forum|Topic=104935|Message=1011527}}&lt;br /&gt;
(Datenquelle ist ein DBLog-Device namens LogDB):&lt;br /&gt;
&lt;br /&gt;
[[Datei:PlotReplace Example DBLog.png|thumb|right|300px]]&lt;br /&gt;
&amp;lt;source&amp;gt;# Created by FHEM/98_SVG.pm, 2020-01-06&lt;br /&gt;
# to replace variables, use plotReplace like&lt;br /&gt;
# attr SVG_Thermostat plotReplace SPEC1=Thermostat TL=&amp;quot;My example thermostat&amp;quot; EXTERNALTEMPDEVICE=MYSENSOR_97 EXTERNALTEMPREADING=temperature2 \&lt;br /&gt;
# ROOMHUMIDITYDEVICE=HUEDevice3 EXTERNALHUMIDITYREADING=humidity ROOMTEMPDEVICE=HUEDevice4 ROOMTEMPREADING=temperature WINDOW1=Window1_MyRoom WINDOW2=Window2_MyRoom&lt;br /&gt;
&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;TL&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Valve/Window&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperature&amp;quot;&lt;br /&gt;
set yrange [-5:105]&lt;br /&gt;
set y2range [-15:35]&lt;br /&gt;
set isosample 20&lt;br /&gt;
&lt;br /&gt;
#LogDB %SPEC1%:desired-temp::&lt;br /&gt;
#LogDB %SPEC1%:measured-temp:0:&lt;br /&gt;
#LogDB %EXTERNALTEMPDEVICE%:%EXTERNALTEMPREADING%::&lt;br /&gt;
#LogDB %SPEC1%:actuator:0:int&lt;br /&gt;
#LogDB %ROOMHUMIDITYDEVICE%:%EXTERNALHUMIDITYREADING%:0:&lt;br /&gt;
#LogDB %ROOMTEMPDEVICE%:%ROOMTEMPREADING%:0:&lt;br /&gt;
#LogDB %WINDOW1%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq&amp;quot;open&amp;quot;?60:$1eq&amp;quot;tilted&amp;quot;?45:0/eg&lt;br /&gt;
#LogDB %WINDOW2%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq&amp;quot;open&amp;quot;?60:$1eq&amp;quot;tilted&amp;quot;?45:0/eg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Desired&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 2:2 axes x1y2 title &#039;Measured actuator&#039; ls l7 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aussen&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;Valve&#039; ls l5 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Humidity&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Measured roomsensor&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;%WINDOW1%&#039; ls l4fill lw 0.5 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 y2title &#039;%WINDOW2%&#039; ls l5fill lw 0.5 with steps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Plots erzeugen]]&lt;br /&gt;
* [[Creating Plots]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;raw&amp;quot;&amp;gt;&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Update&amp;diff=31847</id>
		<title>Update</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Update&amp;diff=31847"/>
		<updated>2019-12-07T02:29:40Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Neuer controlfile-Befehl CRE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:update}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Befehl zur Aktualisierung der FHEM-Installation&lt;br /&gt;
|ModType=cmd&lt;br /&gt;
|ModCmdRef=update&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=98_update.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ([http://forum.fhem.de/index.php?action=profile;u=8 Forum] / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
[[update]] ist ein Befehl zur Aktualisierung der FHEM-Installation direkt über das FHEM [[FHEMWEB|Webfrontend]]. Von den Entwicklern bis zu einem bestimmten Zeitpunkt freigegebene Änderungen sind jeweils morgens ab 8:00 Uhr über die Update Funktion verfügbar. Änderungen, die später freigegeben werden, werden dementsprechend erst am nächsten Tag verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update [&amp;lt;fileName&amp;gt;|all|check|force] [http://.../controlfile]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update [add source|delete source|list|reset]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
* FHEM sichert mit den Standardeinstellungen während des Updates &amp;quot;nur&amp;quot; die aktualisierten Modul(Installations-)dateien und bei Standardinstallationen ({{Link2Forum|Topic=59669|Message=511367}}) ab Updatestand 29.10.2016 die [[Konfiguration]] und fhem.save, aber beispielsweise nicht [[Plots erzeugen|Plots]] oder [[FileLog]]s. Soll vor dem Update ein vollständiges Backup von FHEM erstellt werden, muss das mit dem Attribut &amp;lt;code&amp;gt;[[#backup_before_update|backup_before_update]]&amp;lt;/code&amp;gt; eingeschaltet werden.&lt;br /&gt;
* Lesen Sie aufmerksam die nach dem Update auf dem Monitor erscheinenden Meldungen zu Neuerungen und Änderungen.&lt;br /&gt;
* Nach einem Update ist immer ein &#039;&#039;shutdown restart&#039;&#039; erforderlich.&lt;br /&gt;
* geänderte und neu eingecheckte Module werden grundsätzlich erst am Folgetag ab ca. 8.00 Uhr durch den Update-Befehl verteilt.&lt;br /&gt;
* Mit dem Befehl [[version]] lässt sich die Version einzelner oder aller benutzten Module bestimmen.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Details zu Parametern des update Befehls:&lt;br /&gt;
&lt;br /&gt;
=== Standardaufrufe ===&lt;br /&gt;
==== update ====&lt;br /&gt;
Die ganze FHEM-Installation wird auf die neueste Version gebracht. Vorhandene Module werden akualisiert und neue Module installiert.&lt;br /&gt;
&lt;br /&gt;
==== update check ====&lt;br /&gt;
Es werden alle Module aufgelistet, von denen eine neuere als die bereits installierte Version verfügbar ist. Es wird nicht installiert.&lt;br /&gt;
&lt;br /&gt;
==== update force ====&lt;br /&gt;
Das Update wird erzwungen (falls es beim regulären &#039;&#039;update&#039;&#039; Probleme geben sollte). Dieser Befehl ist nur mit Bedacht und ausschließlich im Notfall einzusetzen. Sollte ein reproduzierbares Problem existieren, dies bitte im FHEM-Forum berichten, damit dem nachgegangen werden kann.&lt;br /&gt;
&lt;br /&gt;
==== update &amp;amp;lt;Dateiname&amp;amp;gt; ====&lt;br /&gt;
Mit z.B. &amp;lt;code&amp;gt;update 02_HTTPSRV.pm&amp;lt;/code&amp;gt; wird nur von der Datei &#039;&#039;02_HTTPSRV.pm&#039;&#039; eine neue Version installiert. Alle anderen FHEM-Dateien werden nicht angetastet.&lt;br /&gt;
&lt;br /&gt;
==== update all ====&lt;br /&gt;
Alle [[Systemübersicht#Module|offiziellen Module]] von FHEM sind in einem gemeinsamen Repository gespeichert. Nur diese Module werden in der Standardeinstellung durch den update-Befehl mit den bisher aufgeführten [[#Standardaufrufe|Standardaufrufen]] aktualisiert bzw. installiert. Einige Entwickler stellen ihre Module jedoch aus verschiedensten Gründen nicht im gemeinsamen Repository zur Verfügung, sondern nutzen eigene, separate Repositorys. Diese sogenannten &amp;quot;Thirdparty-Module&amp;quot; (auch bezeichnet als inoffizielle Module) können ebenfalls über update installiert und aktualisiert werden, wenn der Entwickler eine sogenannte Kontrolldatei (controlfile) in seinem Repository zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Zur Installation bzw. Update jedes einzelnen Thirdparty-Moduls ist nachfolgender Befehl aufzurufen (Webadresse und Kontrolldateiname sind modulabhängig passend zu ersetzen):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all http://thirdparty.com/controls_funnymodule.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die in den vorherigen Abschnitten erläuterten Standardaufruf (bis auf &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;) können durch Ergänzung um Webadresse und Kontrolldateiname (&amp;lt;nowiki&amp;gt;http://.../controlfile&amp;lt;/nowiki&amp;gt; beim Befehls-Aufruf für das Update von einzelnen Thirdparty-Modulen genutzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Repository-Verwaltung ===&lt;br /&gt;
In den Standardeinstellungen von FHEM ist für jedes einzelne Repository ein separater Aufruf der [[#Standardaufrufe|Standardaufrufe]] zur Aktualiserung/Installation notwendig. Zur Vereinfachung des Update-Prozesses hat der update-Befehl eine eingebaute Repository-Verwaltung. Mittels der Repository-Verwaltung lassen sich die Standardaufrufe so beeinflußen, dass mit einem einzigen Aufruf sowohl die Module aus dem FHEM-Repository als auch aus verschiedenen Thirdparty-Repositorys beim Update berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
==== update add ====&lt;br /&gt;
Fügt ein zusätzliches Repository zur vereinfachten Nutzung über die Standardaufrufe hinzu. Ein Aufruf von &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update &amp;lt;Dateiname&amp;gt;|all|check|force&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; berücksichtigt dann automatisch neben dem FHEM-eigenen Repository auch das hinzugefügte &amp;quot;Thirdparty-Repository&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Nach dem Hinzufügen durch beispielsweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update add http://thirdparty.com/controls_funnymodule.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; entfällt somit der manuelle Aufruf der Form &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all http://thirdparty.com/controls_funnymodule.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Aktualiserung. Er kann aber weiterhin genutzt werden, um ausschließlich für ein bestimmtes Repository ein Update zu erhalten und und nicht für alle.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Repositorys wird in der Verwaltungsdatei FHEM/controls.txt gespeichert.&lt;br /&gt;
&lt;br /&gt;
==== update delete ====&lt;br /&gt;
Entfernt eine Repository aus der Verwaltungsdatei.&lt;br /&gt;
&lt;br /&gt;
==== update list ====&lt;br /&gt;
Listet alle in der Verwaltungsdatei enthaltenen Repositorys auf.&lt;br /&gt;
&lt;br /&gt;
==== update reset ====&lt;br /&gt;
Entfernt alle Fremd-Repositorys aus der Verwaltungsdatei. Nur das eigene Repository von FHEM wird noch von den Standardparametern berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
==== Syntax controlfile ====&lt;br /&gt;
Das Controlfile für thirdparty Module unterliegt einer festen Syntax. In jeder Zeile steht ein Dateiname und ein Befehl, was damit passieren soll. Ein Zeilenumbruch wird durch ein \n dargestellt.&lt;br /&gt;
&lt;br /&gt;
Es können drei Befehle verwendet werden: CRE, MOV und UPD.&lt;br /&gt;
&lt;br /&gt;
===== CRE - Anlegen einer Datei =====&lt;br /&gt;
&lt;br /&gt;
Hiermit können vom Entwickler Dateinamen festgelegt und entsprechende Initial-Dateien verteilt werden; der Inhalt der Datei liegt nach dem &#039;&#039;ersten&#039;&#039; Verteilen in Anwenderhänden (z.B. nützlich bei *-user.css-Dateien).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CRE &amp;lt;Datum&amp;gt; &amp;lt;Dateigröße&amp;gt; &amp;lt;Datei inkl. Pfad&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen wird nur ausgeführt, wenn &lt;br /&gt;
* die Datei noch nicht vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
===== MOV - Verschieben oder Umbenennen einer Datei =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MOV &amp;lt;Quelldatei inkl. Pfad&amp;gt; &amp;lt;Zieldatei inkl. Pfad&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da Dateien nicht vollständig gelöscht werden können, kann eine Datei mit dem MOV Befehl in einen speziellen Ordner namens &amp;quot;unused&amp;quot; verschoben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MOV &amp;lt;Quelldatei inkl. Pfad&amp;gt; unused &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== UPD - Aktualisieren einer Datei =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UPD &amp;lt;Datum&amp;gt; &amp;lt;Dateigröße&amp;gt; &amp;lt;Datei inkl. Pfad&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung wird nur ausgeführt, wenn &lt;br /&gt;
* das Datum der lokalen Datei sich vom Datum der Update-Datei unterscheidet.&lt;br /&gt;
* die Dateigröße der Update-Datei mit der Dateigröße im UPD Eintrag übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
UPD 2018-10-04_20:17:35 55143 FHEM/55_MyFirstFile.pm&lt;br /&gt;
&lt;br /&gt;
UPD 2018-09-27_23:26:21 17121 FHEM/55_MySecondFile.pm&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Erzeugung der UPD Einträge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use File::Basename;&lt;br /&gt;
use POSIX qw(strftime);&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
my @filenames = ( &amp;quot;55_MyFirstFile.pm&amp;quot;,&lt;br /&gt;
		  &amp;quot;55_MySecondFile.pm&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
my $prefix = &amp;quot;FHEM&amp;quot;;&lt;br /&gt;
my $filename = &amp;quot;&amp;quot;;&lt;br /&gt;
foreach $filename (@filenames)&lt;br /&gt;
{&lt;br /&gt;
  my @statOutput = stat($prefix.&amp;quot;/&amp;quot;.$filename);&lt;br /&gt;
  &lt;br /&gt;
  if (scalar @statOutput != 13)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;error: stat has unexpected return value for &amp;quot;.$prefix.&amp;quot;/&amp;quot;.$filename.&amp;quot;\n&amp;quot;);&lt;br /&gt;
    next;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $mtime = $statOutput[9];&lt;br /&gt;
  my $date = POSIX::strftime(&amp;quot;%Y-%m-%d&amp;quot;, localtime($mtime));&lt;br /&gt;
  my $time = POSIX::strftime(&amp;quot;%H:%M:%S&amp;quot;, localtime($mtime));&lt;br /&gt;
  my $filetime = $date.&amp;quot;_&amp;quot;.$time;&lt;br /&gt;
&lt;br /&gt;
  my $filesize = $statOutput[7];&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;UPD &amp;quot;.$filetime.&amp;quot; &amp;quot;.$filesize.&amp;quot; &amp;quot;.$prefix.&amp;quot;/&amp;quot;.$filename.&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Zur weiteren Beeinflussung der Funktionsweise des update Befehls können Attribute verwendet werden. Diese müssen für das Objekt &#039;&#039;global&#039;&#039; gesetzt werden, also mit einem Konfigurationsbefehl der Art&lt;br /&gt;
:&amp;lt;code&amp;gt;attr global ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== backup_before_update ===&lt;br /&gt;
siehe auch [[backup]]&lt;br /&gt;
&lt;br /&gt;
=== restoreDirs ===&lt;br /&gt;
siehe [[#Rücksichern beim Update überschriebener Dateien|Rücksichern beim Update überschriebener Dateien]]&lt;br /&gt;
&lt;br /&gt;
=== exclude_from_update ===&lt;br /&gt;
Mit der Definition &lt;br /&gt;
:&amp;lt;code&amp;gt;attr global exclude_from_update ...&amp;lt;/code&amp;gt;&lt;br /&gt;
kann eine Liste von Dateien spezifiziert werden, die bei der Ausführung des update Befehls &#039;&#039;&#039;nicht&#039;&#039;&#039; aktualisiert werden sollen. Dateien können auch über reguläre Ausdrücke definiert werden, die einzelnen Einträge werden durch Leerzeichen voneinander getrennt.&lt;br /&gt;
&lt;br /&gt;
Einen Spezialfall stellt die &#039;&#039;commandref&#039;&#039; dar, die seit einer Modifikation des Update Prozesses (März 2015, beschrieben in dieser {{Link2Forum|Topic=34450|LinkText=Forendiskusion}}) nicht mehr heruntergeladen wird, sondern auf dem Benutzersystem durch Extraktion der Dokumentation aus den einzelnen Modulen generiert wird, angezeigt durch die Meldung im fhem.log: &lt;br /&gt;
:&#039;&#039;Calling /usr/bin/perl ./contrib/commandref_join.pl, this may take a while&#039;&#039;. &lt;br /&gt;
Sollte dieser Prozess (z.B. auf einem langsamen Rechner) zu lange dauern, bleibt die Meldung &lt;br /&gt;
:&#039;&#039;update finished, &amp;quot;shutdown restart&amp;quot; is needed to activate the changes.&#039;&#039; &lt;br /&gt;
aus. Wird &#039;&#039;commandref&#039;&#039; in das &amp;lt;code&amp;gt;exclude_from_update&amp;lt;/code&amp;gt; Attribut eingetragen, entfällt dieser Schritt, die lokale &#039;&#039;commandref&#039;&#039; wird allerdings dann auch nicht mehr aktualisiert. Die modulspezifische Hilfe, die z.B. über &amp;lt;code&amp;gt;help modulname&amp;lt;/code&amp;gt; aufgerufen werden kann, ist davon nicht betroffen.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiel ==&lt;br /&gt;
=== Durchführung eines Updates ===&lt;br /&gt;
Zunächst kann mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;update check&amp;lt;/code&amp;gt;&lt;br /&gt;
überprüft werden, ob es überhaupt ein neues Update gibt und welche Dateien hierbei ausgetauscht würden (die angezeigten Infos sollten in einer Textdatei gesichert werden. Mit diesen Infos kann gezielter nach Problemen, die vielleicht nach einem Update auftreten, gesucht werden). Anschließend kann mittels:&lt;br /&gt;
:&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
das Update eingespielt werden. Hierbei ist zu beachten, dass die Befehle auf der FHEM Webseite oben ([[Konfiguration|Befehls-Eingabefeld]]) eingegeben werden und anschließend die &amp;quot;Enter&amp;quot; Taste auf der Tastatur gedrückt werden muss.&lt;br /&gt;
&lt;br /&gt;
Gibt es kein Update für FHEM, sieht die Ausgabe z.B. nach &amp;quot;update check&amp;quot; wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;List of new / modified files since last update:&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;nothing to do...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rücksichern beim Update überschriebener Dateien ===&lt;br /&gt;
Per default werden vor dem Überschreiben durch update alle Dateien in einem neuen Verzeichnis (restoreDir/update/YYYY-MM-DD) gesichert. Diese Dateien kann man einzeln oder komplett mit dem Befehl {{Link2CmdRef|Anker=restore|Label=restore}} zuruecksichern (z.Bsp.: &amp;lt;code&amp;gt;restore update/2014-08-19&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;restore update/2014-08-19/fhem.pl&amp;lt;/code&amp;gt;) . Mit dem restoreDirs Attribut kann man die Anzahl der aufgehobenen Sicherungen (== Datum-Verzeichnisse) bestimmen, die Voreinstellung ist 3. Mit 0 kann man das Feature komplett abschalten.&lt;br /&gt;
&lt;br /&gt;
Ab Updatestand 29.10.2016 können bei Standardinstallationen ({{Link2Forum|Topic=59669|Message=511367}}) die fhem.cfg und fhem.save mit der Option -a des restore-Befehl wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
Zu Neuerungen ab Updatestand 18.03.2018 siehe {{Link2Forum|Topic=85801|Message=782640}}.&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Symbol&amp;diff=30579</id>
		<title>FTUI Widget Symbol</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Symbol&amp;diff=30579"/>
		<updated>2019-05-30T19:57:48Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &amp;quot;Einstellung für Warnung&amp;quot; hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Widget Symbol]] ist ein Widget für [[FHEM Tablet UI]], mit dem - ggf. gesteuert durch ein reading - ein Symbol dargestellt wird. Dieses Widget generiert nur eine Anzeige; es besitzt keine Möglichkeit zur Interaktion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;600&amp;quot; height=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
File:FTUI_Widget_Symbol_01.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
Neben den &#039;&#039;&#039;allgemeinen Attributen&#039;&#039;&#039; besitzt das SYMBOL-Widget die nachfolgenden Attribute.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! HTML Attribut !! Beschreibung !! Default Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| data-get || Name des Readings, welches ausgelesen wird || STATE ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Einstellung bei zwei Werten===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut !! Beschreibung !! Default-Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-on&#039;&#039;&#039; ||Wert für on ||&amp;lt;nowiki&amp;gt;true|1|on|open&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-off&#039;&#039;&#039; ||Wert für off ||&amp;lt;nowiki&amp;gt;false|0|off|closed&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039; ||Name des Symbols||ftui-window||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-icon&#039;&#039;&#039; ||Hintergrundsymbol ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-background-color&#039;&#039;&#039; ||Hintergrundfarbe für ON-Zustand. ||#aa6900||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-background-color&#039;&#039;&#039; ||Hintergrundfarbe für OFF-Zustand. ||#505050||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-color&#039;&#039;&#039; ||Farbe für ON-Zustand. ||#aa6900||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-color&#039;&#039;&#039; ||Farbe für OFF-Zustand. ||#505050||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Einstellung bei mehreren Werten===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut !! Beschreibung !!Default Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-states&#039;&#039;&#039; ||Array für states ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icons&#039;&#039;&#039; ||Array mit Icons zu data-states Array ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-classes&#039;&#039;&#039; ||Array mit Klassen zu data-states Array.||||data-classes=&#039;[&amp;quot;bg-red blink&amp;quot;,&amp;quot;bg-yellow&amp;quot;,&amp;quot;bg-green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-icons&#039;&#039;&#039; ||Array mit Icons zu data-states Array ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-colors&#039;&#039;&#039; ||Array mit Farben zu data-states Array ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-colors&#039;&#039;&#039; ||Array mit Hintergrundfarben zu data-states Array ||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide&#039;&#039;&#039;||Reading zum Verstecken des Elementes. Das Element verschwindet, wenn der Wert mit &#039;&#039;&#039;data-hide-on&#039;&#039;&#039; übereinstimmt.||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide-on&#039;&#039;&#039;||Zeichenkette, bei der das Element versteckt wird||&amp;lt;nowiki&amp;gt;&#039;true|1|on&#039;&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide-off&#039;&#039;&#039;||Zeichenkette, bei der das Element angezeigt wird||&#039;!on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
*&#039;&#039;data-get-on&#039;&#039;, &#039;&#039;data-get-off&#039;&#039; und &#039;&#039;data-states&#039;&#039; akzeptieren auch reguläre Ausdrücke (RegEx). Möglich sind auch Animationen, z.B. Blinken.&lt;br /&gt;
*&#039;&#039;data-get-on&#039;&#039; und &#039;&#039;data-get-off&#039;&#039; können nicht gemeinsam mit &#039;&#039;data-states&#039;&#039; verwendet werden&lt;br /&gt;
*reine Zahlen-Arrays bei &#039;&#039;data-states&#039;&#039; müssen &#039;&#039;&#039;aufsteigend&#039;&#039;&#039; sortiert werden.}}&lt;br /&gt;
&lt;br /&gt;
===Einstellung für Warnung===&lt;br /&gt;
Eine Warnung kann auf verschiedenen Wegen aktiviert werden:&lt;br /&gt;
* Verwendung der Klasse &#039;&#039;&#039;warn&#039;&#039;&#039;&lt;br /&gt;
* Verwendung der Klasse &#039;&#039;&#039;warn&#039;&#039;&#039; und Attribut &#039;&#039;&#039;data-get-warn&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut !! Beschreibung !! Default-Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-warn&#039;&#039;&#039; ||Wert für Warnung||-1||data-get-warn=&amp;quot;test(.*)&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
* Attribut &#039;&#039;&#039;data-warn&#039;&#039;&#039; in Kombination mit &#039;&#039;&#039;data-warn-on&#039;&#039;&#039; und &#039;&#039;&#039;data-warn-off&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut !! Beschreibung !! Default-Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn&#039;&#039;&#039;||Reading, über das die Anzeige der Warnung gesteuert wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-on&#039;&#039;&#039;||Wert(e), die zur Anzeige der Warnung führen ||&amp;lt;nowiki&amp;gt;(true|on|[1-9]{1}[0-9]*)&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-off&#039;&#039;&#039;||Wert(e), die eine Anzeige der Warnung unterdrücken||&amp;lt;nowiki&amp;gt;(false|off|0)&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unabhängig von der Art der Aktivierung kann das Aussehen einer Warnung mit den folgenden Attributen gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut !! Beschreibung !! Default-Wert !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-background-color&#039;&#039;&#039;||Hintergrundfarbe der Warnung||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-color&#039;&#039;&#039;||Schriftfarbe der Warnung||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-fixed&#039;&#039;&#039;||Anzahl Nachkommastellen in der Warnung||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-warn-icon&#039;&#039;&#039; ||Icon für Warnung||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|tiny}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|tall}}{{FTUI Klasse|grande}}{{FTUI Klasse|gigantic}}{{FTUI Klasse|compressed}}{{FTUI Klasse|compressed-50}}{{FTUI Klasse|transparent}}{{FTUI Klasse|half-transparent}}{{FTUI Klasse|hide}}{{FTUI Klasse|warn}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Symbol===&lt;br /&gt;
[[File:FTUI_Widget_Symbol_02.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;Web-Status&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Das device &amp;quot;Web-Status&amp;quot; liefert in diesem Fall den Wert &amp;quot;fa-rss-square&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Symbol mit vier Zuständen und Animation===&lt;br /&gt;
[[File:FTUI_Widget_Symbol_03.png|800px]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;&amp;quot; &lt;br /&gt;
     data-type=&amp;quot;symbol&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;Garage&amp;quot; &lt;br /&gt;
     data-states=&#039;[&amp;quot;oben&amp;quot;,&amp;quot;unten&amp;quot;,&amp;quot;lauf&amp;quot;,&amp;quot;angehalten&amp;quot;,&amp;quot;Fehler&amp;quot;]&#039; &lt;br /&gt;
     data-icons=&#039;[&amp;quot;oa-fts_garage_door_10&amp;quot;,&amp;quot;oa-fts_garage_door_100&amp;quot;,&amp;quot;fa-cog fa-spin&amp;quot;,&amp;quot;oa-fts_garage_door_40&amp;quot;,&amp;quot;fa-bug&amp;quot;]&#039; &lt;br /&gt;
     data-colors=&#039;[&amp;quot;GoldenRod&amp;quot;,&amp;quot;SeaGreen&amp;quot;,&amp;quot;Crimson&amp;quot;,&amp;quot;Crimson&amp;quot;,&amp;quot;Crimson&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele==&lt;br /&gt;
===Batterieüberwachung mit Regulärem Ausdruck (0.0 - 3.9)===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;WohnzimmerHeizung&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;batteryLevel&amp;quot;&lt;br /&gt;
     data-states=&#039;[&amp;quot;3.[0-9]&amp;quot;,&amp;quot;2.[789]&amp;quot;,&amp;quot;2.[456]&amp;quot;,&amp;quot;2.[123]&amp;quot;,&amp;quot;((2.0)|([01].[0-9]))&amp;quot;]&#039;&lt;br /&gt;
     data-icons=&#039;[&amp;quot;fa-battery-4&amp;quot;,&amp;quot;fa-battery-3&amp;quot;,&amp;quot;fa-battery-2&amp;quot;,&amp;quot;fa-battery-1&amp;quot;,&amp;quot;fa-battery-0&amp;quot;]&#039;&lt;br /&gt;
     data-colors=&#039;[&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#ad3333&amp;quot;,&amp;quot;#ad3333&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Batterieüberwachung mit Regulärem Ausdruck (0 - 100)===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;dDummy3&amp;quot;&lt;br /&gt;
     data-states=&#039;[&amp;quot;100&amp;quot;,&amp;quot;([7][5-9])|([8-9][0-9])&amp;quot;,&amp;quot;([5-6][0-9])|([7][0-4])&amp;quot;,&amp;quot;([2][5-9])|([3-5][0-9])&amp;quot;,&amp;quot;([0-9])|([1][0-9])|([2][0-4])&amp;quot;]&#039;&lt;br /&gt;
     data-icons=&#039;[&amp;quot;fa-battery-4&amp;quot;,&amp;quot;fa-battery-3&amp;quot;,&amp;quot;fa-battery-2&amp;quot;,&amp;quot;fa-battery-1&amp;quot;,&amp;quot;fa-battery-0&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI_Widget_Symbol_04.png]]&lt;br /&gt;
&lt;br /&gt;
===Batterieüberwachung mit Größenvergleich und gedrehten Symbolen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;BadHeizung&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;batteryLevel&amp;quot;&lt;br /&gt;
     data-states=&#039;[&amp;quot;0&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;2.4&amp;quot;,&amp;quot;2.7&amp;quot;,&amp;quot;3.0&amp;quot;]&#039;&lt;br /&gt;
     data-icons=&#039;[&amp;quot;oa-measure_battery_0 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_25 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_50 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_75 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_0 fa-rotate-90&amp;quot;]&#039;&lt;br /&gt;
     data-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ad3333&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Türsymbol mit Warnung bei geöffneter Tür===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;Eingangstuer&amp;quot; &lt;br /&gt;
     data-states=&#039;[&amp;quot;open&amp;quot;,&amp;quot;closed&amp;quot;]&#039; &lt;br /&gt;
     data-icons=&#039;[&amp;quot;ftui-door warn&amp;quot;,&amp;quot;ftui-door&amp;quot;]&#039; &lt;br /&gt;
     data-colors=&#039;[&amp;quot;#999&amp;quot;,&amp;quot;#555&amp;quot;]&#039; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:Bsp class warn.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
Als Alternative zum Symbol-Widget kommt u.U. das [[FTUI Widget Pagebutton]] in Betracht, welches ebenfalls über Icons und Farben Zustände visualisieren kann und zusätzlich bei Betätigung eine Unterseite aufruft.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Symbol]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Input&amp;diff=30570</id>
		<title>FTUI Widget Input</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Input&amp;diff=30570"/>
		<updated>2019-05-30T09:29:21Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &amp;quot;autoclear&amp;quot; und &amp;quot;autoselect&amp;quot; integriert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Input Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem ein Eingabefeld für Text erstellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:FTUI_Widget_Input_01.png&lt;br /&gt;
File:FTUI_Widget_Input_03.png&lt;br /&gt;
File:FTUI_Widget_Input_02.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, aus dem der angezeigte Text ausgelesen wird||||data-get=&amp;quot;state&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Name des Readings, welches verändert werden soll||||data-set=&amp;quot;Message&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Kommando, welches an FHEM gesendet werden soll (z.B. setstate, set, setreading, trigger)||set||data-cmd=&amp;quot;setreading&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-value&#039;&#039;&#039;||Standardwert, der angezeigt wird, wenn das Reading leer ist||||data-value=&amp;quot;nichts da&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|wider}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|notransmit}}{{FTUI Klasse|autoclear}}{{FTUI Klasse|autoselect}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&#039;&#039;&#039;data-device&#039;&#039;&#039; und &#039;&#039;&#039;data-get&#039;&#039;&#039; können Referenzen (jQuery Selektor) auf [[FTUI Widget Select|Select Widgets]] sein, um dynamisch die Quelle derselben zu verändern.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Text an Device senden===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&amp;gt;Wichtige Nachricht an Mitbewohner:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;input&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;Dummy1&amp;quot;&lt;br /&gt;
	 data-get=&amp;quot;state&amp;quot;&lt;br /&gt;
     data-value=&amp;quot;Standardtext&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Input_01.png]]&lt;br /&gt;
&lt;br /&gt;
===Text erst nach Klick auf Link-Widget absenden===&lt;br /&gt;
In das &#039;&#039;Input-Widget&#039;&#039; kann ein Text angegeben werden. Die Klasse &#039;&#039;notransmit&#039;&#039; führt aber dazu, dass er nicht abgesendet wird. Die geschieht erst nach dem Klick auf das &#039;&#039;Link-Widget&#039;&#039;, welches die zu sendenden Daten vom &#039;&#039;Input-Label&#039;&#039; ausliest (&#039;&#039;data-value&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;input&amp;quot;&lt;br /&gt;
       id=&amp;quot;sendTask&amp;quot;&lt;br /&gt;
       class=&amp;quot;notransmit&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;link&amp;quot;&lt;br /&gt;
       class=&amp;quot;round&amp;quot;&lt;br /&gt;
       data-icon=&amp;quot;fa-feed&amp;quot;&lt;br /&gt;
       data-device=&amp;quot;MyList&amp;quot;&lt;br /&gt;
       data-set=&amp;quot;addTask&amp;quot;&lt;br /&gt;
       data-value=&amp;quot;#sendTask&amp;quot;&amp;gt;OK&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Input_03.png]]&lt;br /&gt;
&lt;br /&gt;
===Befehlsstruktur aufbauen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;select&amp;quot; data-items=&#039;[&amp;quot;dummy1&amp;quot;,&amp;quot;dummy2&amp;quot;,&amp;quot;dummy3&amp;quot;,&amp;quot;dummy4&amp;quot;]&#039; id=&amp;quot;sendDev&amp;quot; class=&amp;quot;notransmit w3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;select&amp;quot; data-items=&#039;[&amp;quot;STATE&amp;quot;,&amp;quot;warn1&amp;quot;,&amp;quot;warn2&amp;quot;,&amp;quot;webCmd&amp;quot;,&amp;quot;room&amp;quot;]&#039; id=&amp;quot;sendParam&amp;quot; class=&amp;quot;notransmit w3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;input&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;#sendDev&amp;quot;&lt;br /&gt;
	 data-get=&amp;quot;#sendParam&amp;quot;&lt;br /&gt;
	 id=&amp;quot;sendValue&amp;quot;&lt;br /&gt;
	 data-value=&amp;quot;127&amp;quot;&lt;br /&gt;
	 class=&amp;quot;notransmit w3x centered&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;link&amp;quot; class=&amp;quot;round centered&amp;quot; data-icon=&amp;quot;fa-feed&amp;quot; data-device=&amp;quot;#sendDev&amp;quot; data-set=&amp;quot;#sendParam&amp;quot; data-value=&amp;quot;#sendValue&amp;quot;&amp;gt;OK&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Input_02.png]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Input]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Vorlage:FTUI_Klasse&amp;diff=30569</id>
		<title>Vorlage:FTUI Klasse</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Vorlage:FTUI_Klasse&amp;diff=30569"/>
		<updated>2019-05-30T09:26:46Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &amp;quot;autoclear&amp;quot; und &amp;quot;autoselect&amp;quot; integriert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vorlage für die dynamische Anzeige jeweils einer CSS-Klasse, die von [[FHEM Tablet UI]] zur Verfügung gestellt wird.&lt;br /&gt;
&lt;br /&gt;
Jeder Aufruf dieser Vorlage ist jeweils eine Tabellenzeile, es muss daher vor der ersten Einbindung dieser Vorlage eine Tabelle geöffnet (&amp;lt;nowiki&amp;gt; {| &amp;lt;/nowiki&amp;gt;) und nach der letzten Einbindung die Tabelle geschlossen werden (&amp;lt;nowiki&amp;gt; |} &amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Soll die Vorlage öfter eingebunden werden, muss das in einer Zeile erfolgen, ansonsten gibt es unschöne Leerzeilen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
Folgender Code&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|inline}}{{FTUI Klasse|narrow}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ergibt folgendes Ergebnis:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|inline}}{{FTUI Klasse|narrow}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{#switch: {{{1|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- POSITIONIERUNG --&amp;gt;&lt;br /&gt;
&amp;lt;!--   GENERELL     --&amp;gt;&lt;br /&gt;
 | inline = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Positioniert Elemente in einer Reihe, kein Zeilenumbruch&lt;br /&gt;
 | newline = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Positioniert Elemente jeweils in einer neuen Zeile, Zeilenumbruch&lt;br /&gt;
 | top-space = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px zusätzlicher Platz oben&lt;br /&gt;
 | top-space-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}30px zusätzlicher Platz oben&lt;br /&gt;
 | top-space-3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}45px zusätzlicher Platz oben&lt;br /&gt;
 | left-space = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px zusätzlicher Platz links&lt;br /&gt;
 | left-space-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}30px zusätzlicher Platz links&lt;br /&gt;
 | left-space-3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}45px zusätzlicher Platz links&lt;br /&gt;
 | right-space = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px zusätzlicher Platz rechts&lt;br /&gt;
 | right-space-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}30px zusätzlicher Platz rechts&lt;br /&gt;
 | right-space-3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}45px zusätzlicher Platz rechts&lt;br /&gt;
 | top-narrow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}} -15px näher am oberen Rand&lt;br /&gt;
 | top-narrow-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}} -30px näher am oberen Rand&lt;br /&gt;
 | top-narrow-10 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}} -10px näher am oberen Rand&lt;br /&gt;
 | left-narrow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px weiter links&lt;br /&gt;
 | left-narrow-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}30px weiter links&lt;br /&gt;
 | left-narrow-3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}45px weiter links&lt;br /&gt;
 | right-narrow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px weiter rechts&lt;br /&gt;
 | right-narrow-2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}30px weiter rechts&lt;br /&gt;
 | right-narrow-3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}45px weiter rechts&lt;br /&gt;
 | centered = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Horizontal zentriert (muss im Eltern-&amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/nowiki&amp;gt; gesetzt werden)&lt;br /&gt;
 | wider = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}15px Abstand rund um das Element&lt;br /&gt;
 | narrow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Weniger Abstand zum Element darüber&lt;br /&gt;
 | fullsize = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}100% Breite und Höhe&lt;br /&gt;
 | compressed = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Switches und Symbole bekommen Breite und Höhe von 1em statt 2em, damit weniger Platz rundum das Icon benötigt wird&lt;br /&gt;
 | compressed-50 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Switches und Symbole bekommen Breite und Höhe von 1.5em statt 2em, damit weniger Platz rundum das Icon benötigt wird&lt;br /&gt;
 | height-narrow= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Widgets bekommen eine fest definierte Höhe und Zeilenhöhe, um sie leichter nebeneinander anordnen zu können&lt;br /&gt;
 | w1x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Einfache fixe Breite&lt;br /&gt;
 | w2x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Doppelte fixe Breite&lt;br /&gt;
 | w3x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Dreifache fixe Breite&lt;br /&gt;
 | maxw40 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Maximale Breite 40px&lt;br /&gt;
 | doublebox-v = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Container, in dem zwei kleine Elemente (z.B. Switches) übereinander platziert werden können&lt;br /&gt;
 | doublebox-h = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Container, in dem zwei kleine Elemente (z.B. Switches) nebeneinander platziert werden können&lt;br /&gt;
 | triplebox-v = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Container, in dem drei kleine Elemente (z.B. Switches) übereinander platziert werden können&lt;br /&gt;
 | right = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element wird rechtsbündig angeordnet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   SHEET-ROW-COL --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 | sheet = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Startet eine neue Tabelle&lt;br /&gt;
 | row = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Reihe in der aktuellen Tabelle&lt;br /&gt;
 | cell = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Zelle (bzw. Spalte) in der aktuellen Reihe&lt;br /&gt;
 | cell-1-x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Zelle in der aktuellen Reihe mit einer festen Breite von X (z.B.: cell-1-3 (33%), cell-1-4 (25%))&lt;br /&gt;
 | cell-x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Zelle in der aktuellen Reihe mit einer festen Breite von X in Prozent (z.B.: cell-20 (20%), cell-40 (40%))&lt;br /&gt;
 | left-align = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt der Zelle linksbündig&lt;br /&gt;
 | right-align = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt der Zelle rechtsbündig&lt;br /&gt;
 | bottom-align = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt der Zelle am unteren Rand&lt;br /&gt;
 | top-align = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt der Zelle am oberen Rand&lt;br /&gt;
 | center-align = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt der Zelle zentriert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   ROW-COL --&amp;gt;&lt;br /&gt;
 | col = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Spalte in der aktuellen Zeile. Breite automatisch.&lt;br /&gt;
 | col-1-x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Spalte in der aktuellen Zeile. Feste Breite von X (z.B.: col-1-3 (33%), col-1-4 (25%))&lt;br /&gt;
 | col-x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Neue Spalte in der aktuellen Zeile. Feste Breite von X Prozent (z.B.: col-20 (20%), col-40 (40%))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   HBOX/VBOX --&amp;gt;&lt;br /&gt;
 | vbox = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vertikale Box - Inhalte übereinander&lt;br /&gt;
 | hbox = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Horizontale Box - Inhalte nebeneinander&lt;br /&gt;
 | card = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Eine &amp;quot;Haupt&amp;quot;-Box&lt;br /&gt;
 | phone-width = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Breite darf nicht unter die Display-Breite des Gerätes sinken&lt;br /&gt;
 | full-height = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt geht über die gesamte Höhe des Browser-Fensters (100% viewport height)&lt;br /&gt;
 | full-width = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalt geht über die gesamte Breite des Browser-Fensters (100% width)&lt;br /&gt;
 | grow-0 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Box darf nicht wachsen&lt;br /&gt;
 | grow-1 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Standardgröße der Box&lt;br /&gt;
 | grow-2 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Box darf um das doppelte wachsen&lt;br /&gt;
 | grow-x = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Box darf um das X-fache wachsen&lt;br /&gt;
 | items-top = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalte der Box werden oben ausgerichtet&lt;br /&gt;
 | items-center = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalte der Box werden zentriert&lt;br /&gt;
 | items-bottom = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Inhalte der Box werden unten ausgerichtet&lt;br /&gt;
 | items-space-between = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Übriger Platz zwischen den Elementen in der Box&lt;br /&gt;
 | items-space-around = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Übriger Platz um die Elemente in der Box&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   VORDERGRUNDFARBEN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 | red = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe rot&lt;br /&gt;
 | green = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe grün&lt;br /&gt;
 | blue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe blau&lt;br /&gt;
 | lightblue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe hellblau&lt;br /&gt;
 | orange = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe orange&lt;br /&gt;
 | gray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe grau&lt;br /&gt;
 | lightgray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe hellgrau&lt;br /&gt;
 | white = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe weiß&lt;br /&gt;
 | black = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe schwarz&lt;br /&gt;
 | mint = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe minzgrün&lt;br /&gt;
 | yellow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vordergrundfarbe gelb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   HINTERGRUNDFARBEN --&amp;gt;&lt;br /&gt;
 | bg-limit = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Ändert bei Label-Widgets die Hinter- statt der Vordergrundfarbe in Abhängigkeit von &#039;&#039;data-limit&#039;&#039;&lt;br /&gt;
 | bg-red = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe rot&lt;br /&gt;
 | bg-green = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe grün&lt;br /&gt;
 | bg-blue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe blau&lt;br /&gt;
 | bg-lightblue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe hellblau&lt;br /&gt;
 | bg-orange = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe orange&lt;br /&gt;
 | bg-gray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe grau&lt;br /&gt;
 | bg-lightgray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe hellgrau&lt;br /&gt;
 | bg-white = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe weiß&lt;br /&gt;
 | bg-black = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe schwarz&lt;br /&gt;
 | bg-mint = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe minzgrün&lt;br /&gt;
 | bg-yellow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrundfarbe gelb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   GROESSEN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 | mini = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 50%&lt;br /&gt;
 | tiny = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 60%&lt;br /&gt;
 | small = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 80%&lt;br /&gt;
 | normal = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 100%&lt;br /&gt;
 | large = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 125%&lt;br /&gt;
 | big = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 150%&lt;br /&gt;
 | bigger = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 200%&lt;br /&gt;
 | tall = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 350%&lt;br /&gt;
 | great = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 450%&lt;br /&gt;
 | grande = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 600%&lt;br /&gt;
 | gigantic = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Setzt die Größe des Elementes auf 144px&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   SCHRIFT --&amp;gt;&lt;br /&gt;
 | thin = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}dünne Schrift&lt;br /&gt;
 | bold = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}fette Schrift&lt;br /&gt;
 | darker = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Schriftfarbe grau&lt;br /&gt;
 | truncate = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Text wird - wenn nötig - abgeschnitten und mit &amp;quot;...&amp;quot; ergänzt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   RAHMEN --&amp;gt;&lt;br /&gt;
 | verticalLine = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Grauer Linie am rechten Rand des Elements&lt;br /&gt;
 | squareborder = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Eckiger Rahmen um ein Label-Widget&lt;br /&gt;
 | circleborder = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Runder Rahmen um ein Label-Widget&lt;br /&gt;
 | border-black = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Schwarzer Rahmen um das Element&lt;br /&gt;
 | border-white = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Weißer Rahmen um das Element&lt;br /&gt;
 | border-orange = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Oranger Rahmen um das Element&lt;br /&gt;
 | border-red = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Roter Rahmen um das Element&lt;br /&gt;
 | border-green = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Grüner Rahmen um das Element&lt;br /&gt;
 | border-mint = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Minzgrüner Rahmen um das Element&lt;br /&gt;
 | border-lightblue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hellblauer Rahmen um das Element&lt;br /&gt;
 | border-blue = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Blauer Rahmen um das Element&lt;br /&gt;
 | border-gray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Grauer Rahmen um das Element&lt;br /&gt;
 | border-yellow = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Gelber Rahmen um das Element&lt;br /&gt;
 | border-lightgray = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hellgrauer Rahmen um das Element&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--   SONSTIGES --&amp;gt;&lt;br /&gt;
 | blank = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Öffnet die angegebene URL in einem neuen Fenster&lt;br /&gt;
 | transparent = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element erscheint komplett durchscheinend (somit nicht sichtbar; opacity: 0)&lt;br /&gt;
 | half-transparent = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element ist halb durchscheinend (opacity: 0.5)&lt;br /&gt;
 | blurry = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element wird in einen stark verschwommen, grauen Schatten umgewandelt&lt;br /&gt;
 | shake = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element zittert stark für einen unendlichen Zeitraum. Kann z.B. für eine Alarmglocke verwendet werden.&lt;br /&gt;
 | fail-shake = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element wackelt kurz hin und her und bleibt dann stehen&lt;br /&gt;
 | marquee = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element wandert wiederholt von rechts nach links&lt;br /&gt;
 | icon round = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Hintergrund mit abgerundeten Kanten&lt;br /&gt;
 | round = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Hintergrund mit abgerundeten Kanten&lt;br /&gt;
 | icon square = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Hintergrund mit eckigen Kanten&lt;br /&gt;
 | square = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Hintergrund mit eckigen Kanten&lt;br /&gt;
 | readonly = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Manuelle Änderung des Device-Zustandes nicht möglich&lt;br /&gt;
 | blink = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Blinkende Animation für Label- oder Switch-Widget&lt;br /&gt;
 | rotate-90 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element (z.B. Bild) um 90° rotieren&lt;br /&gt;
 | horizontal = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element horizontal ausrichten&lt;br /&gt;
 | negated = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Spiegelt die Wirkungsweise (tauscht oben/unten oder links/rechts)&lt;br /&gt;
 | autohide = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Versteckt das Element, wenn das angegebene Reading ungültig ist&lt;br /&gt;
 | notransmit = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Verhindert den Versand von Befehlen an FHEM&lt;br /&gt;
 | invert = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vertauscht Vorder- und Hintergrundfarbe&lt;br /&gt;
 | data-lock = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Wenn das angegebene FHEM-Reading den Wert &#039;&#039;1&#039;&#039;, &#039;&#039;on&#039;&#039; oder true&#039;&#039; hat, wird das Widget gesperrt&lt;br /&gt;
 | tap = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Durch einfaches Antippen zum gewünschten Wert springen&lt;br /&gt;
 | FS20 = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Konvertiert den Wertebereich 0...100 in das von FS20-Dimmern erwartete Format&lt;br /&gt;
 | value = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt ein Label am Element, das den aktuellen Wert enthält&lt;br /&gt;
 | novalue= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt den Wert nicht als Text, nur als Grafik an&lt;br /&gt;
 | timestamp = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt den Timestamp eines Readings statt dessen Inhalt&lt;br /&gt;
 | percent = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt nicht den ausgelesenen Wert an, sondern rechnet ihn in eine Prozentangabe zw. dem angegebenem Mindest- und Maximalwert um.&lt;br /&gt;
 | nocache = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzwingt das Neuladen eines Elementes (z.B. Bild, Seite, ...) bei jedem Aufruf statt der Zwischenspeicherung im Browser-Cache&lt;br /&gt;
 | hide = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt das Element nicht an und reserviert auch keinen Platz dafür&lt;br /&gt;
 | fade = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Element wird aus-, das nächste in der Liste eingeblendet&lt;br /&gt;
 | rotate = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Vertikaler Rotationseffekt&lt;br /&gt;
 | nolabels = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Beschriftungen werden ausgeblendet&lt;br /&gt;
 | noticks = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hilfslinien und Beschriftungen an X- und Y-Achse werden ausgeblendet&lt;br /&gt;
 | nobuttons = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Buttons werden ausgeblendet&lt;br /&gt;
 | prefetch = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Browser lädt den Inhalt im Hintergrund bevor er angezeigt wird um Ladezeit zu sparen&lt;br /&gt;
 | default = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Seite, die standardmäßig geladen wird bzw. Button, der standardmäßig &amp;quot;EIN&amp;quot; sein soll&lt;br /&gt;
 | valueonly = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Zeigt den Wert in Textform statt eines Balkens&lt;br /&gt;
 | circulate = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Anzeige startet bei Überschreiten des &amp;quot;max&amp;quot;-Wertes wieder beim &amp;quot;min&amp;quot;-Wert&lt;br /&gt;
 | positiononly = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Stellt nur die aktuelle Position dar, nicht einen ganzen Balken vom Startpunkt bis zur aktuellen Position&lt;br /&gt;
 | lineIndicator = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt eine vertikale Linie zur Anzeige der ausgewählten Farbe&lt;br /&gt;
 | barIndicator = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt eine horizontale Linie zur Anzeige der ausgewählten Farbe&lt;br /&gt;
 | roundIndicator = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Kreis zur Anzeige der ausgewählten Farbe&lt;br /&gt;
 | hue-tick = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt die Skalenstriche in einer Farbe aus einem Farbbereich ein&lt;br /&gt;
 | hue-front= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt den Einstellhebel in einer Farbe aus einem Farbbereich ein&lt;br /&gt;
 | hue-back= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt den Skalenhintergrund in einer Farbe aus einem Farbbereich ein&lt;br /&gt;
 | dim-tick= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt die Skalenstriche in einer Farbe aus einem Helligkeitsbereich ein&lt;br /&gt;
 | dim-front= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt den Einstellhebel in einer Farbe aus einem Helligkeitsbereich ein&lt;br /&gt;
 | dim-back= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Färbt die Skalenhintergrund in einer Farbe aus einem Helligkeitsbereich ein&lt;br /&gt;
 | warn = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Erzeugt einen Benachrichtigungsicon über einem Icon&lt;br /&gt;
 | activate = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Lädt die verlinkte Seite eines Pagetab-Widgets automatisch, wenn der Status eines Devices einem Wert aus dem Attribut &#039;&#039;data-get-on&#039;&#039; entspricht.&lt;br /&gt;
 | labelright = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Platziert die Beschreibung rechts unter dem Icon statt zentriert&lt;br /&gt;
 | interlock = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Verhindert, dass Popup-Elemente manuell geschlossen werden&lt;br /&gt;
 | keepopen = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Verhindert, dass sich das Circle-Menü nach Klick auf ein Objekt schließt&lt;br /&gt;
 | noshade = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Hintergrund wird beim Öffnen eines Circle-Menüs nicht abgedunkelt&lt;br /&gt;
 | fixedlabel= {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}Verhindert bei verschachtelten labels das Überschreiben von &#039;&#039;data-get&#039;&#039;&lt;br /&gt;
 | notext = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}blendet die Skalenbeschriftung im Widget Scale aus&lt;br /&gt;
 | autoclear = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}mit der Übernahme wird das Eingabefeld geleert&lt;br /&gt;
 | autoselect = {{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;width: 20%&amp;quot; {{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}beim Klicken ins Eingabefeld wird der enthaltene Text markiert&lt;br /&gt;
 | {{!}}-&lt;br /&gt;
{{!}}&#039;&#039;&#039;{{{1|}}}&#039;&#039;&#039;{{!!}}&#039;&#039;&#039;Fehler:&#039;&#039;&#039; Klasse nicht vorhanden&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Kategorie:Vorlage:]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30562</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30562"/>
		<updated>2019-05-30T03:35:38Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &amp;quot;Einfärbung von Kalendereinträgen (sourcecolor)&amp;quot; an neuen Modulstand angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Allgemeine Attribute===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Nahende Termine hervorheben===&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Titelzeile===&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbereich für class-Attribute===&lt;br /&gt;
Termine werden jeweils als einzelne Zeile mit der definierten Anzahl von Spalten dargestellt. Angegebene Werte für data-header-class, data-class bzw. data-daysleft-classes können also entweder einmalig einer kompletten Zeile oder aber einzeln jeder Spalte zugewiesen werden. Abhängig hiervon kann sich die Darstellung ändern; beispielsweise blinkt im einen Fall eine ganze Zeile; im anderen Fall nur der Vordergrund.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class-usage&#039;&#039;&#039;||Anwendungsbereich festlegen||col||data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swiper-Darstellung===&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
&lt;br /&gt;
Falls die Formatierungsmöglichkeiten unter Verwendung der class- bzw. color-Attribute nicht ausreichen, kann noch auf vorgegebene CSS-Klassen zurückgegriffen werden. Diese sind laut der folgenden Tabelle jedem calview-Element automatisch zugeordnet. Um sie mit Leben zu füllen, müssen die gewünschten CSS-Klassen in der user-spezifischen css-Datei angelegt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview&#039;&#039;&#039;||gilt für den ganzen Kalender&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-header&#039;&#039;&#039;||gilt für die komplette Headerzeile&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-header&#039;&#039;&#039;||gilt für eine einzelne Headerspalte&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; verwendet und auf den Wert &#039;&#039;yes&#039;&#039; setzt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
*In früheren Widget-Versionen musste zusätzlich im Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; die Spalte &#039;&#039;sourcecolor&#039;&#039; mit der Breite 0 enthalten sein; dies ist nicht mehr notwendig.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;weekdayname&amp;quot;,&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;70&amp;quot;]&#039;&lt;br /&gt;
     data-sourcecolor=&amp;quot;yes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von &#039;&#039;sourcecolor&#039;&#039; ignoriert wird. Die &#039;&#039;&#039;data-daysleft&#039;&#039;&#039;-Attribute allerdings haben Vorrag vor &#039;&#039;sourcecolor&#039;&#039; und führen - je nach daysleft-Konfiguration - zum Überschreiben der sourcecolor.&lt;br /&gt;
&lt;br /&gt;
===Beispiel unter Verwendung der vorgegebenen CSS-Klassen===&lt;br /&gt;
Folgendes Beispiel soll den Einsatz der vorgegebenen CSS-Klassen, die jedem calview-Element automatisch zugeordnet sind, zeigen.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal wird das folgende calview-widget deklariert. Es stellt einen Kalender mit einer Titelzeile und maximal 15 Terminen mit je drei Spalten dar. Termine, die in weniger als 17 Tagen anstehen, sollen speziell behandelt werden; Termine, die in weniger als 3 Tagen anstehen, sollen (zusätzlich) blinken. Bis auf das blink-Feature ist keine Information zur Formatierung der Termine enthalten. Folglich wird ein praktisch unformatierter Kalender dargestellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
                         data-daysleft-values=&#039;[2,9,16]&#039;&lt;br /&gt;
                         data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;weekdayname&amp;quot;,&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;70&amp;quot;]&#039;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-header=&#039;[&amp;quot;&amp;quot;,&amp;quot;am&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
                         data-max=&amp;quot;15&amp;quot;&lt;br /&gt;
                         data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
                         data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legt man in der user-spezifischen css-Datei zusätzlich folgende CSS-Klassen an, ändert sich die Darstellung des Kalenders grundlegend. Der ganze Kalender bekommt einen hellblauen Hintergrund mit abgerundeten Ecken und schwarzer Schrift. Die Titelzeile wird fett und mit leicht vergrößerter Schrift dargestellt. Normale Termine sind grau hinterlegt; Termine in max. 2 Tagen sind rot hinterlegt und blinken; Termine in max. 9 Tagen sind gelb hinterlegt; Termine in max. 16 Tagen sind grün hinterlegt - jeweils mit abgerundeten Ecken je Zeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.calview {&lt;br /&gt;
  background-color: #99ccff;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-header {&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  font-size:125%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-header {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row {&lt;br /&gt;
  background-color: #c0c0c0;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-1 {&lt;br /&gt;
  background-color: #ff8080;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-1 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-2 {&lt;br /&gt;
  background-color: #ffffb3;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-2 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-3 {&lt;br /&gt;
  background-color: #99ff99;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-3 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier angelegten CSS-Klassen gelten für jeden Kalender; über CSS-Selektoren können natürlich auch für jeden Kalender eigene CSS-Klassen angelegt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30497</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30497"/>
		<updated>2019-05-25T05:16:17Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Überflüssiges Attribut aus Beispiel entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Allgemeine Attribute===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Nahende Termine hervorheben===&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Titelzeile===&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbereich für class-Attribute===&lt;br /&gt;
Termine werden jeweils als einzelne Zeile mit der definierten Anzahl von Spalten dargestellt. Angegebene Werte für data-header-class, data-class bzw. data-daysleft-classes können also entweder einmalig einer kompletten Zeile oder aber einzeln jeder Spalte zugewiesen werden. Abhängig hiervon kann sich die Darstellung ändern; beispielsweise blinkt im einen Fall eine ganze Zeile; im anderen Fall nur der Vordergrund.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class-usage&#039;&#039;&#039;||Anwendungsbereich festlegen||col||data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swiper-Darstellung===&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
&lt;br /&gt;
Falls die Formatierungsmöglichkeiten unter Verwendung der class- bzw. color-Attribute nicht ausreichen, kann noch auf vorgegebene CSS-Klassen zurückgegriffen werden. Diese sind laut der folgenden Tabelle jedem calview-Element automatisch zugeordnet. Um sie mit Leben zu füllen, müssen die gewünschten CSS-Klassen in der user-spezifischen css-Datei angelegt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview&#039;&#039;&#039;||gilt für den ganzen Kalender&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-header&#039;&#039;&#039;||gilt für die komplette Headerzeile&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-header&#039;&#039;&#039;||gilt für eine einzelne Headerspalte&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
===Beispiel unter Verwendung der vorgegebenen CSS-Klassen===&lt;br /&gt;
Folgendes Beispiel soll den Einsatz der vorgegebenen CSS-Klassen, die jedem calview-Element automatisch zugeordnet sind, zeigen.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal wird das folgende calview-widget deklariert. Es stellt einen Kalender mit einer Titelzeile und maximal 15 Terminen mit je drei Spalten dar. Termine, die in weniger als 17 Tagen anstehen, sollen speziell behandelt werden; Termine, die in weniger als 3 Tagen anstehen, sollen (zusätzlich) blinken. Bis auf das blink-Feature ist keine Information zur Formatierung der Termine enthalten. Folglich wird ein praktisch unformatierter Kalender dargestellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
                         data-daysleft-values=&#039;[2,9,16]&#039;&lt;br /&gt;
                         data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;weekdayname&amp;quot;,&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;70&amp;quot;]&#039;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-header=&#039;[&amp;quot;&amp;quot;,&amp;quot;am&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
                         data-max=&amp;quot;15&amp;quot;&lt;br /&gt;
                         data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
                         data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legt man in der user-spezifischen css-Datei zusätzlich folgende CSS-Klassen an, ändert sich die Darstellung des Kalenders grundlegend. Der ganze Kalender bekommt einen hellblauen Hintergrund mit abgerundeten Ecken und schwarzer Schrift. Die Titelzeile wird fett und mit leicht vergrößerter Schrift dargestellt. Normale Termine sind grau hinterlegt; Termine in max. 2 Tagen sind rot hinterlegt und blinken; Termine in max. 9 Tagen sind gelb hinterlegt; Termine in max. 16 Tagen sind grün hinterlegt - jeweils mit abgerundeten Ecken je Zeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.calview {&lt;br /&gt;
  background-color: #99ccff;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-header {&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  font-size:125%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-header {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row {&lt;br /&gt;
  background-color: #c0c0c0;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-1 {&lt;br /&gt;
  background-color: #ff8080;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-1 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-2 {&lt;br /&gt;
  background-color: #ffffb3;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-2 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-3 {&lt;br /&gt;
  background-color: #99ff99;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-3 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier angelegten CSS-Klassen gelten für jeden Kalender; über CSS-Selektoren können natürlich auch für jeden Kalender eigene CSS-Klassen angelegt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30496</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30496"/>
		<updated>2019-05-25T05:14:53Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &amp;quot;Beispiel unter Verwendung der vorgegebenen CSS-Klassen&amp;quot; hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Allgemeine Attribute===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Nahende Termine hervorheben===&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Titelzeile===&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbereich für class-Attribute===&lt;br /&gt;
Termine werden jeweils als einzelne Zeile mit der definierten Anzahl von Spalten dargestellt. Angegebene Werte für data-header-class, data-class bzw. data-daysleft-classes können also entweder einmalig einer kompletten Zeile oder aber einzeln jeder Spalte zugewiesen werden. Abhängig hiervon kann sich die Darstellung ändern; beispielsweise blinkt im einen Fall eine ganze Zeile; im anderen Fall nur der Vordergrund.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class-usage&#039;&#039;&#039;||Anwendungsbereich festlegen||col||data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swiper-Darstellung===&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
&lt;br /&gt;
Falls die Formatierungsmöglichkeiten unter Verwendung der class- bzw. color-Attribute nicht ausreichen, kann noch auf vorgegebene CSS-Klassen zurückgegriffen werden. Diese sind laut der folgenden Tabelle jedem calview-Element automatisch zugeordnet. Um sie mit Leben zu füllen, müssen die gewünschten CSS-Klassen in der user-spezifischen css-Datei angelegt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview&#039;&#039;&#039;||gilt für den ganzen Kalender&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-header&#039;&#039;&#039;||gilt für die komplette Headerzeile&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-header&#039;&#039;&#039;||gilt für eine einzelne Headerspalte&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
===Beispiel unter Verwendung der vorgegebenen CSS-Klassen===&lt;br /&gt;
Folgendes Beispiel soll den Einsatz der vorgegebenen CSS-Klassen, die jedem calview-Element automatisch zugeordnet sind, zeigen.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal wird das folgende calview-widget deklariert. Es stellt einen Kalender mit einer Titelzeile und maximal 15 Terminen mit je drei Spalten dar. Termine, die in weniger als 17 Tagen anstehen, sollen speziell behandelt werden; Termine, die in weniger als 3 Tagen anstehen, sollen (zusätzlich) blinken. Bis auf das blink-Feature ist keine Information zur Formatierung der Termine enthalten. Folglich wird ein praktisch unformatierter Kalender dargestellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-class=&amp;quot;&amp;quot;&lt;br /&gt;
                         data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
                         data-daysleft-values=&#039;[2,9,16]&#039;&lt;br /&gt;
                         data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;weekdayname&amp;quot;,&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;70&amp;quot;]&#039;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-header=&#039;[&amp;quot;&amp;quot;,&amp;quot;am&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
                         data-max=&amp;quot;15&amp;quot;&lt;br /&gt;
                         data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
                         data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legt man in der user-spezifischen css-Datei zusätzlich folgende CSS-Klassen an, ändert sich die Darstellung des Kalenders grundlegend. Der ganze Kalender bekommt einen hellblauen Hintergrund mit abgerundeten Ecken und schwarzer Schrift. Die Titelzeile wird fett und mit leicht vergrößerter Schrift dargestellt. Normale Termine sind grau hinterlegt; Termine in max. 2 Tagen sind rot hinterlegt und blinken; Termine in max. 9 Tagen sind gelb hinterlegt; Termine in max. 16 Tagen sind grün hinterlegt - jeweils mit abgerundeten Ecken je Zeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.calview {&lt;br /&gt;
  background-color: #99ccff;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-header {&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  font-size:125%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-header {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row {&lt;br /&gt;
  background-color: #c0c0c0;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-1 {&lt;br /&gt;
  background-color: #ff8080;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-1 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-2 {&lt;br /&gt;
  background-color: #ffffb3;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-2 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-row-daysleft-3 {&lt;br /&gt;
  background-color: #99ff99;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding-left: 4px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calview-col-daysleft-3 {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier angelegten CSS-Klassen gelten für jeden Kalender; über CSS-Selektoren können natürlich auch für jeden Kalender eigene CSS-Klassen angelegt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30495</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30495"/>
		<updated>2019-05-25T04:16:50Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Abschnitt &amp;quot;CSS Klassen&amp;quot; hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Nahende Termine hervorheben:&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Titelzeile:&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Anwendungsbereich für class-Attribute:&lt;br /&gt;
Termine werden jeweils als einzelne Zeile mit der definierten Anzahl von Spalten dargestellt. Angegebene Werte für data-header-class, data-class bzw. data-daysleft-classes können also entweder einmalig einer kompletten Zeile oder aber einzeln jeder Spalte zugewiesen werden. Abhängig hiervon kann sich die Darstellung ändern; beispielsweise blinkt im einen Fall eine ganze Zeile; im anderen Fall nur der Vordergrund.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class-usage&#039;&#039;&#039;||Anwendungsbereich festlegen||col||data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Swiper-Darstellung:&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
&lt;br /&gt;
Falls die Formatierungsmöglichkeiten unter Verwendung der class- bzw. color-Attribute nicht ausreichen, kann noch auf vorgegebene CSS-Klassen zurückgegriffen werden. Diese sind laut der folgenden Tabelle jedem calview-Element automatisch zugeordnet. Um sie mit Leben zu füllen, müssen die gewünschten CSS-Klassen in der user-spezifischen css-Datei angelegt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview&#039;&#039;&#039;||gilt für den ganzen Kalender&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-header&#039;&#039;&#039;||gilt für die komplette Headerzeile&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-header&#039;&#039;&#039;||gilt für eine einzelne Headerspalte&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;kein&#039;&#039;&#039; daysleft-Fall vorliegt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-row-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine komplette Zeile eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;calview-col-daysleft-&amp;lt;n&amp;gt;&#039;&#039;&#039;||gilt für eine einzelne Spalte eines Termins, wenn &#039;&#039;&#039;ein&#039;&#039;&#039; daysleft-Fall vorliegt;&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039; entspricht dem Eintrag im daysleft-Array - beginnend mit 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30494</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30494"/>
		<updated>2019-05-25T03:32:18Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Anwendungsbereich für class-Attribute&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Nahende Termine hervorheben:&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Titelzeile:&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Anwendungsbereich für class-Attribute:&lt;br /&gt;
Termine werden jeweils als einzelne Zeile mit der definierten Anzahl von Spalten dargestellt. Angegebene Werte für data-header-class, data-class bzw. data-daysleft-classes können also entweder einmalig einer kompletten Zeile oder aber einzeln jeder Spalte zugewiesen werden. Abhängig hiervon kann sich die Darstellung ändern; beispielsweise blinkt im einen Fall eine ganze Zeile; im anderen Fall nur der Vordergrund.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class-usage&#039;&#039;&#039;||Anwendungsbereich festlegen||col||data-class-usage=&amp;quot;row&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Swiper-Darstellung:&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30493</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30493"/>
		<updated>2019-05-25T03:11:47Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Attribute für nahende Termine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Nahende Termine hervorheben:&lt;br /&gt;
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional. Fehlt ein optionales Attribut oder enthält leere Einträge, wird der für normale Termine gültige Wert angenommen; andernfalls wird der für normale Termine gültige Wert durch den angegebenen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-values&#039;&#039;&#039;||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values=&#039;[1,3,8]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-classes&#039;&#039;&#039;||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes=&#039;[&amp;quot;blink&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-colors&#039;&#039;&#039;||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysleft-background-colors&#039;&#039;&#039;||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors=&#039;[&amp;quot;gray&amp;quot;,&amp;quot;lightgray&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Titelzeile:&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von &#039;&#039;&#039;data-header&#039;&#039;&#039;. Die anderen Attribute sind allesamt optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color ; optional||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Swiper-Darstellung:&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30492</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30492"/>
		<updated>2019-05-25T02:23:40Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Attribute für Titelzeile ; kleinere Attribut-Anpassungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbname||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color=&amp;quot;#0000ff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;||data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;60&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Infotext anzeigen, wenn keine Termine vorhanden sind&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;true&#039;&#039;, &#039;&#039;false&#039;&#039; oder &#039;&#039;individueller Text&#039;&#039;||true||data-showempty=&amp;quot;Derzeit keine Termine&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Titelzeile:&lt;br /&gt;
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header&#039;&#039;&#039;||Array - analog zu data-detail||||data-header=&#039;[&amp;quot;am&amp;quot;,&amp;quot;um&amp;quot;,&amp;quot;Zusammenfassung&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-class&#039;&#039;&#039;||CSS-Klasse(n) - analog zu data-class||||data-header-class=&amp;quot;large&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-color&#039;&#039;&#039;||Textfarbe - analog zu data-color||||data-header-color=&amp;quot;hotpink&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-header-background-color&#039;&#039;&#039;||Hintergrundfarbe - analog zu data-background-color||||data-header-background-color=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Swiper-Darstellung:&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30491</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30491"/>
		<updated>2019-05-25T01:41:18Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Attribute für Swiper-Darstellung ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbnamen||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||Formatierung der Anzeige, es lassen sich alle im FTUI verfügbaren class-Werte einfügen.||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;[&amp;quot;bdate&amp;quot;, &amp;quot;btime&amp;quot;, &amp;quot;summary&amp;quot;, &amp;quot;location&amp;quot;, &amp;quot;edate&amp;quot;, &amp;quot;etime&amp;quot;, &amp;quot;source&amp;quot;, &amp;quot;age&amp;quot;, &amp;quot;description&amp;quot;]&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;15&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige ohne Jahreszahl||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige ohne Sekunden||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Zeigt einen Text an, wenn keine Termine im angegebenen Zeitraum vorhanden sind||true||data-showempty=&amp;quot;false&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Swiper-Darstellung:&lt;br /&gt;
Um z.B. viele Termine im Zugriff zu haben, aber nur wenig Platz zu benötigen, kann die Swiper-Darstellung genutzt werden. Hierbei stellt jeder Termin eine eigene Swiper-Seite dar; zwischen diesen kann manuell oder automatisch gewechselt werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiperstyle&#039;&#039;&#039;||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-autoplay&#039;&#039;&#039;||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay=&amp;quot;2000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-effect&#039;&#039;&#039;||Effekt für den Wechsel zum nächsten Termin festlegen&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;flip&#039;&#039; bzw. &#039;&#039;slide&#039;&#039;||flip||data-swiper-effect=&amp;quot;slide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-swiper-pagination&#039;&#039;&#039;||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination=&amp;quot;no&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30300</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=30300"/>
		<updated>2019-04-29T16:02:09Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Nicht (mehr) existierende Attribute aus den Beispielen entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbnamen||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||Formatierung der Anzeige, es lassen sich alle im FTUI verfügbaren class-Werte einfügen.||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;[&amp;quot;bdate&amp;quot;, &amp;quot;btime&amp;quot;, &amp;quot;summary&amp;quot;, &amp;quot;location&amp;quot;, &amp;quot;edate&amp;quot;, &amp;quot;etime&amp;quot;, &amp;quot;source&amp;quot;, &amp;quot;age&amp;quot;, &amp;quot;description&amp;quot;]&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;15&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige ohne Jahreszahl||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige ohne Sekunden||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Zeigt einen Text an, wenn keine Termine im angegebenen Zeitraum vorhanden sind||true||data-showempty=&amp;quot;false&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Filelog&amp;diff=30200</id>
		<title>FTUI Widget Filelog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Filelog&amp;diff=30200"/>
		<updated>2019-04-20T16:49:40Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: data-ago integriert; data-refresh-btn entfernt ; kleinere Anpassungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Filelog Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem man Teile aus einem FHEM Logfile anzeigen lassen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FileLog-Devices, dessen Logeinträge angezeigt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Widgets||150px||90%&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Widgets||400px||100%&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max-items&#039;&#039;&#039;||maximale Anzahl der anzuzeigenden Logeinträge; -1 bedeutet alle||-1||15&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Änderung eine Aktualisierung auslösen soll||linesInTheFile||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-disable-update-event&#039;&#039;&#039;||autom. Update des Widgets deaktivieren||0||1&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-substitution&#039;&#039;&#039;||Ermöglicht den empfangenen Logeintrag für die Anzeige zu modifizieren|| ||s/all_AlarmLog//g&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ago&#039;&#039;&#039;||Zeit in Minuten; wichtig für die Berücksichtigung von Logeinträgen aus der Vergangenheit||0||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
* Im entsprechenden FileLog-Device muss das Attribut eventOnThreshold auf &amp;quot;1&amp;quot; gesetzt werden, damit bei einer Änderung ein linesInTheFile-Event ausgelöst wird.&lt;br /&gt;
* Vom FileLog-Device werden immer nur Daten aus einem Logfile zurückgegeben; bei täglichen Logfiles also z.B. nur Daten von heute oder von gestern - niemals von gestern und heute.&lt;br /&gt;
* Derzeit ist es nicht möglich, Logeinträge aus dem globalen FHEM-Logfile anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Filelog eines Dummys===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;filelog&amp;quot;&lt;br /&gt;
class=&amp;quot;left-align bigger darker&amp;quot;&lt;br /&gt;
data-device=&amp;quot;FileLog_all_AlarmLog&amp;quot;&lt;br /&gt;
data-ago=&amp;quot;500&amp;quot;&lt;br /&gt;
data-height=&amp;quot;450px&amp;quot;&lt;br /&gt;
data-width=&amp;quot;750px&amp;quot;&lt;br /&gt;
data-refresh-btn=&amp;quot;0&amp;quot;&lt;br /&gt;
data-substitution=&amp;quot;s/all_AlarmLog//g&amp;quot;&lt;br /&gt;
data-max-items=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links== &lt;br /&gt;
[https://forum.fhem.de/index.php/topic,63759.msg881293.html#msg881293 Aktuell funktionierende Version und Forenthread]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Filelog]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Pagetab&amp;diff=28239</id>
		<title>FTUI Widget Pagetab</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Pagetab&amp;diff=28239"/>
		<updated>2018-11-05T18:57:17Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Attribute angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Pagetab Widget]] ist ein Widget für [[FHEM Tablet UI]], welches es erlaubt, den Inhalt einer Seite durch den einer anderen zu ersetzen. Es kann zum Beispiel für ein Menü verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:FTUI_Widget_Pagetab_03.png&lt;br /&gt;
File:FTUI_Widget_Pagetab_04.png&lt;br /&gt;
File:FTUI_Widget_Pagetab_01.png&lt;br /&gt;
File:FTUI_Widget_Pagetab_02.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-url&#039;&#039;&#039;||URL der neuen Seite, die angezeigt werden soll||||data-url=&amp;quot;content_main.html&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Vordergrund-Icon des Widgets||fa-power-off||data-icon=&amp;quot;mi-home&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-icon&#039;&#039;&#039;||Hintergrund-Icon des Widgets||fa-circle||data-background-icon=&amp;quot;fa-square&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-background-color&#039;&#039;&#039;||Farbe des Hintergrund-Icons, wenn der gewünschte Inhalt angezeigt wird||#606060||data-on-background-color=&amp;quot;gray&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-background-color&#039;&#039;&#039;||Farbe des Vordergrund-Icons, wenn der gewünschte Inhalt nicht angezeigt wird||transparent||data-off-background-color=&amp;quot;#cccccc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-color&#039;&#039;&#039;||Farbe des Vordergrund-Icons, wenn der gewünschte Inhalt angezeigt wird||#222222||data-on-color=&amp;quot;yellow&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-color&#039;&#039;&#039;||Farbe des Vordergrund-Icons, wenn der gewünschte Inhalt nicht angezeigt wird||#505050||data-off-color=&amp;quot;#000000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM Device, welches das Aussehen/Verhalten des Widgets bestimmt||||data-device=&amp;quot;dummy1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Wert ausgewertet werden soll||STATE||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-on&#039;&#039;&#039;||Array von Werten, die das Reading einnehmen kann||||data-get-on=&#039;[&amp;quot;Ein&amp;quot;,&amp;quot;Pause&amp;quot;,&amp;quot;Aus&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icons&#039;&#039;&#039;||Array von Icons, die in Abhängigkeit von &#039;&#039;data-get-on&#039;&#039; angezeigt werden||||data-icons=&#039;[&amp;quot;mi-play_arrow&amp;quot;,&amp;quot;mi-pause&amp;quot;,&amp;quot;mi-stop&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-return-time&#039;&#039;&#039;||Zeit in Sekunden für autom. Rückkehr zur &amp;quot;Startseite&amp;quot;&amp;lt;br&amp;gt;(muss auf dem ersten pagetab platziert werden).&amp;lt;br&amp;gt;Ein Wert von 0 bedeutet keine autom. Rückkehr||0||data-return-time=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-text&#039;&#039;&#039;||Text für die Beschreibung||||data-text=&amp;quot;Home&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{FTUI Klasse|warn}}{{FTUI Klasse|activate}}{{FTUI Klasse|labelright}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfacher Link===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;pagetab&amp;quot;&lt;br /&gt;
     data-url=&amp;quot;index.html&amp;quot;&lt;br /&gt;
     data-icon=&amp;quot;mi-home&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Pagetab_03.png]]&lt;br /&gt;
&lt;br /&gt;
===Einfacher Link mit Beschreibungstext===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;pagetab&amp;quot;&lt;br /&gt;
     data-url=&amp;quot;index.html&amp;quot;&lt;br /&gt;
     data-icon=&amp;quot;mi-home&amp;quot;&lt;br /&gt;
     data-text=&amp;quot;home&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Pagetab_04.png]]&lt;br /&gt;
&lt;br /&gt;
===Navigationsleiste===&lt;br /&gt;
Ein guter Anwendungszweck für das Pagetab-Widget ist eine Navigationsleiste. Dazu braucht es allerdings mehrere Seiten:&lt;br /&gt;
*Eine mit der Navigation selbst. Die wird später als Template auf den Zielseiten eingebunden&lt;br /&gt;
*Eine Startseite&lt;br /&gt;
*Eine oder mehrere Zielseiten, auf die navigiert werden kann&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Menü-Seite (menu.html)&lt;br /&gt;
Eine Menü-Seite könnte z.B. wie folgt aussehen. Auf dieser Seite sind drei Pagetab-Widgets platziert.&lt;br /&gt;
*Das erste ist ein ganz einfacher Link mit einem Beschreibungstext. Die Seite unter &#039;&#039;data-url&#039;&#039; wird beim Aufruf der Startseite automatisch geladen.&lt;br /&gt;
*Das zweite Widget ändert sein Icon je nach Status-Wert des Dummies &#039;&#039;dummy1&#039;&#039;. Ist der Status 0, wird nur das Icon &#039;&#039;fa-fax&#039;&#039; angezeigt. Ist der Status größer 0, erscheint rechts über dem Icon noch ein &amp;quot;Warnhinweis&amp;quot; mit dem Status-Wert des Dummies. Außerdem ist der Beschreibungstext nach rechts gerückt.&lt;br /&gt;
*Das dritte Widget funktioniert im Prinzip wie das zweite. Außer der Status-Wert des Dummies ist &#039;&#039;on&#039;&#039;. Dann wird die im Widget verlinkte Seite automatisch geöffnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;pagetab&amp;quot;&lt;br /&gt;
			 data-url=&amp;quot;pagetab01.html&amp;quot;&lt;br /&gt;
			 data-icon=&amp;quot;fa-home&amp;quot;&lt;br /&gt;
			 data-text=&amp;quot;home&amp;quot;&lt;br /&gt;
			 class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;pagetab&amp;quot;&lt;br /&gt;
			 data-device=&amp;quot;dummy1&amp;quot;&lt;br /&gt;
			 data-get-on=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&lt;br /&gt;
			 data-icons=&#039;[&amp;quot;fa-fax&amp;quot;,&amp;quot;fa-fax warn&amp;quot;]&#039;&lt;br /&gt;
			 data-url=&amp;quot;pagetab02.html&amp;quot;	&lt;br /&gt;
			 data-text=&amp;quot;anrufe&amp;quot;&lt;br /&gt;
			 class=&amp;quot;cell labelright&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;pagetab&amp;quot;&lt;br /&gt;
			 data-device=&amp;quot;dummy2&amp;quot;&lt;br /&gt;
			 data-get-on=&#039;[&amp;quot;0&amp;quot;,&amp;quot;(?:[1-9][0-9]*)&amp;quot;,&amp;quot;on&amp;quot;]&#039;&lt;br /&gt;
			 data-icons=&#039;[&amp;quot;fa-fax&amp;quot;,&amp;quot;fa-fax warn&amp;quot;,&amp;quot;fa-fax warn activate&amp;quot;]&#039;&lt;br /&gt;
			 data-url=&amp;quot;pagetab03.html&amp;quot;&lt;br /&gt;
			 class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Startseite (index.html)&lt;br /&gt;
Auf der Startseite müssen keine Inhalte sein. Durch das erste Pagetab-Widget wird dessen URL automatisch geladen. Allerdings ist das Menü-Template einzubinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;js/fhem-tablet-ui.js&amp;quot; defer&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;FHEM-Tablet-UI&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gridster&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot; data-sizey=&amp;quot;4&amp;quot; data-template=&amp;quot;menu.html&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;2&amp;quot; data-sizex=&amp;quot;4&amp;quot; data-sizey=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Zielseiten (pagetab01.html, pagetab02.html, pagetab03.html)&lt;br /&gt;
Die Zielseiten können ganz normal gestaltet werden. Es ist nur darauf zu achten, dass auf jeder Zielseite auch das Menü-Template eingebunden wird. Eine Zielseite könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gridster&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot; data-sizey=&amp;quot;4&amp;quot; data-template=&amp;quot;menu.html&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;2&amp;quot; data-sizex=&amp;quot;4&amp;quot; data-sizey=&amp;quot;4&amp;quot; class=&amp;quot;left-align&amp;quot;&amp;gt;Pagetab02.html&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird nun auf eines der Icons geklickt, blendet die aktuelle Seite aus und die Zielseite wird eingeblendet.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Pagetab_02.png]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Pagetab]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=MsgDialog&amp;diff=28232</id>
		<title>MsgDialog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=MsgDialog&amp;diff=28232"/>
		<updated>2018-11-04T18:21:19Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Erläuterung zu msgContactPush hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Dialoge für Sofortnachrichten über TelegramBot, Jabber und WhatsApp&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=76_msgDialog.pm&lt;br /&gt;
|ModOwner={{Link2FU|4106|igami}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Zielsetzung ==&lt;br /&gt;
Ein zentrale Anforderung an die Haus-Automation ist die Kommunikation mit den Anwendern. Fast jeder Anwender möchte über bestimmte Ereignisse informiert werden und Einstellungen vornehmen. FHEM bietet schon seit längerem die Unterstützung für verschiedene Messaging Dienste an.&lt;br /&gt;
Mit dem msgDialog Modul können vordefinierte Dialoge erstellt werden. Die Kommunikation erfolgt dabei über den [[msg]] Befehl welcher zurzeit die bidirektionale Kommunikation über [[TelegramBot]], [[Jabber]] und [[yowsup]] (WhatsApp) unterstützt. Eingehende Nachrichten werden einem ROMMATE oder GUEST zugeordnet. Darüber werden auch die Berechtigungen für die einzelnen Dialoge festgelegt.&lt;br /&gt;
Die grundlegende Bedienung wird in diesem &#039;&#039;&#039;[https://youtu.be/yiCOTeR1YVQ Video]&#039;&#039;&#039; am Beispiel von TelegramBot gezeigt.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen ===&lt;br /&gt;
Für dieses Modul wird das Perl JSON Modul benötigt. Auf einem Debian-basierten System (z.B RaspberryPI o.ä.) kann man das mit dem folgenden Befehl installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libjson-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hinweis zu den Code Beispielen ===&lt;br /&gt;
Es handelt sich bei den Beispielen um eine Raw definition, siehe auch [[Import_von_Code_Snippets]]&lt;br /&gt;
&lt;br /&gt;
=== msgConfig ===&lt;br /&gt;
&lt;br /&gt;
Als erstes benötigt man ein definiertes msgConfig device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod myMsgConfig msgConfig&lt;br /&gt;
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField&lt;br /&gt;
attr myMsgConfig msgContactPush &amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
attr myMsgConfig msgDialog_evalSpecials me=&amp;lt;Aktivierungswort bzw. -Nachricht&amp;gt;\&lt;br /&gt;
TelegramBot=&amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls bereits vorhanden, müssen natürlich nur die fehlenden Attribute gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
;msgDialog_evalSpecials&lt;br /&gt;
:key1=value1 key2=value2 ... Leerzeichen getrennte Liste von Name=Wert Paaren. Wert kann Leerzeichen enthalten, falls es in &amp;quot;&amp;quot; oder {} eingeschlossen :ist. Wert wird als perl-Ausdruck ausgewertet, falls es in {} eingeschlossen ist. In der DEF werden %Name% Zeichenketten durch den zugehörigen Wert :ersetzt. Wenn der selbe Name im msgConfig und msgDialog definiert wurde, wird der Wert aus msgDialog verwendet.&lt;br /&gt;
&lt;br /&gt;
;msgDialog_msgCommand &amp;lt;command&amp;gt;&lt;br /&gt;
:Befehl zum Versenden einer Nachricht. Die Vorgabe ist &amp;quot;msg push \@$recipients $message&amp;quot;. Wenn nicht gesetzt, wird die Vorgabe verwendet.&lt;br /&gt;
&lt;br /&gt;
=== ROOMMATE / GUEST ===&lt;br /&gt;
Für jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut &amp;quot;allowed&amp;quot; in msgDialog.&lt;br /&gt;
&lt;br /&gt;
Der Inhalt vom Attribut msgContactPush muss folgendem Muster entsprechen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;NAME des TelegramBot Device&amp;gt;:@&amp;lt;zum ROOMMATE/GUEST gehörende Telegram ID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&lt;br /&gt;
Definition des metaDialogs:&lt;br /&gt;
Zur Auflistung aller berechtigten Dialoge dient - was sonst - ein Dialog!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod meta_Dialog msgDialog {\&lt;br /&gt;
  &amp;quot;%me%&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?(start|%me%)&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;{return(&#039;(&#039; . join(&#039;) (&#039;, sort{lc($a) cmp lc($b)} (split(&#039;\n&#039;, fhem(&#039;get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger&#039;, 1)))) . &#039;) (abbrechen) &#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;Ich kann folgendes für dich tun:&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;zurück&amp;quot;: {\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, &#039;$recipient_history&#039;, &#039;&#039;) =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}&amp;quot;\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;abbrechen&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?abbrechen&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Dialog abgebrochen.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;beenden&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?beenden&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Dialog beendet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr meta_Dialog allowed everyone&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufgrund der Komplexität eines Dialogs mit JSON ist es am praktikabelsten, zunächst einen leeren Dialog zu definieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; msgDialog {} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann die &#039;&#039;&#039;DEF&#039;&#039;&#039; in der Detail-Ansicht des Dialog-Device bearbeitet werden. Jeder Dialog basiert auf der folgenden Struktur von einfach bis komplex.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;&amp;lt;TRIGGER&amp;gt;&amp;quot;: {&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;&amp;lt;regex&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: (true|false),&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;(fhem command|{perl code})&amp;quot;,&lt;br /&gt;
    &amp;quot;message&amp;quot;: [&lt;br /&gt;
      &amp;quot;{perl code}&amp;quot;,&lt;br /&gt;
      &amp;quot;text&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;&amp;lt;NEXT TRIGGER 1&amp;gt;&amp;quot;: {&lt;br /&gt;
      ...&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;&amp;lt;NEXT TRIGGER 2&amp;gt;&amp;quot;: {&lt;br /&gt;
      ...&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den JSON-Teil der Dialoge zu testen, empfiehlt sich ein Besuch auf https://jsonlint.com/&lt;br /&gt;
Hier kann der selbst geschriebene JSON-Code validiert werden.&lt;br /&gt;
&lt;br /&gt;
;TRIGGER &lt;br /&gt;
:Kann ein beliebiger Text sein. Es wird geprüft ob die eingehende Nachricht damit übereinstimmt. Falls ja, wird der Dialog an dieser Stelle fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
;match&lt;br /&gt;
:Wenn nicht nur genau eine Nachricht zugelassen werden soll, kann noch eine regex angegeben werden. Die regex muss auf die gesamte eingehnde Nachricht :zutreffen. &lt;br /&gt;
&lt;br /&gt;
;setOnly &lt;br /&gt;
:Kann optional auf true oder false gestellt werden. In beiden fällen wird der TRIGGER dann nicht bei &amp;quot;get &amp;lt;name&amp;gt; trigger&amp;quot; zurück gegeben.&lt;br /&gt;
:Wenn setOnly auf &amp;quot;true&amp;quot; gestellt wird, kann der Dialog an dieser Stelle nicht durch eingehende Nachrichten ausgelöst werden, sondern nur über &amp;quot;get &amp;lt;name&amp;gt; say TRIGGER&amp;quot;. Dies kann dazu genutzt werden um einen Dialog aus :FHEM heraus zu initiieren.&lt;br /&gt;
&lt;br /&gt;
;commands&lt;br /&gt;
:Kann einen einzelnen oder mehrere Befehle enthalten: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;commands&amp;quot;: &amp;quot;single command&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;commands&amp;quot;: [&lt;br /&gt;
&amp;quot;command 1&amp;quot;,&lt;br /&gt;
&amp;quot;command 2&amp;quot;,&lt;br /&gt;
&amp;quot;{perl command}&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;message &lt;br /&gt;
:Kann einen einzelnen oder mehrere Textte enthalten die mit einen Zeilenumbruch verbunden werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
  &amp;quot;text 1&amp;quot;,&lt;br /&gt;
  &amp;quot;text 2&amp;quot;,&lt;br /&gt;
  &amp;quot;{return from perl command}&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei mehrstufigen Dialogen wird diese Struktur ineinander verschachtelt angegeben.&lt;br /&gt;
Es werden Variablen und Platzhalter, welche unter dem Attribut evalSpecials definiert werden, ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
*$SELF: Eigenname des msgDialog&lt;br /&gt;
*$message: eingegangene Nachricht&lt;br /&gt;
*$recipient: Name des Dialogpartners&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
*allowed: Liste mit allen RESIDENTS und ROOMMATE die für diesen Dialog berechtigt sind.&lt;br /&gt;
*disable: [0|1] Dialog ist aktiviert|deaktiviert.&lt;br /&gt;
*disabledForIntervals: HH:MM-HH:MM HH:MM-HH-MM ...&lt;br /&gt;
*evalSpecials: key1=value1 key2=value2 ...Leerzeichen getrennte Liste von Name=Wert Paaren. Wert kann Leerzeichen enthalten, falls es in &amp;quot;&amp;quot; oder {} eingeschlossen ist. Wert wird als perl-Ausdruck ausgewertet, falls es in {} eingeschlossen ist. In der DEF werden %Name% Zeichenketten durch den zugehörigen Wert ersetzt. Dieses Attribut ist als &amp;quot;msgDialog_evalSpecials&amp;quot; im msgConfig Gerät vorhanden. Wenn der selbe Name im msgConfig und msgDialog definiert wurde, wird der Wert aus msgDialog verwendet.&lt;br /&gt;
*msgCommand &amp;lt;command&amp;gt;: Befehl der zum Versenden einer Nachricht verwendet wird. Die Vorgabe ist &amp;quot;msg push \@$recipients $message&amp;quot; Dieses Attribut ist als &amp;quot;msgDialog_msgCommand&amp;quot; im msgConfig Gerät vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
*reset: Setzt den Dialog für alle Benutzer zurück.&lt;br /&gt;
*say [@&amp;lt;recipient1&amp;gt;[,&amp;lt;recipient2&amp;gt;,...]] &amp;lt;TRIGGER&amp;gt;[|&amp;lt;NEXT TRIGGER&amp;gt;|...]: Der Dialog wird für alle angegeben Empänger an der angegeben Stelle fortgeführt. Sind keine Empfänger angegeben wird der Dialog für alle unter dem Attribut allowed angegebenen Empfänger fortgeführt.&lt;br /&gt;
*updateAllowed: Aktualisiert die Auswahl für das Attribut allowed.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
*trigger: Listet alle TRIGGER der ersten Ebene auf bei denen nicht setOnly angegeben ist.&lt;br /&gt;
&lt;br /&gt;
=== READINGS ===&lt;br /&gt;
*$recipient_history: Durch | getrennte Liste von TRIGGER um den aktuellen Zustand des Dialogs zu sichern. Für jeden Dialogpartner wird ein Reading angelegt. Wenn der Dialog beendet ist wird das Reading zurückgesetzt.&lt;br /&gt;
&lt;br /&gt;
== Hilfe bei der Fehlersuche ==&lt;br /&gt;
Hier entsteht eine Sammlung von Tipps bei der Fehlersuche. Die meisten dieser &amp;quot;Stolpersteine&amp;quot;&lt;br /&gt;
entstehen häufig bei der Erstellung eines ersten eigenen Dialoges.&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut allowed fehlt oder ist nicht korrekt gesetzt ===&lt;br /&gt;
Das allowed-Attribut dient dazu, einzelne Dialoge für alle  oder nur bestimmte Benutzer zu berechtigen.&lt;br /&gt;
Fehlt es, wird der Dialog dem aufrufenden Benutzer nicht angezeigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Testdialog allowed everyone&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut msgDialog_evalSpecials fehlt oder ist nicht korrekt gesetzt ===&lt;br /&gt;
Dieses Attribut gehört dem msgConfig device und muss wie in 2.3 zu lesen&lt;br /&gt;
korrekt befüllt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr myMsgConfig msgDialog_evalSpecials me=&amp;lt;Aktivierungswort bzw. -Nachricht&amp;gt;&lt;br /&gt;
TelegramBot=&amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut utf8Special fehlt beim TelegramBot device ===&lt;br /&gt;
Dieses Attribut ist für die korrekte UTF-8 Kodierung zuständig und im Standard deaktiviert.&lt;br /&gt;
Der Satz &amp;quot;Was kann ich für dich tun?&amp;quot; aus dem Meta-Dialog enthält bereits einen Umlaut!&lt;br /&gt;
&lt;br /&gt;
Folgende FHEM-Log-Fehlermeldung kann auf das fehlende Attribut hindeuten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Datum&amp;gt; &amp;lt;Zeit&amp;gt; 3: TelegramBot_Callback &amp;lt;TelegramBot-Device&amp;gt;: resulted in NonBlockingGet timed out on read from &amp;lt;hidden&amp;gt; after 30s from SendIt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JSON-Syntax Fehler ===&lt;br /&gt;
Das Modul prüft vor dem Abspeichern auf eine korrekte JSON-Syntax.&lt;br /&gt;
Meistens wird auch eine sprechende Meldung angezeigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: define &amp;lt;name&amp;gt; msgDialog {JSON}&lt;br /&gt;
&lt;br /&gt;
, or ] expected while parsing array, at character offset 73 (before &amp;quot;}\n}&amp;quot;) at ./FHEM/76_msgDialog.pm line 93.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eine gute Anlaufstelle zur Überprüfung von JSON-Code ist hier: https://jsonlint.com/&lt;br /&gt;
 &lt;br /&gt;
=== Es werden keine Dialoge angezeigt ===&lt;br /&gt;
Ohne die Angabe einer normalen Nachricht wird bei Keyboards kein Dialog angezeigt: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Erst mit der Nachricht &amp;quot;Möchtest Du Lampen ein oder ausschalten?&amp;quot; erscheint der Dialog:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
&amp;quot;Möchtest Du Lampen ein oder ausschalten?&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Innerhalb eines Dialogs fehlen einzelne Menüeinträge ===&lt;br /&gt;
Das liegt das meistens an einem fehlenden Leerzeichen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten)&amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei &amp;quot;Lampen ausschalten&amp;quot; ist dagegen korrekt ein Leerzeichen zu sehen und somit auch der Menüeintrag im Dialog.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;:&amp;quot; bei Inline Keyboards ===&lt;br /&gt;
Bei Inline Keyboards wird der letzte : als Trennzeichen zwischen Nachricht und Befehl ausgewertet.&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;(Temperatur: [heizung:desiredTemperature]°C:setheiz) &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;([test:state]:weiter) &amp;quot; wenn [test:state] = &amp;quot;Status: ok&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
==== Programmierung der Waschmaschine ====&lt;br /&gt;
Das ist ein Beispiel zur Programmierung einer Waschmaschine wie auch oben im Video zu sehen: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod Waschmaschine_Dialog msgDialog { &amp;quot;Waschmaschine&amp;quot;: {\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;{return(&#039;(Zeitprogramm stoppen) &#039;) if(ReadingsVal(&#039;%controlUnit%&#039;, &#039;controlMode&#039;, &#039;&#039;) eq &#039;auto&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;(programmieren) &#039;) if(ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) ne &#039;on&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;(einschalten) &#039;) if(ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) ne &#039;on&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;(Verlaufsdiagramm) &amp;quot;,\&lt;br /&gt;
      &amp;quot;(abbrechen) &amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;Waschmaschine: &#039; . (ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) eq &#039;on&#039; ? &#039;eingeschaltet&#039; : &#039;ausgeschaltet&#039;))}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;Modus: &#039; . (ReadingsVal(&#039;%controlUnit%&#039;, &#039;controlMode&#039;, &#039;&#039;) eq &#039;auto&#039; ? &#039;Automatik&#039; : &#039;Manuell (&#039; . ReadingsVal(&#039;%controlUnit%&#039;, &#039;time&#039;, &#039;&#039;) . &#039;)&#039;))}&amp;quot;\&lt;br /&gt;
    ],\&lt;br /&gt;
    &amp;quot;Zeitprogramm stoppen&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: &amp;quot;set %controlUnit% controlMode manual&amp;quot;,\&lt;br /&gt;
      &amp;quot;message&amp;quot;: [\&lt;br /&gt;
        &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
        &amp;quot;Das Zeitprogramm wurde gestoppt.&amp;quot;\&lt;br /&gt;
      ]\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;programmieren&amp;quot;: {\&lt;br /&gt;
      &amp;quot;message&amp;quot;: [\&lt;br /&gt;
        &amp;quot;(bestätigen|zurück|abbrechen) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 00:00 | 00:15 | 00:30 | 00:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 01:00 | 01:15 | 01:30 | 01:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 02:00 | 02:15 | 02:30 | 02:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 03:00 | 03:15 | 03:30 | 03:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 04:00 | 04:15 | 04:30 | 04:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 05:00 | 05:15 | 05:30 | 05:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 06:00 | 06:15 | 06:30 | 06:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 07:00 | 07:15 | 07:30 | 07:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 08:00 | 08:15 | 08:30 | 08:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 09:00 | 09:15 | 09:30 | 09:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 10:00 | 10:15 | 10:30 | 10:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 11:00 | 11:15 | 11:30 | 11:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 12:00 | 12:15 | 12:30 | 12:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 13:00 | 13:15 | 13:30 | 13:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 14:00 | 14:15 | 14:30 | 14:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 15:00 | 15:15 | 15:30 | 15:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 16:00 | 16:15 | 16:30 | 16:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 17:00 | 17:15 | 17:30 | 17:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 18:00 | 18:15 | 18:30 | 18:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 19:00 | 19:15 | 19:30 | 19:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 20:00 | 20:15 | 20:30 | 20:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 21:00 | 21:15 | 21:30 | 21:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 22:00 | 22:15 | 22:30 | 22:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 23:00 | 23:15 | 23:30 | 23:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;Wann soll die Wäsche fertig sein?&amp;quot;,\&lt;br /&gt;
        &amp;quot;Bitte Uhrzeit in HH:MM angeben.&amp;quot;,\&lt;br /&gt;
        &amp;quot;Aktuell ist [%controlUnit%:time] Uhr eingestellt.&amp;quot;\&lt;br /&gt;
      ],\&lt;br /&gt;
      &amp;quot;Uhrzeit&amp;quot;: {\&lt;br /&gt;
        &amp;quot;match&amp;quot;: &amp;quot; ?([0-1][0-9]|2[0-3]):[0-5][0-9] ?&amp;quot;,\&lt;br /&gt;
        &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
          &amp;quot;set %controlUnit% time $message&amp;quot;,\&lt;br /&gt;
          &amp;quot;set $SELF say @$recipient Waschmaschine|programmieren|bestätigen&amp;quot;\&lt;br /&gt;
        ]\&lt;br /&gt;
      },\&lt;br /&gt;
      &amp;quot;bestätigen&amp;quot;: {\&lt;br /&gt;
        &amp;quot;commands&amp;quot;: &amp;quot;set %controlUnit% controlMode auto&amp;quot;,\&lt;br /&gt;
        &amp;quot;message&amp;quot;: [\&lt;br /&gt;
          &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
          &amp;quot;Das Zeitprogramm wurde eingestellt.&amp;quot;,\&lt;br /&gt;
          &amp;quot;Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.&amp;quot;,\&lt;br /&gt;
          &amp;quot;Bitte die Waschmaschine vorbereiten.&amp;quot;\&lt;br /&gt;
        ]\&lt;br /&gt;
      }\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;einschalten&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
        &amp;quot;set %controlUnit% controlMode manual&amp;quot;,\&lt;br /&gt;
        &amp;quot;set %actor% on&amp;quot;\&lt;br /&gt;
      ]\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;Verlaufsdiagramm&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: &amp;quot;set %TelegramBot% cmdSend {plotAsPng(&#039;%plot%&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;message&amp;quot;: &amp;quot;TelegramBot_MTYPE=queryInline (%me%) $message&amp;quot;\&lt;br /&gt;
    }\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;auto&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
      &amp;quot;set %actor% on&amp;quot;,\&lt;br /&gt;
      &amp;quot;set %controlUnit% controlMode manual&amp;quot;\&lt;br /&gt;
    ],\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine wurde automatisch eingeschaltet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;manual&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine wurde manuell eingeschaltet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;done&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;set %actor% off&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine ist fertig.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
attr Waschmaschine_Dialog evalSpecials actor=HM_2C10D8_Sw\&lt;br /&gt;
controlUnit=Waschkeller_washer_controlUnit\&lt;br /&gt;
plot=Waschkeller_washer_SVG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TelegramBot ==&lt;br /&gt;
&lt;br /&gt;
In Telegram gibt es die Möglichkeit die Art des Keyboards zu ändern. Links das normale Keyboard, rechts das Inline Keyboard.&lt;br /&gt;
&lt;br /&gt;
[[Datei:76msgDialog menu.png|Normales Keyboard]]  [[Datei:76msgDialog menu inline.PNG|Inline Keyboard]]&lt;br /&gt;
&lt;br /&gt;
In diesem &#039;&#039;&#039;[https://youtu.be/oRDy2918mVI Video]&#039;&#039;&#039; wird Telegram mit einem Inline Keyboard verwendet.&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht bei Telegram zu verändern, gibt es den Befehl &amp;quot;queryEditInline&amp;quot;.&lt;br /&gt;
Dafür wird die MsgId von der Nachricht benötigt. Das erledigt ein notify, welches die msgId pro Peer abspeichert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod sentMsgIdByPeerId notify .+:sentMsgId.+ {\&lt;br /&gt;
  return unless($TYPE eq &amp;quot;TelegramBot&amp;quot;);;\&lt;br /&gt;
  \&lt;br /&gt;
  my $dev_hash = $defs{$NAME};;\&lt;br /&gt;
  my $sentMsgId = ReadingsVal($NAME, &amp;quot;sentMsgId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  my $sentMsgPeerId = ReadingsVal($NAME, &amp;quot;sentMsgPeerId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  my ($contact) = devspec2array(&amp;quot;TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*&amp;quot;);;\&lt;br /&gt;
  \&lt;br /&gt;
  readingsSingleUpdate($dev_hash, &amp;quot;$contact\_sentMsgId&amp;quot;, $sentMsgId, 1);;\&lt;br /&gt;
}&lt;br /&gt;
attr sentMsgIdByPeerId devStateIcon {ReadingsVal($name, &amp;quot;state&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;active&amp;quot; ? &amp;quot;.*:ios-on-blue:inactive&amp;quot; : &amp;quot;.*:ios-off:active&amp;quot;}&lt;br /&gt;
attr sentMsgIdByPeerId icon audio_mic&lt;br /&gt;
attr sentMsgIdByPeerId room msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach wird der Message-Befehl von  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;TelegramBot&amp;gt; message&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
auf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;TelegramBot&amp;gt; queryEditInline &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
geändert. Dafür wird ein [[cmdalias]] verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod message2queryEditInline cmdalias set .+ message (.|\n)+ AS {\&lt;br /&gt;
  my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);;\&lt;br /&gt;
  my $TYPE = InternalVal($NAME, &amp;quot;TYPE&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  (my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);;\&lt;br /&gt;
  \&lt;br /&gt;
  if($TYPE eq &amp;quot;TelegramBot&amp;quot; &amp;amp;&amp;amp; $recipient){\&lt;br /&gt;
    my ($contact) = devspec2array(&amp;quot;TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*&amp;quot;);;\&lt;br /&gt;
    my $sentMsgId = ReadingsVal($NAME, &amp;quot;$contact\_sentMsgId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
\&lt;br /&gt;
    if($sentMsgId ne &amp;quot;&amp;quot;){\&lt;br /&gt;
      fhem(&amp;quot;set $NAME queryEditInline $sentMsgId $recipient $message&amp;quot;);;\&lt;br /&gt;
    }\&lt;br /&gt;
    else{\&lt;br /&gt;
      fhem(&amp;quot;set $NAME queryInline $recipient $message&amp;quot;);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
  else{\&lt;br /&gt;
    fhem(&amp;quot;set $EVENT&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
attr message2queryEditInline room msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um wieder zurück zum normalen Keyboard zu gelangen genügt es, das notify und den cmdAlias zu deaktivieren.&lt;br /&gt;
Das kann komfortabel über ein notify und einen dummy erledigt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod inline_normal.NOT notify inline_normal.DUM:.* {\&lt;br /&gt;
if (&amp;quot;$EVENT&amp;quot; =~ &amp;quot;on&amp;quot;) {\&lt;br /&gt;
  fhem &amp;quot;set sentMsgIdByPeerId active;; attr message2queryEditInline disable 0&amp;quot;;;\&lt;br /&gt;
  } \&lt;br /&gt;
elsif (&amp;quot;$EVENT&amp;quot; =~ &amp;quot;off&amp;quot;) {\&lt;br /&gt;
  fhem &amp;quot;set sentMsgIdByPeerId inactive;; attr message2queryEditInline disable 1&amp;quot;;;\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zum Thema Inline Keyboard sind in der Antwort #10 im Forum zu finden (siehe Link unten).&lt;br /&gt;
&lt;br /&gt;
== JABBER ==&lt;br /&gt;
Hier wird die Verwendung mit Jabber beschrieben...&lt;br /&gt;
&lt;br /&gt;
== WhatsApp ==&lt;br /&gt;
Hier wird die Verwendung mit yowsup/WhatsApp beschrieben...&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Thread über das Modul im {{Link2Forum|Topic=77297|LinkText=FHEM Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=28231</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=28231"/>
		<updated>2018-11-04T17:44:54Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Kleinere Korrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der {{Link2CmdRef|Anker=TelegramBot}} und in diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#6-botfather BotFather] erzeugt. Dafür muss der BotFather mit einem Telegram-Client kontaktiert werden. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;attr teleBot pollingTimeout 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
Dafür muss man in seinem Telegram-Client den Kontakt @botName suchen und dann eine Nachricht daran versenden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um einen Chat an einen &amp;quot;Contact&amp;quot; versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge gespeichert - bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Die Gruppen-ID ist eine negative Zahl. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendImage /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
SVG-Plots können mit dem Befehl &lt;br /&gt;
&amp;lt;code&amp;gt;cmdSend [ @&amp;lt;peer1&amp;gt; ... @&amp;lt;peerN&amp;gt; ] &amp;lt;fhem command&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
verschickt werden.&lt;br /&gt;
&lt;br /&gt;
Das angegebene FHEM-Kommando wird ausgeführt und das Ergebnis an die angegebenen Peers bzw. den Standard-Peer verschickt.&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Befehl wird der SVG-Plot SVG_FileLog_Aussen an den Standard-Peer geschickt: &lt;br /&gt;
&amp;lt;code&amp;gt;set mein_telegramBot cmdSend { plotAsPng(&#039;SVG_FileLog_Aussen&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach &amp;lt;code&amp;gt;define cmd_sendTelegramSVG cmdalias TGSVG .* AS set mein_telegramBot cmdSend { plotAsPng(&amp;quot;$EVENT&amp;quot;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
kann man mit einem kurzen &lt;br /&gt;
&amp;lt;code&amp;gt;TGSVG SVG_Garten&amp;lt;/code&amp;gt;&lt;br /&gt;
ein beliebiges SVG über die Kommandozeile per Telegram versenden.&lt;br /&gt;
&lt;br /&gt;
Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message Bildbeschreibung;; set mein_telegramBot cmdSend { plotAsPng(&#039;mein_SVG&#039;) }&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; früher wurde zum Verschicken von Plots auch die interne Funktion TelegramBot_ExecuteCommand verwendet; mit dem Update Ende Februar 2017 hat diese Funktion einen zusätzlichen Parameter erhalten und lautet nun &lt;br /&gt;
&amp;lt;code&amp;gt;TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, undef, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Favoriten für Kommandos anlegen ====&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = set TYPE=ROLLADEN pos 100&lt;br /&gt;
&lt;br /&gt;
/short2 = set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.&lt;br /&gt;
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;/[Rollaeden auf]=set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = Rollaeden zu&lt;br /&gt;
&lt;br /&gt;
/short2 = Rollaeden auf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#6-botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=MsgDialog&amp;diff=28230</id>
		<title>MsgDialog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=MsgDialog&amp;diff=28230"/>
		<updated>2018-11-04T17:41:47Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Fehlersuche ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Dialoge für Sofortnachrichten über TelegramBot, Jabber und WhatsApp&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=76_msgDialog.pm&lt;br /&gt;
|ModOwner={{Link2FU|4106|igami}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Zielsetzung ==&lt;br /&gt;
Ein zentrale Anforderung an die Haus-Automation ist die Kommunikation mit den Anwendern. Fast jeder Anwender möchte über bestimmte Ereignisse informiert werden und Einstellungen vornehmen. FHEM bietet schon seit längerem die Unterstützung für verschiedene Messaging Dienste an.&lt;br /&gt;
Mit dem msgDialog Modul können vordefinierte Dialoge erstellt werden. Die Kommunikation erfolgt dabei über den [[msg]] Befehl welcher zurzeit die bidirektionale Kommunikation über [[TelegramBot]], [[Jabber]] und [[yowsup]] (WhatsApp) unterstützt. Eingehende Nachrichten werden einem ROMMATE oder GUEST zugeordnet. Darüber werden auch die Berechtigungen für die einzelnen Dialoge festgelegt.&lt;br /&gt;
Die grundlegende Bedienung wird in diesem &#039;&#039;&#039;[https://youtu.be/yiCOTeR1YVQ Video]&#039;&#039;&#039; am Beispiel von TelegramBot gezeigt.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen ===&lt;br /&gt;
Für dieses Modul wird das Perl JSON Modul benötigt. Auf einem Debian-basierten System (z.B RaspberryPI o.ä.) kann man das mit dem folgenden Befehl installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libjson-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hinweis zu den Code Beispielen ===&lt;br /&gt;
Es handelt sich bei den Beispielen um eine Raw definition, siehe auch [[Import_von_Code_Snippets]]&lt;br /&gt;
&lt;br /&gt;
=== msgConfig ===&lt;br /&gt;
&lt;br /&gt;
Als erstes benötigt man ein definiertes msgConfig device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod myMsgConfig msgConfig&lt;br /&gt;
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField&lt;br /&gt;
attr myMsgConfig msgContactPush &amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
attr myMsgConfig msgDialog_evalSpecials me=&amp;lt;Aktivierungswort bzw. -Nachricht&amp;gt;\&lt;br /&gt;
TelegramBot=&amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls bereits vorhanden, müssen natürlich nur die fehlenden Attribute gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
;msgDialog_evalSpecials&lt;br /&gt;
:key1=value1 key2=value2 ... Leerzeichen getrennte Liste von Name=Wert Paaren. Wert kann Leerzeichen enthalten, falls es in &amp;quot;&amp;quot; oder {} eingeschlossen :ist. Wert wird als perl-Ausdruck ausgewertet, falls es in {} eingeschlossen ist. In der DEF werden %Name% Zeichenketten durch den zugehörigen Wert :ersetzt. Wenn der selbe Name im msgConfig und msgDialog definiert wurde, wird der Wert aus msgDialog verwendet.&lt;br /&gt;
&lt;br /&gt;
;msgDialog_msgCommand &amp;lt;command&amp;gt;&lt;br /&gt;
:Befehl zum Versenden einer Nachricht. Die Vorgabe ist &amp;quot;msg push \@$recipients $message&amp;quot;. Wenn nicht gesetzt, wird die Vorgabe verwendet.&lt;br /&gt;
&lt;br /&gt;
=== ROOMMATE / GUEST ===&lt;br /&gt;
Für jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut &amp;quot;allowed&amp;quot; in msgDialog.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&lt;br /&gt;
Definition des metaDialogs:&lt;br /&gt;
Zur Auflistung aller berechtigten Dialoge dient - was sonst - ein Dialog!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod meta_Dialog msgDialog {\&lt;br /&gt;
  &amp;quot;%me%&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?(start|%me%)&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;{return(&#039;(&#039; . join(&#039;) (&#039;, sort{lc($a) cmp lc($b)} (split(&#039;\n&#039;, fhem(&#039;get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger&#039;, 1)))) . &#039;) (abbrechen) &#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;Ich kann folgendes für dich tun:&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;zurück&amp;quot;: {\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, &#039;$recipient_history&#039;, &#039;&#039;) =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}&amp;quot;\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;abbrechen&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?abbrechen&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Dialog abgebrochen.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;beenden&amp;quot;: {\&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;\/?beenden&amp;quot;,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;deletereading TYPE=msgDialog $recipient_history&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Dialog beendet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attr meta_Dialog allowed everyone&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufgrund der Komplexität eines Dialogs mit JSON ist es am praktikabelsten, zunächst einen leeren Dialog zu definieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; msgDialog {} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann die &#039;&#039;&#039;DEF&#039;&#039;&#039; in der Detail-Ansicht des Dialog-Device bearbeitet werden. Jeder Dialog basiert auf der folgenden Struktur von einfach bis komplex.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;&amp;lt;TRIGGER&amp;gt;&amp;quot;: {&lt;br /&gt;
    &amp;quot;match&amp;quot;: &amp;quot;&amp;lt;regex&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: (true|false),&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;(fhem command|{perl code})&amp;quot;,&lt;br /&gt;
    &amp;quot;message&amp;quot;: [&lt;br /&gt;
      &amp;quot;{perl code}&amp;quot;,&lt;br /&gt;
      &amp;quot;text&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;&amp;lt;NEXT TRIGGER 1&amp;gt;&amp;quot;: {&lt;br /&gt;
      ...&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;&amp;lt;NEXT TRIGGER 2&amp;gt;&amp;quot;: {&lt;br /&gt;
      ...&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den JSON-Teil der Dialoge zu testen, empfiehlt sich ein Besuch auf https://jsonlint.com/&lt;br /&gt;
Hier kann der selbst geschriebene JSON-Code validiert werden.&lt;br /&gt;
&lt;br /&gt;
;TRIGGER &lt;br /&gt;
:Kann ein beliebiger Text sein. Es wird geprüft ob die eingehende Nachricht damit übereinstimmt. Falls ja, wird der Dialog an dieser Stelle fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
;match&lt;br /&gt;
:Wenn nicht nur genau eine Nachricht zugelassen werden soll, kann noch eine regex angegeben werden. Die regex muss auf die gesamte eingehnde Nachricht :zutreffen. &lt;br /&gt;
&lt;br /&gt;
;setOnly &lt;br /&gt;
:Kann optional auf true oder false gestellt werden. In beiden fällen wird der TRIGGER dann nicht bei &amp;quot;get &amp;lt;name&amp;gt; trigger&amp;quot; zurück gegeben.&lt;br /&gt;
:Wenn setOnly auf &amp;quot;true&amp;quot; gestellt wird, kann der Dialog an dieser Stelle nicht durch eingehende Nachrichten ausgelöst werden, sondern nur über &amp;quot;get &amp;lt;name&amp;gt; say TRIGGER&amp;quot;. Dies kann dazu genutzt werden um einen Dialog aus :FHEM heraus zu initiieren.&lt;br /&gt;
&lt;br /&gt;
;commands&lt;br /&gt;
:Kann einen einzelnen oder mehrere Befehle enthalten: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;commands&amp;quot;: &amp;quot;single command&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;commands&amp;quot;: [&lt;br /&gt;
&amp;quot;command 1&amp;quot;,&lt;br /&gt;
&amp;quot;command 2&amp;quot;,&lt;br /&gt;
&amp;quot;{perl command}&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;message &lt;br /&gt;
:Kann einen einzelnen oder mehrere Textte enthalten die mit einen Zeilenumbruch verbunden werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
  &amp;quot;text 1&amp;quot;,&lt;br /&gt;
  &amp;quot;text 2&amp;quot;,&lt;br /&gt;
  &amp;quot;{return from perl command}&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei mehrstufigen Dialogen wird diese Struktur ineinander verschachtelt angegeben.&lt;br /&gt;
Es werden Variablen und Platzhalter, welche unter dem Attribut evalSpecials definiert werden, ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
*$SELF: Eigenname des msgDialog&lt;br /&gt;
*$message: eingegangene Nachricht&lt;br /&gt;
*$recipient: Name des Dialogpartners&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
*allowed: Liste mit allen RESIDENTS und ROOMMATE die für diesen Dialog berechtigt sind.&lt;br /&gt;
*disable: [0|1] Dialog ist aktiviert|deaktiviert.&lt;br /&gt;
*disabledForIntervals: HH:MM-HH:MM HH:MM-HH-MM ...&lt;br /&gt;
*evalSpecials: key1=value1 key2=value2 ...Leerzeichen getrennte Liste von Name=Wert Paaren. Wert kann Leerzeichen enthalten, falls es in &amp;quot;&amp;quot; oder {} eingeschlossen ist. Wert wird als perl-Ausdruck ausgewertet, falls es in {} eingeschlossen ist. In der DEF werden %Name% Zeichenketten durch den zugehörigen Wert ersetzt. Dieses Attribut ist als &amp;quot;msgDialog_evalSpecials&amp;quot; im msgConfig Gerät vorhanden. Wenn der selbe Name im msgConfig und msgDialog definiert wurde, wird der Wert aus msgDialog verwendet.&lt;br /&gt;
*msgCommand &amp;lt;command&amp;gt;: Befehl der zum Versenden einer Nachricht verwendet wird. Die Vorgabe ist &amp;quot;msg push \@$recipients $message&amp;quot; Dieses Attribut ist als &amp;quot;msgDialog_msgCommand&amp;quot; im msgConfig Gerät vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
*reset: Setzt den Dialog für alle Benutzer zurück.&lt;br /&gt;
*say [@&amp;lt;recipient1&amp;gt;[,&amp;lt;recipient2&amp;gt;,...]] &amp;lt;TRIGGER&amp;gt;[|&amp;lt;NEXT TRIGGER&amp;gt;|...]: Der Dialog wird für alle angegeben Empänger an der angegeben Stelle fortgeführt. Sind keine Empfänger angegeben wird der Dialog für alle unter dem Attribut allowed angegebenen Empfänger fortgeführt.&lt;br /&gt;
*updateAllowed: Aktualisiert die Auswahl für das Attribut allowed.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
*trigger: Listet alle TRIGGER der ersten Ebene auf bei denen nicht setOnly angegeben ist.&lt;br /&gt;
&lt;br /&gt;
=== READINGS ===&lt;br /&gt;
*$recipient_history: Durch | getrennte Liste von TRIGGER um den aktuellen Zustand des Dialogs zu sichern. Für jeden Dialogpartner wird ein Reading angelegt. Wenn der Dialog beendet ist wird das Reading zurückgesetzt.&lt;br /&gt;
&lt;br /&gt;
== Hilfe bei der Fehlersuche ==&lt;br /&gt;
Hier entsteht eine Sammlung von Tipps bei der Fehlersuche. Die meisten dieser &amp;quot;Stolpersteine&amp;quot;&lt;br /&gt;
entstehen häufig bei der Erstellung eines ersten eigenen Dialoges.&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut allowed fehlt oder ist nicht korrekt gesetzt ===&lt;br /&gt;
Das allowed-Attribut dient dazu, einzelne Dialoge für alle  oder nur bestimmte Benutzer zu berechtigen.&lt;br /&gt;
Fehlt es, wird der Dialog dem aufrufenden Benutzer nicht angezeigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Testdialog allowed everyone&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut msgDialog_evalSpecials fehlt oder ist nicht korrekt gesetzt ===&lt;br /&gt;
Dieses Attribut gehört dem msgConfig device und muss wie in 2.3 zu lesen&lt;br /&gt;
korrekt befüllt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr myMsgConfig msgDialog_evalSpecials me=&amp;lt;Aktivierungswort bzw. -Nachricht&amp;gt;&lt;br /&gt;
TelegramBot=&amp;lt;Name des TelegramBot-device&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Attribut utf8Special fehlt beim TelegramBot device ===&lt;br /&gt;
Dieses Attribut ist für die korrekte UTF-8 Kodierung zuständig und im Standard deaktiviert.&lt;br /&gt;
Der Satz &amp;quot;Was kann ich für dich tun?&amp;quot; aus dem Meta-Dialog enthält bereits einen Umlaut!&lt;br /&gt;
&lt;br /&gt;
Folgende FHEM-Log-Fehlermeldung kann auf das fehlende Attribut hindeuten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Datum&amp;gt; &amp;lt;Zeit&amp;gt; 3: TelegramBot_Callback &amp;lt;TelegramBot-Device&amp;gt;: resulted in NonBlockingGet timed out on read from &amp;lt;hidden&amp;gt; after 30s from SendIt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JSON-Syntax Fehler ===&lt;br /&gt;
Das Modul prüft vor dem Abspeichern auf eine korrekte JSON-Syntax.&lt;br /&gt;
Meistens wird auch eine sprechende Meldung angezeigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: define &amp;lt;name&amp;gt; msgDialog {JSON}&lt;br /&gt;
&lt;br /&gt;
, or ] expected while parsing array, at character offset 73 (before &amp;quot;}\n}&amp;quot;) at ./FHEM/76_msgDialog.pm line 93.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eine gute Anlaufstelle zur Überprüfung von JSON-Code ist hier: https://jsonlint.com/&lt;br /&gt;
 &lt;br /&gt;
=== Es werden keine Dialoge angezeigt ===&lt;br /&gt;
Ohne die Angabe einer normalen Nachricht wird bei Keyboards kein Dialog angezeigt: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Erst mit der Nachricht &amp;quot;Möchtest Du Lampen ein oder ausschalten?&amp;quot; erscheint der Dialog:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
&amp;quot;Möchtest Du Lampen ein oder ausschalten?&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Innerhalb eines Dialogs fehlen einzelne Menüeinträge ===&lt;br /&gt;
Das liegt das meistens an einem fehlenden Leerzeichen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;message&amp;quot;: [&lt;br /&gt;
&amp;quot;(Lampen einschalten)&amp;quot;,&lt;br /&gt;
&amp;quot;(Lampen ausschalten) &amp;quot;,&lt;br /&gt;
&amp;quot;(zurück:%me%) &amp;quot;, &lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei &amp;quot;Lampen ausschalten&amp;quot; ist dagegen korrekt ein Leerzeichen zu sehen und somit auch der Menüeintrag im Dialog.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;:&amp;quot; bei Inline Keyboards ===&lt;br /&gt;
Bei Inline Keyboards wird der letzte : als Trennzeichen zwischen Nachricht und Befehl ausgewertet.&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;(Temperatur: [heizung:desiredTemperature]°C:setheiz) &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;([test:state]:weiter) &amp;quot; wenn [test:state] = &amp;quot;Status: ok&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
==== Programmierung der Waschmaschine ====&lt;br /&gt;
Das ist ein Beispiel zur Programmierung einer Waschmaschine wie auch oben im Video zu sehen: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod Waschmaschine_Dialog msgDialog { &amp;quot;Waschmaschine&amp;quot;: {\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;{return(&#039;(Zeitprogramm stoppen) &#039;) if(ReadingsVal(&#039;%controlUnit%&#039;, &#039;controlMode&#039;, &#039;&#039;) eq &#039;auto&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;(programmieren) &#039;) if(ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) ne &#039;on&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;(einschalten) &#039;) if(ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) ne &#039;on&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;(Verlaufsdiagramm) &amp;quot;,\&lt;br /&gt;
      &amp;quot;(abbrechen) &amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;Waschmaschine: &#039; . (ReadingsVal(&#039;%actor%&#039;, &#039;state&#039;, &#039;&#039;) eq &#039;on&#039; ? &#039;eingeschaltet&#039; : &#039;ausgeschaltet&#039;))}&amp;quot;,\&lt;br /&gt;
      &amp;quot;{return(&#039;Modus: &#039; . (ReadingsVal(&#039;%controlUnit%&#039;, &#039;controlMode&#039;, &#039;&#039;) eq &#039;auto&#039; ? &#039;Automatik&#039; : &#039;Manuell (&#039; . ReadingsVal(&#039;%controlUnit%&#039;, &#039;time&#039;, &#039;&#039;) . &#039;)&#039;))}&amp;quot;\&lt;br /&gt;
    ],\&lt;br /&gt;
    &amp;quot;Zeitprogramm stoppen&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: &amp;quot;set %controlUnit% controlMode manual&amp;quot;,\&lt;br /&gt;
      &amp;quot;message&amp;quot;: [\&lt;br /&gt;
        &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
        &amp;quot;Das Zeitprogramm wurde gestoppt.&amp;quot;\&lt;br /&gt;
      ]\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;programmieren&amp;quot;: {\&lt;br /&gt;
      &amp;quot;message&amp;quot;: [\&lt;br /&gt;
        &amp;quot;(bestätigen|zurück|abbrechen) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 00:00 | 00:15 | 00:30 | 00:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 01:00 | 01:15 | 01:30 | 01:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 02:00 | 02:15 | 02:30 | 02:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 03:00 | 03:15 | 03:30 | 03:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 04:00 | 04:15 | 04:30 | 04:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 05:00 | 05:15 | 05:30 | 05:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 06:00 | 06:15 | 06:30 | 06:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 07:00 | 07:15 | 07:30 | 07:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 08:00 | 08:15 | 08:30 | 08:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 09:00 | 09:15 | 09:30 | 09:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 10:00 | 10:15 | 10:30 | 10:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 11:00 | 11:15 | 11:30 | 11:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 12:00 | 12:15 | 12:30 | 12:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 13:00 | 13:15 | 13:30 | 13:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 14:00 | 14:15 | 14:30 | 14:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 15:00 | 15:15 | 15:30 | 15:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 16:00 | 16:15 | 16:30 | 16:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 17:00 | 17:15 | 17:30 | 17:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 18:00 | 18:15 | 18:30 | 18:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 19:00 | 19:15 | 19:30 | 19:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 20:00 | 20:15 | 20:30 | 20:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 21:00 | 21:15 | 21:30 | 21:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 22:00 | 22:15 | 22:30 | 22:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;( 23:00 | 23:15 | 23:30 | 23:45 ) &amp;quot;,\&lt;br /&gt;
        &amp;quot;Wann soll die Wäsche fertig sein?&amp;quot;,\&lt;br /&gt;
        &amp;quot;Bitte Uhrzeit in HH:MM angeben.&amp;quot;,\&lt;br /&gt;
        &amp;quot;Aktuell ist [%controlUnit%:time] Uhr eingestellt.&amp;quot;\&lt;br /&gt;
      ],\&lt;br /&gt;
      &amp;quot;Uhrzeit&amp;quot;: {\&lt;br /&gt;
        &amp;quot;match&amp;quot;: &amp;quot; ?([0-1][0-9]|2[0-3]):[0-5][0-9] ?&amp;quot;,\&lt;br /&gt;
        &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
          &amp;quot;set %controlUnit% time $message&amp;quot;,\&lt;br /&gt;
          &amp;quot;set $SELF say @$recipient Waschmaschine|programmieren|bestätigen&amp;quot;\&lt;br /&gt;
        ]\&lt;br /&gt;
      },\&lt;br /&gt;
      &amp;quot;bestätigen&amp;quot;: {\&lt;br /&gt;
        &amp;quot;commands&amp;quot;: &amp;quot;set %controlUnit% controlMode auto&amp;quot;,\&lt;br /&gt;
        &amp;quot;message&amp;quot;: [\&lt;br /&gt;
          &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
          &amp;quot;Das Zeitprogramm wurde eingestellt.&amp;quot;,\&lt;br /&gt;
          &amp;quot;Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.&amp;quot;,\&lt;br /&gt;
          &amp;quot;Bitte die Waschmaschine vorbereiten.&amp;quot;\&lt;br /&gt;
        ]\&lt;br /&gt;
      }\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;einschalten&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
        &amp;quot;set %controlUnit% controlMode manual&amp;quot;,\&lt;br /&gt;
        &amp;quot;set %actor% on&amp;quot;\&lt;br /&gt;
      ]\&lt;br /&gt;
    },\&lt;br /&gt;
    &amp;quot;Verlaufsdiagramm&amp;quot;: {\&lt;br /&gt;
      &amp;quot;commands&amp;quot;: &amp;quot;set %TelegramBot% cmdSend {plotAsPng(&#039;%plot%&#039;)}&amp;quot;,\&lt;br /&gt;
      &amp;quot;message&amp;quot;: &amp;quot;TelegramBot_MTYPE=queryInline (%me%) $message&amp;quot;\&lt;br /&gt;
    }\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;auto&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: [\&lt;br /&gt;
      &amp;quot;set %actor% on&amp;quot;,\&lt;br /&gt;
      &amp;quot;set %controlUnit% controlMode manual&amp;quot;\&lt;br /&gt;
    ],\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine wurde automatisch eingeschaltet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;manual&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine wurde manuell eingeschaltet.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  },\&lt;br /&gt;
  &amp;quot;done&amp;quot;: {\&lt;br /&gt;
    &amp;quot;setOnly&amp;quot;: true,\&lt;br /&gt;
    &amp;quot;commands&amp;quot;: &amp;quot;set %actor% off&amp;quot;,\&lt;br /&gt;
    &amp;quot;message&amp;quot;: [\&lt;br /&gt;
      &amp;quot;TelegramBot_MTYPE=queryInline (%me%) &amp;quot;,\&lt;br /&gt;
      &amp;quot;Die Wachmaschine ist fertig.&amp;quot;\&lt;br /&gt;
    ]\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
attr Waschmaschine_Dialog evalSpecials actor=HM_2C10D8_Sw\&lt;br /&gt;
controlUnit=Waschkeller_washer_controlUnit\&lt;br /&gt;
plot=Waschkeller_washer_SVG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TelegramBot ==&lt;br /&gt;
&lt;br /&gt;
In Telegram gibt es die Möglichkeit die Art des Keyboards zu ändern. Links das normale Keyboard, rechts das Inline Keyboard.&lt;br /&gt;
&lt;br /&gt;
[[Datei:76msgDialog menu.png|Normales Keyboard]]  [[Datei:76msgDialog menu inline.PNG|Inline Keyboard]]&lt;br /&gt;
&lt;br /&gt;
In diesem &#039;&#039;&#039;[https://youtu.be/oRDy2918mVI Video]&#039;&#039;&#039; wird Telegram mit einem Inline Keyboard verwendet.&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht bei Telegram zu verändern, gibt es den Befehl &amp;quot;queryEditInline&amp;quot;.&lt;br /&gt;
Dafür wird die MsgId von der Nachricht benötigt. Das erledigt ein notify, welches die msgId pro Peer abspeichert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod sentMsgIdByPeerId notify .+:sentMsgId.+ {\&lt;br /&gt;
  return unless($TYPE eq &amp;quot;TelegramBot&amp;quot;);;\&lt;br /&gt;
  \&lt;br /&gt;
  my $dev_hash = $defs{$NAME};;\&lt;br /&gt;
  my $sentMsgId = ReadingsVal($NAME, &amp;quot;sentMsgId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  my $sentMsgPeerId = ReadingsVal($NAME, &amp;quot;sentMsgPeerId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  my ($contact) = devspec2array(&amp;quot;TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*&amp;quot;);;\&lt;br /&gt;
  \&lt;br /&gt;
  readingsSingleUpdate($dev_hash, &amp;quot;$contact\_sentMsgId&amp;quot;, $sentMsgId, 1);;\&lt;br /&gt;
}&lt;br /&gt;
attr sentMsgIdByPeerId devStateIcon {ReadingsVal($name, &amp;quot;state&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;active&amp;quot; ? &amp;quot;.*:ios-on-blue:inactive&amp;quot; : &amp;quot;.*:ios-off:active&amp;quot;}&lt;br /&gt;
attr sentMsgIdByPeerId icon audio_mic&lt;br /&gt;
attr sentMsgIdByPeerId room msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach wird der Message-Befehl von  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;TelegramBot&amp;gt; message&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
auf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;TelegramBot&amp;gt; queryEditInline &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
geändert. Dafür wird ein [[cmdalias]] verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod message2queryEditInline cmdalias set .+ message (.|\n)+ AS {\&lt;br /&gt;
  my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);;\&lt;br /&gt;
  my $TYPE = InternalVal($NAME, &amp;quot;TYPE&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
  (my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);;\&lt;br /&gt;
  \&lt;br /&gt;
  if($TYPE eq &amp;quot;TelegramBot&amp;quot; &amp;amp;&amp;amp; $recipient){\&lt;br /&gt;
    my ($contact) = devspec2array(&amp;quot;TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*&amp;quot;);;\&lt;br /&gt;
    my $sentMsgId = ReadingsVal($NAME, &amp;quot;$contact\_sentMsgId&amp;quot;, &amp;quot;&amp;quot;);;\&lt;br /&gt;
\&lt;br /&gt;
    if($sentMsgId ne &amp;quot;&amp;quot;){\&lt;br /&gt;
      fhem(&amp;quot;set $NAME queryEditInline $sentMsgId $recipient $message&amp;quot;);;\&lt;br /&gt;
    }\&lt;br /&gt;
    else{\&lt;br /&gt;
      fhem(&amp;quot;set $NAME queryInline $recipient $message&amp;quot;);;\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
  else{\&lt;br /&gt;
    fhem(&amp;quot;set $EVENT&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
attr message2queryEditInline room msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um wieder zurück zum normalen Keyboard zu gelangen genügt es, das notify und den cmdAlias zu deaktivieren.&lt;br /&gt;
Das kann komfortabel über ein notify und einen dummy erledigt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod inline_normal.NOT notify inline_normal.DUM:.* {\&lt;br /&gt;
if (&amp;quot;$EVENT&amp;quot; =~ &amp;quot;on&amp;quot;) {\&lt;br /&gt;
  fhem &amp;quot;set sentMsgIdByPeerId active;; attr message2queryEditInline disable 0&amp;quot;;;\&lt;br /&gt;
  } \&lt;br /&gt;
elsif (&amp;quot;$EVENT&amp;quot; =~ &amp;quot;off&amp;quot;) {\&lt;br /&gt;
  fhem &amp;quot;set sentMsgIdByPeerId inactive;; attr message2queryEditInline disable 1&amp;quot;;;\&lt;br /&gt;
  }\&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zum Thema Inline Keyboard sind in der Antwort #10 im Forum zu finden (siehe Link unten).&lt;br /&gt;
&lt;br /&gt;
== JABBER ==&lt;br /&gt;
Hier wird die Verwendung mit Jabber beschrieben...&lt;br /&gt;
&lt;br /&gt;
== WhatsApp ==&lt;br /&gt;
Hier wird die Verwendung mit yowsup/WhatsApp beschrieben...&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Thread über das Modul im {{Link2Forum|Topic=77297|LinkText=FHEM Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=28225</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=28225"/>
		<updated>2018-11-04T07:27:14Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: botfather-Links aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der {{Link2CmdRef|Anker=TelegramBot}} und in diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#6-botfather BotFather] erzeugt. Dafür muss der BotFather mit einem Telegram-Client kontaktiert werden. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;attr teleBot pollingTimeout 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
Dafür muss man in seinem Telegram-Client den Kontakt @botName suchen und dann eine Nachricht darn versenden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um einen Chat an einen &amp;quot;Contact&amp;quot; versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Die Gruppen-ID ist eine negative Zahl. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendImage /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
SVG-Plots können mit dem Befehl &lt;br /&gt;
&amp;lt;code&amp;gt;cmdSend [ @&amp;lt;peer1&amp;gt; ... @&amp;lt;peerN&amp;gt; ] &amp;lt;fhem command&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
verschickt werden.&lt;br /&gt;
&lt;br /&gt;
Das angegebene FHEM-Kommando wird ausgeführt und das Ergebnis an die angegebenen Peers bzw. den Standard-Peer verschickt.&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Befehl wird der SVG-Plot SVG_FileLog_Aussen an den Standard-Peer geschickt: &lt;br /&gt;
&amp;lt;code&amp;gt;set mein_telegramBot cmdSend { plotAsPng(&#039;SVG_FileLog_Aussen&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach &amp;lt;code&amp;gt;define cmd_sendTelegramSVG cmdalias TGSVG .* AS set mein_telegramBot cmdSend { plotAsPng(&amp;quot;$EVENT&amp;quot;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
kann man mit einem kurzen &lt;br /&gt;
&amp;lt;code&amp;gt;TGSVG SVG_Garten&amp;lt;/code&amp;gt;&lt;br /&gt;
ein beliebiges SVG über die Kommandozeile per Telegram versenden.&lt;br /&gt;
&lt;br /&gt;
Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message Bildbeschreibung;; set mein_telegramBot cmdSend { plotAsPng(&#039;mein_SVG&#039;) }&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; früher wurde zum Verschicken von Plots auch die interne Funktion TelegramBot_ExecuteCommand verwendet; mit dem Update Ende Februar 2017 hat diese Funktion einen zusätzlichen Parameter erhalten und lautet nun &lt;br /&gt;
&amp;lt;code&amp;gt;TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, undef, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Favoriten für Kommandos anlegen ====&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = set TYPE=ROLLADEN pos 100&lt;br /&gt;
&lt;br /&gt;
/short2 = set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.&lt;br /&gt;
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;/[Rollaeden auf]=set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = Rollaeden zu&lt;br /&gt;
&lt;br /&gt;
/short2 = Rollaeden auf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#6-botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28124</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28124"/>
		<updated>2018-10-18T16:10:18Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbnamen||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||Formatierung der Anzeige, es lassen sich alle im FTUI verfügbaren class-Werte einfügen.||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;[&amp;quot;bdate&amp;quot;, &amp;quot;btime&amp;quot;, &amp;quot;summary&amp;quot;, &amp;quot;location&amp;quot;, &amp;quot;edate&amp;quot;, &amp;quot;etime&amp;quot;, &amp;quot;source&amp;quot;, &amp;quot;age&amp;quot;, &amp;quot;description&amp;quot;]&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;15&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige ohne Jahreszahl||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige ohne Sekunden||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Zeigt einen Text an, wenn keine Termine im angegebenen Zeitraum vorhanden sind||true||data-showempty=&amp;quot;false&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-onelinesum=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-dayname=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28123</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28123"/>
		<updated>2018-10-18T16:08:34Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: Attribute angepasst ; Beispiel hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine sollen angezeigt werden?&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;.&amp;lt;br&amp;gt;Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbnamen||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||Formatierung der Anzeige, es lassen sich alle im FTUI verfügbaren class-Werte einfügen.||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;[&amp;quot;bdate&amp;quot;, &amp;quot;btime&amp;quot;, &amp;quot;summary&amp;quot;, &amp;quot;location&amp;quot;, &amp;quot;edate&amp;quot;, &amp;quot;etime&amp;quot;, &amp;quot;source&amp;quot;, &amp;quot;age&amp;quot;, &amp;quot;description&amp;quot;]&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;15&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige ohne Jahreszahl||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige ohne Sekunden||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Zeigt einen Text an, wenn keine Termine im angegebenen Zeitraum vorhanden sind||true||data-showempty=&amp;quot;false&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039;||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-onelinesum=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-dayname=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Beispiel zur Einfärbung von Kalendereinträgen (sourcecolor)===&lt;br /&gt;
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden:&lt;br /&gt;
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel &#039;&#039;&#039;test1.ics&#039;&#039;&#039; und &#039;&#039;&#039;test2.ics&#039;&#039;&#039;.&lt;br /&gt;
* ein Calendar-Device pro ics-Datei; in unserem Beispiel &#039;&#039;&#039;Testkalender1&#039;&#039;&#039; und &#039;&#039;&#039;Testkalender2&#039;&#039;&#039;&lt;br /&gt;
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel &#039;&#039;&#039;TestkalenderView&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender1 Calendar ical file test1.ics 86400&lt;br /&gt;
attr Testkalender1 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender2 Calendar ical file test2.ics 86400&lt;br /&gt;
attr Testkalender2 hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das &#039;&#039;&#039;sourcecolor&#039;&#039;&#039;-Attribut beim CALVIEW-Device gesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nach dem Setzen vom sourcecolor-Attribut sollte man das CALVIEW-Device aktualisieren, ansonsten wird die eingestellte sourcecolor erst mit der jeweils nächsten Kalenderaktualisierung aktiv.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
set TestkalenderView update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das aktualisierte CALVIEW-Device sollte nun in den &#039;&#039;&#039;t_&amp;lt;nnn&amp;gt;_sourcecolor&#039;&#039;&#039;-Readings den gewünschten Farbwert enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Darstellung im FTUI erreicht man, indem man die folgenden Bedingungen erfüllt&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-detail&#039;&#039;&#039; muss die (nicht darstellbare) Spalte &#039;&#039;sourcecolor&#039;&#039; enthalten&lt;br /&gt;
# das Widget-Attribut &#039;&#039;&#039;data-sourcecolor&#039;&#039;&#039; muss den Wert &#039;&#039;yes&#039;&#039; haben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot; data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
                         data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
                         data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;sourcecolor&amp;quot;]&#039;&lt;br /&gt;
                         data-detailwidth=&#039;[&amp;quot;20&amp;quot;,&amp;quot;80&amp;quot;,&amp;quot;00&amp;quot;]&#039;&lt;br /&gt;
                         data-sourcecolor=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt noch, dass das Widget-Attribut &#039;&#039;&#039;data-color&#039;&#039;&#039; bei Verwendung von sourcecolor ignoriert wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28104</id>
		<title>FTUI Widget Calview</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Calview&amp;diff=28104"/>
		<updated>2018-10-15T17:45:35Z</updated>

		<summary type="html">&lt;p&gt;OdfFhem: /* Attribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Welche Termine angezeigt werden sollen (&#039;&#039;all&#039;&#039;, &#039;&#039;today&#039;&#039;, &#039;&#039;tomorrow&#039;&#039;)||STATE||data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-start&#039;&#039;&#039;||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für &#039;&#039;data-get=&amp;quot;all&amp;quot;&#039;&#039;. Mögliche Werte: &#039;&#039;none&#039;&#039;, &#039;&#039;all&#039;&#039;, &#039;&#039;notoday&#039;&#039; und &#039;&#039;notomorrow&#039;&#039;||all||data-start=&amp;quot;notoday&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Bestimmt, wie viele Termine angezeigt werden||10||data-max=&amp;quot;20&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Textfarbe als HEX-Angabe oder Farbnamen||||data-color=&amp;quot;#ff0000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-class&#039;&#039;&#039;||Formatierung der Anzeige, es lassen sich alle im FTUI verfügbaren class-Werte einfügen.||||data-class=&amp;quot;left-align small&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detail&#039;&#039;&#039;||Array von CALVIEW-Details, die angezeigt werden sollen||&amp;lt;nowiki&amp;gt;[&amp;quot;bdate&amp;quot;, &amp;quot;btime&amp;quot;, &amp;quot;summary&amp;quot;, &amp;quot;location&amp;quot;, &amp;quot;edate&amp;quot;, &amp;quot;etime&amp;quot;, &amp;quot;source&amp;quot;, &amp;quot;age&amp;quot;, &amp;quot;description&amp;quot;]&amp;lt;/nowiki&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-detailwidth&#039;&#039;&#039;||Breite der einzelnen Spalten in %||||data-detailwidth=&#039;[&amp;quot;15&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dateformat&#039;&#039;&#039;||Formatierung der Datumsanzeige ohne Jahreszahl||long||data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Formatierung der Uhrzeitanzeige ohne Sekunden||long||data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showempty&#039;&#039;&#039;||Zeigt einen Text an, wenn keine Termine im angegebenen Zeitraum vorhanden sind||true||data-showempty=&amp;quot;false&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-oneline&#039;&#039;&#039;||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Beispiel===&lt;br /&gt;
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;myCalView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;btime&amp;quot;,&amp;quot;summary&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;30&amp;quot;,&amp;quot;30&amp;quot;,&amp;quot;40&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geburtstagskalender mit Berechnung des Alters===&lt;br /&gt;
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.&lt;br /&gt;
&lt;br /&gt;
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.&lt;br /&gt;
&lt;br /&gt;
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
BEGIN:VCALENDAR&lt;br /&gt;
PRODID:-//calcurse//NONSGML v4.0.0//EN&lt;br /&gt;
VERSION:2.0&lt;br /&gt;
BEGIN:VEVENT&lt;br /&gt;
DTSTART:19310524&lt;br /&gt;
DTEND:19310524&lt;br /&gt;
RRULE:FREQ=YEARLY&lt;br /&gt;
SUMMARY: Geburtstag meiner Mutter&lt;br /&gt;
DESCRIPTION: 1931&lt;br /&gt;
END:VEVENT&lt;br /&gt;
END:VCALENDAR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier insbesondere &amp;quot;DESCRIPTION&amp;quot;, hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.&lt;br /&gt;
&lt;br /&gt;
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod Testkalender Calendar ical file FHEM/test.ics 86400&lt;br /&gt;
attr Testkalender hideOlderThan 3600s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
defmod TestkalenderView CALVIEW Testkalender 1&lt;br /&gt;
attr TestkalenderView isbirthday 1&lt;br /&gt;
attr TestkalenderView modes next&lt;br /&gt;
attr TestkalenderView yobfield _description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 --&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;calview&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;TestkalenderView&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;all&amp;quot;&lt;br /&gt;
     data-max=&amp;quot;5&amp;quot;&lt;br /&gt;
     data-detail=&#039;[&amp;quot;bdate&amp;quot;,&amp;quot;summary&amp;quot;,&amp;quot;age&amp;quot;]&#039;&lt;br /&gt;
     data-detailwidth=&#039;[&amp;quot;25&amp;quot;,&amp;quot;70&amp;quot;,&amp;quot;5&amp;quot;]&#039;&lt;br /&gt;
     data-showempty=&amp;quot;true&amp;quot;&lt;br /&gt;
     data-onelinesum=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-sourcecolor=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-dateformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-timeformat=&amp;quot;short&amp;quot;&lt;br /&gt;
     data-dayname=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-oneline=&amp;quot;yes&amp;quot;&lt;br /&gt;
     data-class=&#039;left-align&#039;&lt;br /&gt;
     &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Calview]]&lt;/div&gt;</summary>
		<author><name>OdfFhem</name></author>
	</entry>
</feed>