FTUI Widget Calview: Unterschied zwischen den Versionen
Curt (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(15 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann. | Das [[{{PAGENAME}}|Calview Widget]] ist ein Widget für [[FHEM Tablet UI V2]], welches Einträge aus einem [[CALVIEW]]-Device anzeigen kann. | ||
==Attribute== | ==Attribute== | ||
===Allgemeine Attribute=== | |||
{|class="wikitable" | {|class="wikitable" | ||
!Attribut | !Attribut | ||
Zeile 10: | Zeile 14: | ||
|'''data-device'''||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen|||| | |'''data-device'''||Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen|||| | ||
|- | |- | ||
|'''data-get'''||Welche Termine angezeigt werden | |'''data-get'''||Welche Termine sollen angezeigt werden?<br>Mögliche Werte: ''all'', ''today'', ''tomorrow''||STATE||data-get="all" | ||
|- | |- | ||
|'''data-start'''||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für ''data-get="all"''. Mögliche Werte: ''none'', ''all'', ''notoday'' und ''notomorrow''||all||data-start="notoday" | |'''data-start'''||Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für ''data-get="all"''.<br>Mögliche Werte: ''none'', ''all'', ''notoday'' und ''notomorrow''||all||data-start="notoday" | ||
|- | |- | ||
|'''data-max'''||Bestimmt, wie viele Termine angezeigt werden||10||data-max="20" | |'''data-max'''||Bestimmt, wie viele Termine angezeigt werden||10||data-max="20" | ||
|- | |- | ||
|'''data-color'''||Textfarbe als HEX-Angabe oder | |'''data-class'''||CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar||||data-class="left-align small" | ||
|- | |||
|'''data-color'''||Textfarbe als HEX-Angabe oder Farbname||||data-color="#ff0000" | |||
|- | |||
|'''data-background-color'''||Hintergrundfarbe als HEX-Angabe oder Farbname||||data-background-color="#0000ff" | |||
|- | |||
|'''data-detail'''||Array von CALVIEW-Details, die angezeigt werden sollen||<nowiki></nowiki>||data-detail='["bdate","btime","summary"]' | |||
|- | |||
|'''data-detailwidth'''||Breite der einzelnen Spalten in %||||data-detailwidth='["20","20","60"]' | |||
|- | |||
|'''data-dateformat'''||Formatierung der Datumsanzeige (mit/ohne Jahreszahl)||long||data-dateformat="short" | |||
|- | |||
|'''data-timeformat'''||Formatierung der Uhrzeitanzeige (mit/ohne Sekunden)||long||data-timeformat="short" | |||
|- | |||
|'''data-showempty'''||Infotext anzeigen, wenn keine Termine vorhanden sind<br>Mögliche Werte: ''true'', ''false'' oder ''individueller Text''||true||data-showempty="Derzeit keine Termine" | |||
|- | |||
|'''data-oneline'''||Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen||no||data-oneline="yes" | |||
|- | |||
|'''data-sourcecolor'''||Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel)||no||data-sourcecolor="yes" | |||
|} | |||
===Nahende Termine hervorheben=== | |||
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von '''data-daysleft-values'''. 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. | |||
{|class="wikitable" | |||
!Attribut | |||
!Beschreibung | |||
!Standard-Wert | |||
!Beispiel | |||
|- | |||
|'''data-daysleft-values'''||Array von Tagen bis zum Termin (aufsteigend)||||data-daysleft-values='[1,3,8]' | |||
|- | |||
|'''data-daysleft-classes'''||Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional||||data-daysleft-classes='["blink","",""]' | |||
|- | |||
|'''data-daysleft-colors'''||Array von Textfarben - analog zu data-daysleft-values ; optional||||data-daysleft-colors='["red","yellow","green"]' | |||
|- | |||
|'''data-daysleft-background-colors'''||Array von Hintergrundfarben - analog zu data-daysleft-values ; optional||||data-daysleft-background-colors='["gray","lightgray","white"]' | |||
|} | |||
===Titelzeile=== | |||
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von '''data-header'''. Die anderen Attribute sind allesamt optional. | |||
{|class="wikitable" | |||
!Attribut | |||
!Beschreibung | |||
!Standard-Wert | |||
!Beispiel | |||
|- | |||
|'''data-header'''||Array - analog zu data-detail||||data-header='["am","um","Zusammenfassung"]' | |||
|- | |||
|'''data-header-class'''||CSS-Klasse(n) - analog zu data-class ; optional||||data-header-class="large" | |||
|- | |||
|'''data-header-color'''||Textfarbe - analog zu data-color ; optional||||data-header-color="hotpink" | |||
|- | |||
|'''data-header-background-color'''||Hintergrundfarbe - analog zu data-background-color ; optional||||data-header-background-color="white" | |||
|} | |||
===Anwendungsbereich für class-Attribute=== | |||
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. | |||
{|class="wikitable" | |||
!Attribut | |||
!Beschreibung | |||
!Standard-Wert | |||
!Beispiel | |||
|- | |||
|'''data-class-usage'''||Anwendungsbereich festlegen||col||data-class-usage="row" | |||
|} | |||
===Swiper-Darstellung=== | |||
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. | |||
{|class="wikitable" | |||
!Attribut | |||
!Beschreibung | |||
!Standard-Wert | |||
!Beispiel | |||
|- | |||
|'''data-swiperstyle'''||Legt fest, ob die Swiper-Darstellung genutzt werden soll||no||data-swiperstyle="yes" | |||
|- | |||
|'''data-swiper-autoplay'''||Zeit in ms (!), nach der zum nächsten Termin gewechselt wird||kein autoplay||data-swiper-autoplay="2000" | |||
|- | |- | ||
|'''data- | |'''data-swiper-effect'''||Effekt für den Wechsel zum nächsten Termin festlegen<br>Mögliche Werte: ''flip'' bzw. ''slide''||flip||data-swiper-effect="slide" | ||
|- | |- | ||
|'''data- | |'''data-swiper-pagination'''||Schnellzugriff unterhalb der Termine einblenden||yes||data-swiper-pagination="no" | ||
|} | |||
==CSS Klassen== | |||
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. | |||
{|class="wikitable" | |||
!Klasse!!Beschreibung | |||
|- | |- | ||
|''' | |'''calview'''||gilt für den ganzen Kalender | ||
|- | |- | ||
|''' | |'''calview-row-header'''||gilt für die komplette Headerzeile | ||
|- | |- | ||
|''' | |'''calview-col-header'''||gilt für eine einzelne Headerspalte | ||
|- | |- | ||
|''' | |'''calview-row'''||gilt für eine komplette Zeile eines Termins, wenn '''kein''' daysleft-Fall vorliegt | ||
|- | |||
|'''calview-col'''||gilt für eine einzelne Spalte eines Termins, wenn '''kein''' daysleft-Fall vorliegt | |||
|- | |||
|'''calview-row-daysleft-<n>'''||gilt für eine komplette Zeile eines Termins, wenn '''ein''' daysleft-Fall vorliegt;<br>''<n>'' entspricht dem Eintrag im daysleft-Array - beginnend mit 1 | |||
|- | |||
|'''calview-col-daysleft-<n>'''||gilt für eine einzelne Spalte eines Termins, wenn '''ein''' daysleft-Fall vorliegt;<br>''<n>'' entspricht dem Eintrag im daysleft-Array - beginnend mit 1 | |||
|} | |} | ||
Zeile 43: | Zeile 149: | ||
===Geburtstagskalender mit Berechnung des Alters=== | ===Geburtstagskalender mit Berechnung des Alters=== | ||
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. | Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt. | ||
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus. | Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus. | ||
Zeile 61: | Zeile 167: | ||
END:VCALENDAR | END:VCALENDAR | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Wichtig ist hier insbesondere "DESCRIPTION", hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters. | |||
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein: | Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein: | ||
Zeile 88: | Zeile 196: | ||
data-detailwidth='["25","70","5"]' | data-detailwidth='["25","70","5"]' | ||
data-showempty="true" | data-showempty="true" | ||
data-dateformat="short" | data-dateformat="short" | ||
data-timeformat="short" | data-timeformat="short" | ||
data | data-oneline="yes" | ||
data-class='left-align' | data-class='left-align' | ||
> | > | ||
Zeile 101: | Zeile 206: | ||
Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST) | Anmerkung: Screenshot fehlt noch. [[Benutzer:Curt|Curt]] ([[Benutzer Diskussion:Curt|Diskussion]]) 04:11, 14. Okt. 2018 (CEST) | ||
[[Kategorie:FHEM Tablet UI|Calview]] | ===Einfärbung von Kalendereinträgen (sourcecolor)=== | ||
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen. | |||
Vorausgesetzt werden: | |||
* eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel '''test1.ics''' und '''test2.ics'''. | |||
* ein Calendar-Device pro ics-Datei; in unserem Beispiel '''Testkalender1''' und '''Testkalender2''' | |||
* ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel '''TestkalenderView''' | |||
<syntaxhighlight lang="html"> | |||
defmod Testkalender1 Calendar ical file test1.ics 86400 | |||
attr Testkalender1 hideOlderThan 3600s | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="html"> | |||
defmod Testkalender2 Calendar ical file test2.ics 86400 | |||
attr Testkalender2 hideOlderThan 3600s | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="html"> | |||
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1 | |||
attr TestkalenderView modes next | |||
</syntaxhighlight> | |||
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das '''sourcecolor'''-Attribut beim CALVIEW-Device gesetzt werden. | |||
<syntaxhighlight lang="html"> | |||
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow | |||
</syntaxhighlight> | |||
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. | |||
<syntaxhighlight lang="html"> | |||
set TestkalenderView update | |||
</syntaxhighlight> | |||
Das aktualisierte CALVIEW-Device sollte nun in den '''t_<nnn>_sourcecolor'''-Readings den gewünschten Farbwert enthalten. | |||
Die gewünschte Darstellung im FTUI erreicht man, indem man das Widget-Attribut '''data-sourcecolor''' verwendet und auf den Wert ''yes'' setzt. | |||
{{Hinweis| | |||
*In früheren Widget-Versionen musste zusätzlich im Widget-Attribut '''data-detail''' die Spalte ''sourcecolor'' mit der Breite 0 enthalten sein; dies ist nicht mehr notwendig.}} | |||
<syntaxhighlight lang="html"> | |||
<div data-type="calview" | |||
data-device="TestkalenderView" | |||
data-get="all" | |||
data-detail='["weekdayname","bdate","summary"]' | |||
data-detailwidth='["10","20","70"]' | |||
data-sourcecolor="yes"></div> | |||
</syntaxhighlight> | |||
Anzumerken bleibt noch, dass das Widget-Attribut '''data-color''' bei Verwendung von ''sourcecolor'' ignoriert wird. Die '''data-daysleft'''-Attribute allerdings haben Vorrag vor ''sourcecolor'' und führen - je nach daysleft-Konfiguration - zum Überschreiben der sourcecolor. | |||
===Beispiel unter Verwendung der vorgegebenen CSS-Klassen=== | |||
Folgendes Beispiel soll den Einsatz der vorgegebenen CSS-Klassen, die jedem calview-Element automatisch zugeordnet sind, zeigen. | |||
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. | |||
<syntaxhighlight lang="html"> | |||
<div data-type="calview" data-device="TestkalenderView" | |||
data-class-usage="row" | |||
data-daysleft-values='[2,9,16]' | |||
data-daysleft-classes='["blink","",""]' | |||
data-detail='["weekdayname","bdate","summary"]' | |||
data-detailwidth='["10","20","70"]' | |||
data-get="all" | |||
data-header='["","am","Zusammenfassung"]' | |||
data-max="15" | |||
data-oneline="yes" | |||
data-showempty="Derzeit keine Termine"></div> | |||
</syntaxhighlight> | |||
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. | |||
<syntaxhighlight lang="html"> | |||
.calview { | |||
background-color: #99ccff; | |||
border-radius: 8px; | |||
padding: 4px; | |||
color: black; | |||
} | |||
.calview-row-header { | |||
border-radius: 8px; | |||
font-size:125%; | |||
font-weight: bold; | |||
} | |||
.calview-col-header { | |||
text-align: left; | |||
} | |||
.calview-row { | |||
background-color: #c0c0c0; | |||
border-radius: 8px; | |||
padding-left: 4px; | |||
padding-right: 4px; | |||
} | |||
.calview-col { | |||
text-align: left; | |||
} | |||
.calview-row-daysleft-1 { | |||
background-color: #ff8080; | |||
border-radius: 8px; | |||
padding-left: 4px; | |||
padding-right: 4px; | |||
} | |||
.calview-col-daysleft-1 { | |||
text-align: left; | |||
} | |||
.calview-row-daysleft-2 { | |||
background-color: #ffffb3; | |||
border-radius: 8px; | |||
padding-left: 4px; | |||
padding-right: 4px; | |||
} | |||
.calview-col-daysleft-2 { | |||
text-align: left; | |||
} | |||
.calview-row-daysleft-3 { | |||
background-color: #99ff99; | |||
border-radius: 8px; | |||
padding-left: 4px; | |||
padding-right: 4px; | |||
} | |||
.calview-col-daysleft-3 { | |||
text-align: left; | |||
} | |||
</syntaxhighlight> | |||
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. | |||
[[Kategorie:FHEM Tablet UI V2|Calview]] |
Aktuelle Version vom 2. August 2024, 15:36 Uhr
Das Calview Widget ist ein Widget für FHEM Tablet UI V2, welches Einträge aus einem CALVIEW-Device anzeigen kann.
Attribute
Allgemeine Attribute
Attribut | Beschreibung | Standard-Wert | Beispiel |
---|---|---|---|
data-device | Name des CALVIEW-Devices, dessen Reading dargestellt werden sollen | ||
data-get | Welche Termine sollen angezeigt werden? Mögliche Werte: all, today, tomorrow |
STATE | data-get="all" |
data-start | Termine von heute oder heute+morgen nicht anzeigen. Gilt nur für data-get="all". Mögliche Werte: none, all, notoday und notomorrow |
all | data-start="notoday" |
data-max | Bestimmt, wie viele Termine angezeigt werden | 10 | data-max="20" |
data-class | CSS-Klasse(n); alle im FTUI verfügbaren class-Werte nutzbar | data-class="left-align small" | |
data-color | Textfarbe als HEX-Angabe oder Farbname | data-color="#ff0000" | |
data-background-color | Hintergrundfarbe als HEX-Angabe oder Farbname | data-background-color="#0000ff" | |
data-detail | Array von CALVIEW-Details, die angezeigt werden sollen | data-detail='["bdate","btime","summary"]' | |
data-detailwidth | Breite der einzelnen Spalten in % | data-detailwidth='["20","20","60"]' | |
data-dateformat | Formatierung der Datumsanzeige (mit/ohne Jahreszahl) | long | data-dateformat="short" |
data-timeformat | Formatierung der Uhrzeitanzeige (mit/ohne Sekunden) | long | data-timeformat="short" |
data-showempty | Infotext anzeigen, wenn keine Termine vorhanden sind Mögliche Werte: true, false oder individueller Text |
true | data-showempty="Derzeit keine Termine" |
data-oneline | Zu langen Text einer Spalte abschneiden (... wird ans Ende gesetzt) statt umzubrechen | no | data-oneline="yes" |
data-sourcecolor | Als Textfarbe eines Eintrages die sourcecolor verwenden (s. Beispiel) | no | data-sourcecolor="yes" |
Nahende Termine hervorheben
Optional können nahende Termine optisch hervorgehoben werden; die Aktivierung erfolgt durch das Verwenden von data-daysleft-values. 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.
Attribut | Beschreibung | Standard-Wert | Beispiel |
---|---|---|---|
data-daysleft-values | Array von Tagen bis zum Termin (aufsteigend) | data-daysleft-values='[1,3,8]' | |
data-daysleft-classes | Array von CSS-Klasse(n) - analog zu data-daysleft-values ; optional | data-daysleft-classes='["blink","",""]' | |
data-daysleft-colors | Array von Textfarben - analog zu data-daysleft-values ; optional | data-daysleft-colors='["red","yellow","green"]' | |
data-daysleft-background-colors | Array von Hintergrundfarben - analog zu data-daysleft-values ; optional | data-daysleft-background-colors='["gray","lightgray","white"]' |
Titelzeile
Optional kann eine zusätzliche Tabellenzeile als Titelzeile dargestellt werden; die Aktivierung erfolgt durch das Verwenden von data-header. Die anderen Attribute sind allesamt optional.
Attribut | Beschreibung | Standard-Wert | Beispiel |
---|---|---|---|
data-header | Array - analog zu data-detail | data-header='["am","um","Zusammenfassung"]' | |
data-header-class | CSS-Klasse(n) - analog zu data-class ; optional | data-header-class="large" | |
data-header-color | Textfarbe - analog zu data-color ; optional | data-header-color="hotpink" | |
data-header-background-color | Hintergrundfarbe - analog zu data-background-color ; optional | data-header-background-color="white" |
Anwendungsbereich für class-Attribute
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.
Attribut | Beschreibung | Standard-Wert | Beispiel |
---|---|---|---|
data-class-usage | Anwendungsbereich festlegen | col | data-class-usage="row" |
Swiper-Darstellung
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.
Attribut | Beschreibung | Standard-Wert | Beispiel |
---|---|---|---|
data-swiperstyle | Legt fest, ob die Swiper-Darstellung genutzt werden soll | no | data-swiperstyle="yes" |
data-swiper-autoplay | Zeit in ms (!), nach der zum nächsten Termin gewechselt wird | kein autoplay | data-swiper-autoplay="2000" |
data-swiper-effect | Effekt für den Wechsel zum nächsten Termin festlegen Mögliche Werte: flip bzw. slide |
flip | data-swiper-effect="slide" |
data-swiper-pagination | Schnellzugriff unterhalb der Termine einblenden | yes | data-swiper-pagination="no" |
CSS Klassen
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.
Klasse | Beschreibung |
---|---|
calview | gilt für den ganzen Kalender |
calview-row-header | gilt für die komplette Headerzeile |
calview-col-header | gilt für eine einzelne Headerspalte |
calview-row | gilt für eine komplette Zeile eines Termins, wenn kein daysleft-Fall vorliegt |
calview-col | gilt für eine einzelne Spalte eines Termins, wenn kein daysleft-Fall vorliegt |
calview-row-daysleft-<n> | gilt für eine komplette Zeile eines Termins, wenn ein daysleft-Fall vorliegt; <n> entspricht dem Eintrag im daysleft-Array - beginnend mit 1 |
calview-col-daysleft-<n> | gilt für eine einzelne Spalte eines Termins, wenn ein daysleft-Fall vorliegt; <n> entspricht dem Eintrag im daysleft-Array - beginnend mit 1 |
Beispiele
Einfaches Beispiel
Folgendes Beispiel zeigt die nächsten zehn Kalender-Einträge in einer unformatierten Liste an.
<div data-type="calview"
data-device="myCalView"
data-get="all"
data-detail='["bdate","btime","summary"]'
data-detailwidth='["30","30","40"]'></div>
Geburtstagskalender mit Berechnung des Alters
Das Beispiel zeigt einen Geburtstagskalender der Geburtstage ab heute - eine oft gewünschte Funktion. Das Lebensalter (Anna wird 35 Jahre) wird berechnet und angezeigt.
Anders als in vielen im FHEM-Forum und im Internet zu findenden Beispielen kommt es ohne zusätzlich einzubindende PERL-Funktion(en) aus.
Die iCal-Datei (hier: test.ics) der Geburtstage hat so auszusehen - meine Mutter wurde am 24. Mai 1931 geboren:
BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:19310524
DTEND:19310524
RRULE:FREQ=YEARLY
SUMMARY: Geburtstag meiner Mutter
DESCRIPTION: 1931
END:VEVENT
END:VCALENDAR
Wichtig ist hier insbesondere "DESCRIPTION", hier muss das Geburtsjahr stehen: Diese Angabe ist Basis für die Berechnung des Lebensalters.
Dieser Kalender, der natürlich nicht nur den Geburtstag der Mutter hat, muss in fhem.cfg eingebunden sein:
defmod Testkalender Calendar ical file FHEM/test.ics 86400
attr Testkalender hideOlderThan 3600s
Um den Kalender anzusehen, benötigen wir in fhem.cfg noch eine CalView-Device:
defmod TestkalenderView CALVIEW Testkalender 1
attr TestkalenderView isbirthday 1
attr TestkalenderView modes next
attr TestkalenderView yobfield _description
Abschließend muss in einer FTUI-Seite des FHEM Tablet UI eine Gridster-Kachel gefunden werden, in die das folgende gehört:
<!-- https://forum.fhem.de/index.php?topic=91903.new;topicseen#new #15 -->
<div data-type="calview"
data-device="TestkalenderView"
data-get="all"
data-max="5"
data-detail='["bdate","summary","age"]'
data-detailwidth='["25","70","5"]'
data-showempty="true"
data-dateformat="short"
data-timeformat="short"
data-oneline="yes"
data-class='left-align'
>
</div>
Anmerkung: Screenshot fehlt noch. Curt (Diskussion) 04:11, 14. Okt. 2018 (CEST)
Einfärbung von Kalendereinträgen (sourcecolor)
Folgendes Beispiel soll die unterschiedliche Einfärbung von Kalendereinträgen bei Verwendung mehrerer Kalender zeigen.
Vorausgesetzt werden:
- eine Anzahl von beliebigen ics-Dateien, auf die FHEM Zugriff hat; in unserem Beispiel test1.ics und test2.ics.
- ein Calendar-Device pro ics-Datei; in unserem Beispiel Testkalender1 und Testkalender2
- ein CALVIEW-Device zum Sammeln der Termine aus den einzelnen Kalendern; in unserem Beispiel TestkalenderView
defmod Testkalender1 Calendar ical file test1.ics 86400
attr Testkalender1 hideOlderThan 3600s
defmod Testkalender2 Calendar ical file test2.ics 86400
attr Testkalender2 hideOlderThan 3600s
defmod TestkalenderView CALVIEW Testkalender1,Testkalender2 1
attr TestkalenderView modes next
Um Kalendereinträge je nach Kalender eingefärbt darzustellen, muss das sourcecolor-Attribut beim CALVIEW-Device gesetzt werden.
attr TestkalenderView sourcecolor Testkalender1:green,Testkalender2:yellow
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.
set TestkalenderView update
Das aktualisierte CALVIEW-Device sollte nun in den t_<nnn>_sourcecolor-Readings den gewünschten Farbwert enthalten.
Die gewünschte Darstellung im FTUI erreicht man, indem man das Widget-Attribut data-sourcecolor verwendet und auf den Wert yes setzt.
- In früheren Widget-Versionen musste zusätzlich im Widget-Attribut data-detail die Spalte sourcecolor mit der Breite 0 enthalten sein; dies ist nicht mehr notwendig.
<div data-type="calview"
data-device="TestkalenderView"
data-get="all"
data-detail='["weekdayname","bdate","summary"]'
data-detailwidth='["10","20","70"]'
data-sourcecolor="yes"></div>
Anzumerken bleibt noch, dass das Widget-Attribut data-color bei Verwendung von sourcecolor ignoriert wird. Die data-daysleft-Attribute allerdings haben Vorrag vor sourcecolor und führen - je nach daysleft-Konfiguration - zum Überschreiben der sourcecolor.
Beispiel unter Verwendung der vorgegebenen CSS-Klassen
Folgendes Beispiel soll den Einsatz der vorgegebenen CSS-Klassen, die jedem calview-Element automatisch zugeordnet sind, zeigen.
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.
<div data-type="calview" data-device="TestkalenderView"
data-class-usage="row"
data-daysleft-values='[2,9,16]'
data-daysleft-classes='["blink","",""]'
data-detail='["weekdayname","bdate","summary"]'
data-detailwidth='["10","20","70"]'
data-get="all"
data-header='["","am","Zusammenfassung"]'
data-max="15"
data-oneline="yes"
data-showempty="Derzeit keine Termine"></div>
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.
.calview {
background-color: #99ccff;
border-radius: 8px;
padding: 4px;
color: black;
}
.calview-row-header {
border-radius: 8px;
font-size:125%;
font-weight: bold;
}
.calview-col-header {
text-align: left;
}
.calview-row {
background-color: #c0c0c0;
border-radius: 8px;
padding-left: 4px;
padding-right: 4px;
}
.calview-col {
text-align: left;
}
.calview-row-daysleft-1 {
background-color: #ff8080;
border-radius: 8px;
padding-left: 4px;
padding-right: 4px;
}
.calview-col-daysleft-1 {
text-align: left;
}
.calview-row-daysleft-2 {
background-color: #ffffb3;
border-radius: 8px;
padding-left: 4px;
padding-right: 4px;
}
.calview-col-daysleft-2 {
text-align: left;
}
.calview-row-daysleft-3 {
background-color: #99ff99;
border-radius: 8px;
padding-left: 4px;
padding-right: 4px;
}
.calview-col-daysleft-3 {
text-align: left;
}
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.