Hallo zusammen,
ich wollte mit dem neuen mit List-Template eine Geburtstagsliste basierend auf einem Calview Device erstellen. Klappt auch soweit aber..
Die Icons aus dem Iconset werden nicht so angezeigt, wie geplant.
Ab 4 Tage daysleft soll das ichon cake-variant-outline angezeigt werden. Ab 2 Tage dasy left soll dann auf das icon cake-variant gewechselt werden.
Es wird aber nicht der komplette Wert des readings t_00x_daysleft ausgewertet sondern es reicht auch nur ein Teil.
Bei 15 Tagen daysleft wird z.B. die "1" gefunden und dann das icon cake-variant angezeit (siehe Anhang).
Was mache ich falsch?
Wer hat einen Tip?
Geburtstagsliste
{
"template": "list",
"room": "Termine",
"name": "Geburtstage",
"setup": {
"expanded": true,
"iconSet": [
{ "val": "4", "icon": "mdi-cake-variant-outline" },
{ "val": "3", "icon": "mdi-cake-variant-outline" },
{ "val": "2", "icon": "mdi-cake-variant" },
{ "val": "1", "icon": "mdi-cake-variant" }
],
"listItems": [
{
"class1": "col-2 text-center",
"icon1": ["t_001_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_001_daysleft::in::text"],
"text21": ["t_001_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_001_summary::%s:font-weight-bold"],
"text31": ["t_001_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_001_age::Alter:text"],
"text51": ["t_001_age::%n:text"],
"divider": true
},
{
"class1": "col-2 text-center",
"icon1": ["t_002_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_002_daysleft::in::text"],
"text21": ["t_002_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_002_summary::%s:font-weight-bold"],
"text31": ["t_002_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_002_age::Alter:text"],
"text51": ["t_002_age::%n:text"],
"divider": true
},
{
"class1": "col-2 text-center",
"icon1": ["t_003_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_003_daysleft::in::text"],
"text21": ["t_003_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_003_summary::%s:font-weight-bold"],
"text31": ["t_003_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_003_age::Alter:text"],
"text51": ["t_003_age::%n:text"],
"divider": true
},
{
"class1": "col-2 text-center",
"icon1": ["t_004_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_004_daysleft::in::text"],
"text21": ["t_004_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_004_summary::%s:font-weight-bold"],
"text31": ["t_004_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_004_age::Alter:text"],
"text51": ["t_004_age::%n:text"],
"divider": true
},
{
"class1": "col-2 text-center",
"icon1": ["t_005_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_005_daysleft::in::text"],
"text21": ["t_005_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_005_summary::%s:font-weight-bold"],
"text31": ["t_005_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_005_age::Alter:text"],
"text51": ["t_005_age::%n:text"],
"divider": true
},
{
"class1": "col-2 text-center",
"icon1": ["t_006_daysleft::%n"],
"class2": "col-2 text-center",
"text2": ["t_006_daysleft::in::text"],
"text21": ["t_006_daysleft::%n:font-weight-bold"],
"class3": "text-left",
"text3": ["t_006_summary::%s:font-weight-bold"],
"text31": ["t_006_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_006_age::Alter:text"],
"text51": ["t_006_age::%n:text"],
"divider": true
}
],
"info": {
}
}
}
moin,
steht in dem reading echt nur 1 2 3 4 .... 365?
hatte ähnliche Probleme bei der Anrufliste
"iconSet": [
{ "val": "<=", "icon": "mdi-phone-outgoing" },
{ "val": "=> X", "icon": "mdi-phone-missed" },
{ "val": "=> O_O", "icon": "mdi-phone-message" },
{ "val": "=>", "icon": "mdi-phone-incoming" }
anfangs war die zeile { "val": "=>", "icon": "mdi-phone-incoming" }
die 2. zeile - hatte zur folge, dass missed und message nicht ausgewertet wurden, darum habe ich diese ans ende gesetzt ....
in deinem fall - vielleicht dummys mit 90 80 70 ....20 10 "vorschalten" die alle werte über 10 abfangen? 4 ist nunmal nicht 40, aber 40 könnte mit 4 ausgewertet werden (hoffe du verstehst was ich meine ^^)
vll wäre auch das ein ansatz
https://forum.fhem.de/index.php?topic=102230.0 (https://forum.fhem.de/index.php?topic=102230.0)
wenn du führende nullen setzen lässt ...
userreading (ungetestet)
t_00x_daysleft:* {sprintf("%02d",ReadingsNum($name,"t_00x_daysleft",0))}
dann könntest du auf 01 02 03 04 ... abgleichen, damit sollte 10 20 30 ... raus sein halt
@draddy
Danke für die schnelle Antwort. Dann werde ich wohl die Variante mit den Dummy umsetzen.
Gruß LuGu
Warum schreibst du in val nicht den kompletten Wert, den das reading liefert? Dann sollte die Zuordnung des jeweiligen Icons korrekt funktionieren.
Zitat von: jemu75 am 10 April 2022, 20:49:38
Warum schreibst du in val nicht den kompletten Wert, den das reading liefert? Dann sollte die Zuordnung des jeweiligen Icons korrekt funktionieren.
Das reading enthält die Anzahl der verbleibenden Tage bis zum Geburtstag. Wenn es ein val mit ,,1" gibt und das reading ,,15" ist, wird leider val ,,1" aktiv.
Es wird also nicht das komplette reading verglichen, sondern ein Teil des readings reicht auch.
Gruß LuGu
@jemu
wenn das val wirklich nur 1 2 3 ... zurück gibt, kann das durch aus sein, wiegesagt, habe ähnliches bei meiner Anrufliste festgestellt, darum die idee mit userreading auf 01 02 03 ...
bei der Anrufliste hat es halt gereicht die Reihenfolge zu ändern.
lg
Jens
Ich würde das lieber sauber in FHEMapp lösen, bevor wir für sowas noch ein userreading schaffen.
Zitat von: draddy am 10 April 2022, 18:37:31
in deinem fall - vielleicht dummys mit 90 80 70 ....20 10 "vorschalten" die alle werte über 10 abfangen? 4 ist nunmal nicht 40, aber 40 könnte mit 4 ausgewertet werden (hoffe du verstehst was ich meine ^^)
Das mit den Dummy funktioniert nicht, bzw. wäre sehr aufwendig.
Dummys mit 90 80 70 ....20 10 reicht nicht. Es müssten schon dummys mit 99 98 97 ... 12 11 10 sein, und das kann nicht wirklich die Lösung sein.
Gruß LuGu
ok
dann kannst nochmal das mit der vorgestellten 0 versuchen, oder eben auf jemu warten, das er nen Bugfix liefert. (Jens ist ja immer schnell mit sowas ;))
eventuell ist es wirklich ne Kleinigkeit, warum vue da nicht voll auswertet sondern auf 1st match geht.
Ich habe mir das nochmal angesehen. Der Abgleich zwischen val und dem Wert des definierten readings erfolgt über regexp und kann somit auch das geschilderte Problem lösen.
Probiere bitte mal für die explizite Prüfung des Wertes "1" in val 1$ statt 1 (siehe auch https://regex101.com/ (https://regex101.com/))
Ein userreading sollte damit nicht erforderlich sein.
@jemu75
Fast richtig! ;)
Wenn man Start of String "^" zu dem End of Strin "$" auch noch dazu nimmt, dann geht es. Mit nur 1$ ist für ihn 21, 31 usw. ja auch richtig.
Mit ^1$ klappt es! :)
Wieder was gelernt!
Nachdem das geklärt ist, habe ich gleich die nächste Frage.
Kann man im List Template auch eine status bar definieren?
Ich würde die gerne färben, wenn nur noch 1 Tag bis zum nächsten Geburtstag ist, oder wenn die Anzahl der Anrufe in Abwesenheit in der Anrufliste >0 ist oder.. oder..
Gruß LuGu
sollte gehen
"status": { "bar": ["count-missed-calls:1:100:red"] },
hab nur 2 aufm AB - wenn ich aber das Att
answMachine-is-missed-call auf 1 setze, habe ich 2 missed, und meine statusbar ist rot - setze ich das att auf 0 - ist die bar leer :)
@draddy
Prima, danke für den Tip.
Ich hatte in der Beschreibung im git nichts zu status bar im Template List gefunden, aber einfach auspribieren ist auch ne gute Idee.
Gruß LuGu
Danke für eure Tips.
Für mich ist das Thema abgeschlossen. Vielleich kann es jemand nutzen oder als Vorlage für eine andere Liste gebrauchen.
Ich habe der Geburtstagsliste noch eine status bar hinzugefügt.
Ab 10 Tage bis zum nächsten Termin "wächst" die status bar in color succsess.
Ab 3 Tage bis zum nächsten Termin "wächst" die status bar weiter in color warning.
Ab 1 Tag bis zum nächsten Termin "wächst" die status bar weiter in color error.
Geburtstagsliste mit einem CALVIEW device
{
"template": "list",
"room": "Termine",
"name": "Geburtstage",
"setup": {
"expanded": true,
"status": { "bar": ["t_001_daysleft:4:%n:success:invert","t_001_daysleft:3:%n:warning:invert","t_001_daysleft::%n:error:invert"],
"min": 0,
"max": 10
},
"listItems": [
{
"class1": "col-4 text-center",
"text1": ["t_001_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_001_summary::%s:font-weight-bold"],
"text31": ["t_001_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_001_age::Alter:text"],
"text51": ["t_001_age::%n:text"],
"divider": true
},
{
"class1": "col-4 text-center",
"text1": ["t_002_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_002_summary::%s:font-weight-bold"],
"text31": ["t_002_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_002_age::Alter:text"],
"text51": ["t_002_age::%n:text"],
"divider": true
},
{
"class1": "col-4 text-center",
"text1": ["t_003_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_003_summary::%s:font-weight-bold"],
"text31": ["t_003_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_003_age::Alter:text"],
"text51": ["t_003_age::%n:text"],
"divider": true
},
{
"class1": "col-4 text-center",
"text1": ["t_004_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_004_summary::%s:font-weight-bold"],
"text31": ["t_004_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_004_age::Alter:text"],
"text51": ["t_004_age::%n:text"],
"divider": true
},
{
"class1": "col-4 text-center",
"text1": ["t_005_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_005_summary::%s:font-weight-bold"],
"text31": ["t_005_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_005_age::Alter:text"],
"text51": ["t_005_age::%n:text"],
"divider": true
},
{
"class1": "col-4 text-center",
"text1": ["t_006_daysleftLong::%s:text"],
"class3": "text-left",
"text3": ["t_006_summary::%s:font-weight-bold"],
"text31": ["t_006_bdate::%s:text"],
"class5": "col-3 text-right",
"text5": ["t_006_age::Alter:text"],
"text51": ["t_006_age::%n:text"],
"divider": true
}
],
"info": {
}
}
}
Gruß LuGu