Seite 2 von 2

Re: Müllkalender, Klappe, die X.

Verfasst: 17. Sep 2023 17:58
von nw378
Falls das jemand adaptieren möchte, so sieht das Ergebnis aus:

.items

Code: Alles auswählen

Group gTrash
Group gTrashc

DateTime Abfall_Termin_schwarz  "schwarze Tonne [%1$tA, %1$td.%1$tm.%1$tY]"     (gTrash)    {channel="icalendar:eventfilter:412e35f1a4:78704cfe7b:result_0#begin"}
DateTime Abfall_Termin_blau        "blaue Tonne [%1$tA, %1$td.%1$tm.%1$tY]"     (gTrash)    {channel="icalendar:eventfilter:412e35f1a4:795742b652:result_0#begin"}
DateTime Abfall_Termin_gelb        "gelbe Tonne [%1$tA, %1$td.%1$tm.%1$tY]"     (gTrash)    {channel="icalendar:eventfilter:412e35f1a4:8713429895:result_0#begin"}
DateTime Abfall_Termin_gruen       "Grüne Tonne [%1$tA, %1$td.%1$tm.%1$tY]"     (gTrash)    {channel="icalendar:eventfilter:412e35f1a4:3d164849dc:result_0#begin"}

String Trash_01 "[%s]" (gTrash) 
String Trash_02 "[%s]" (gTrash) 
String Trash_03 "[%s]" (gTrash) 
String Trash_04 "[%s]" (gTrash) 
 
String Trashcolour_01 (gTrashc) 
String Trashcolour_02 (gTrashc) 
String Trashcolour_03 (gTrashc) 
String Trashcolour_04 (gTrashc) 
.rule

Code: Alles auswählen

rule "Termine sortieren"
  when Time cron "0 05 5 * * ? *" then
    val myList = gTrash.members.filter[d|d instanceof DateTimeItem].sortBy[d | (d.state as DateTimeType).getZonedDateTime() ]  
    myList.forEach[i,c|
       val farbe = i.name.toString.split("_").get(2).split("_").get(0)
       val String datetime_string  = (i.state as DateTimeType).format("%1$tA, %1$td.%1$tm.%1$ty")
       val myText = farbe + ": " + datetime_string 
       gTrashc.members.filter[s|s instanceof StringItem && s.name.endsWith((c+1).toString)].head.postUpdate(farbe) 
       gTrash.members.filter[s|s instanceof StringItem && s.name.endsWith((c+1).toString)].head.postUpdate(myText) 
       ]
    logInfo("Termine"," sortiert") 
end
.sitemap

Code: Alles auswählen

            Text label="weitere Abfuhrtermine" icon="none" {Frame {
               Text item=Trash_01 icon="selftrashbin" valuecolor=[Trashcolour_01=="gelb"="orange", Trashcolour_01=="blau"="blue", Trashcolour_01=="schwarz"="black", Trashcolour_01=="gruen"="green"]
               Text item=Trash_02 icon="selftrashbin" valuecolor=[Trashcolour_02=="gelb"="orange", Trashcolour_02=="blau"="blue", Trashcolour_02=="schwarz"="black", Trashcolour_02=="gruen"="green"]
               Text item=Trash_03 icon="selftrashbin" valuecolor=[Trashcolour_03=="gelb"="orange", Trashcolour_03=="blau"="blue", Trashcolour_03=="schwarz"="black", Trashcolour_03=="gruen"="green"]
               Text item=Trash_04 icon="selftrashbin" valuecolor=[Trashcolour_04=="gelb"="orange", Trashcolour_04=="blau"="blue", Trashcolour_04=="schwarz"="black", Trashcolour_04=="gruen"="green"]
Bildschirmfoto 2023-09-17 um 17.50.23.png
Gerne hätte ich noch linksbündig die Art der Abfuhr, aber m. W. kann man das Label eines Items nicht per Rule ändern, im Sinne von

Code: Alles auswählen

Trash_01.label("Papiertonne")

Re: Müllkalender, Klappe, die X.

Verfasst: 18. Sep 2023 18:22
von nw378
Nachtrag: die Labels der Items lassen sich doch bearbeiten, hierzu muss org.openhab.core.model.script.ScriptServiceUtil importiert werden und ein GenericItem kreiert werden.

Die rule schaut dann so aus:

Code: Alles auswählen

import org.openhab.core.model.script.ScriptServiceUtil

rule "Müllabfuhr: Termine sortieren"
  when Time cron "0 05 5 * * ? *" then
    val myList = gTrash.members.filter[d|d instanceof DateTimeItem].sortBy[d | (d.state as DateTimeType).getZonedDateTime() ]  
    myList.forEach[i,c|
       val farbe = i.name.toString.split("_").get(2)
       val String datetime_string  = (i.state as DateTimeType).format("%1$tA, %1$td.%1$tm.%1$ty")
       gTrashc.members.filter[s|s instanceof StringItem && s.name.endsWith((c+1).toString)].head.postUpdate(farbe) 
       gTrash.members.filter[s|s instanceof StringItem && s.name.endsWith((c+1).toString)].head.postUpdate(datetime_string) 
       gTrash.members.filter[s|s instanceof StringItem && s.name.endsWith((c+1).toString)].forEach[ s |
       val GenericItem item = ScriptServiceUtil.getItemRegistry.getItem(s.name) as GenericItem 
       if (farbe == "blau") item.setLabel("Papier") 
       else if (farbe == "gelb") item.setLabel("gelbe Tonne") 
       else if (farbe == "gruen") item.setLabel("Biotonne") 
       else if (farbe == "schwarz") item.setLabel("Restmüll") ]
    ]
    logInfo("Termine"," sortiert") 
end
und das Ergebnis so:
Bildschirmfoto 2023-09-18 um 18.19.02.png