Seite 2 von 4

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 16:21
von int5749
Derzeit nutze ich noch ein älteres Verfahren mittels HTTP-Binding und dann über ein entsprechendes Java Script (auch hier aus dem Forum)
Da dort jedoch auch eine ICS-Datei abgeholt und dann eben mittelt Java Script geparsed wird, finde ich die Variante über das Kalender Binding noch eleganter ;-)

Werde dies dann mal umbauen

maffi91 hat geschrieben: 6. Jun 2022 14:38 Genau, hab einfach einen Timer erstellt der uns dann um 11 Uhr jeweils erinnert ;)
Wenn es eh immer um 11 Uhr erfolgen soll, fände ich einen timecron Trigger sinnvoller. So würde man keinen Timer "blockieren"
Ich habe mir für heute und morgen entsprechende Rules erstellt.

Code: Alles auswählen

rule "Abfallerinnerung heute"
when
	Time cron "0 45 06 ? * * *" 
then
	val actions = getActions("pushover", "pushover:pushover-account:account")
	if (ABFALL_AKTIV_heute.state == ON){
		actions.sendMessageToDevice("X", "An den " + ABFALL_NAME_heute.state + " denken.", "Notification")
	}
end

rule "Abfallerinnerung morgen"
when
	Time cron "0 30 18 ? * * *" 
then
	val actions = getActions("pushover", "pushover:pushover-account:account")
	if (ABFALL_AKTIV_morgen.state == ON){
		actions.sendMessageToDevice("X", "Morgen den " + ABFALL_NAME_morgen.state + " rausstellen.", "Notification")
	}
end
Funktioniert bei mir wie gewünscht.

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 17:37
von djuscha
Vielen Dank !
Meine alte Version mit caldav und OH2 ging ja nicht mehr
Hab jetzt auch so gemacht
mal sehen ob ich alles richtig hab :) möchte Benachrichtigung per Telegram um 19 uhr am Tag davor

Code: Alles auswählen

  
   rule "Abfallkalender"
when
    Item ABFALL_morgen_name changed
then
    if (ABFALL_morgen_name.state != UNDEF) {
    createTimer(now.plusHours(19)) [|
    val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
    telegramAction.sendTelegram("Morgen wird folgender Müll abgeholt: " + ABFALL_morgen_name.state)

 ]
 }
end
und noch hab ich Sitemaps Eintrag

Code: Alles auswählen

Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="Leerung: DSD"] icon="trashg" labelcolor=["yellow"] valuecolor=["yellow"]
Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="Leerung: Bioabfall"] icon="trashbr" labelcolor=["brown"] valuecolor=["brown"]
Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="Leerung: Restabfall"] icon="trashb" labelcolor=["black"] valuecolor=["black"]
Default item=ABFALL_alsnaechstes_datum


was mich noch stört in der Sitemaps steht immer *Leerung* kann man das irgendwie auskomentieren schöner wäre z.b Abholung morgen Bioabfall hab ja farbige Icons und Shrift, und Datum bekomme ich noch nicht angezeigt .
Jetzt hab ich bei dem Datum entdeckt es steht

Code: Alles auswählen

(unknown)lock_fill
Invalid Link
icalendar:calendar:ad202206:next_start

mein Date Item ist

Code: Alles auswählen

DateTime ABFALL_alsnaechstes_datum   "Abholung am [%1$td.%1$tm.%1$tY, %1$tH:%1$tM]"  <calendar> { channel="icalendar:calendar:ad202206:next_start" }
und ting

Code: Alles auswählen

Bridge icalendar:calendar:abfallkalender "Abfallkalender" @ "RPI4" [ url="http://0.0.0.0:8080/static/Calender.ics", refreshTime=360 ]
Thing  icalendar:eventfilter:ad202206 "Abfall morgen"(icalendar:calendar:abfallkalender) [ maxEvents=1, datetimeUnit="DAY", datetimeStart=1, datetimeEnd=2, datetimeRound=true ]
hab Fehler mit Datum gefunden :)
item muss so sein

Code: Alles auswählen

DateTime ABFALL_alsnaechstes_datum   "Abholung am [%1$td.%1$tm.%1$tY, %1$tH:%1$tM]"  <calendar> { channel="icalendar:calendar:abfallkalender:next_start" }
Bleibt noch die Frage mit auskomentieren von Leerung

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 22:57
von int5749
djuscha hat geschrieben: 6. Jun 2022 17:37 Bleibt noch die Frage mit auskomentieren von Leerung
Dies scheint ja aus der ICS zu kommen.
Somit könntest Du mit einem Hilfsitem arbeiten.

z.B.

Code: Alles auswählen

ABFALL_morgen_name_temp
Und dann das Item aufteilen mittels

Code: Alles auswählen

ABFALL_morgen_name = ABFALL_morgen_name_temp.state.split(" ").get(1).toString
In der Sitemap wäre es dann

Code: Alles auswählen

Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="DSD"] icon="trashg" labelcolor=["yellow"] valuecolor=["yellow"]
Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="Bioabfall"] icon="trashbr" labelcolor=["brown"] valuecolor=["brown"]
Text item=ABFALL_morgen_name label="Abholung morgen: [%s]"  visibility=[ABFALL_morgen_name=="Restabfall"] icon="trashb" labelcolor=["black"] valuecolor=["black"]
ungetestet, aber die Richtung sollte stimmen :roll:

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 00:00
von peter-pan
maffi91 hat geschrieben: 2. Jun 2022 20:50 iCalendar-Binding installieren und dann eine things Datei erstellen mit
Beim Lesen dieses Post's bin ich neugierig geworden und hab mir das ICalender-Binding installiert und den Abfallkalender meines lokalen Entsorgungsunternehmens unter "openHAB-conf\html" als "abfall.ics" abgespeichert.

Dann habe ich eine "ical.things"-Datei angelegt und neben der Bridge noch die Filter-Things angelegt. Das Ganze geht zwar auch per UI, aber ich machs' gerne(r) "old school". Für die Abfrage des aktuellen und nächsten Termines/Namen sollte aber eigentlich die Bridge reichen. Bei den Eventfiltern habe beim "textValueType" als Wert "TEXT" genommen, da hier nicht eine genaue Übereinstimmung vorhanden sein muss.

ical.things:

Code: Alles auswählen

//		ical - Binding - Abfall-Kallender

Bridge icalendar:calendar:abfallkalender    "Abfallkalender" @ "RPI4" [ url="http://192.168.178.26:8080/static/abfall.ics", refreshTime=360 ]
Thing  icalendar:eventfilter:waste          "Restmüll"            (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=3, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Restmüll", textValueType="TEXT" ]
Thing  icalendar:eventfilter:bio            "Biomüll"             (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=3, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Bioabfall", textValueType="TEXT" ]
Thing  icalendar:eventfilter:yellow         "Gelber Sack"         (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=5, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Gelber Sack", textValueType="TEXT" ]
Thing  icalendar:eventfilter:paper          "Blaue Tonne"         (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=5, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Blaue Tonne", textValueType="TEXT" ]
Thing  icalendar:eventfilter:garden         "Gartentonne"         (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=3, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Gartentonne", textValueType="TEXT" ]
Thing  icalendar:eventfilter:problem        "Problemstoffmobil"   (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=12, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Problemstoffmobil", textValueType="TEXT" ]
Thing  icalendar:eventfilter:wastepaper     "Altpapier Vereine"   (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=26, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Altpapiersammlung", textValueType="TEXT" ]
Thing  icalendar:eventfilter:xmastree       "Christbaumsammlung"  (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=52, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Christbaumabfuhr", textValueType="TEXT" ]
Thing  icalendar:eventfilter:greenwaste     "Grünabfuhr"          (icalendar:calendar:abfallkalender) [ maxEvents=1, refreshTime=720, datetimeUnit="WEEK", datetimeStart=0, datetimeEnd=52, datetimeRound=true,textEventField="DESCRIPTION", textEventValue="Grünabfuhr", textValueType="TEXT" ]
Dazu habe ich noch eine ical.items Datei angelegt. Die ist zwar noch nicht ganz fertig, da noch die Daten für das semantische Modell fehlen und auch sonst noch ein paar Einträge eingebaut werden müssen (z.B.: Patterns, Icons, zusätzl. Items, etc.)

ical.items:

Code: Alles auswählen

DateTime   next_waste_appointment           "nächste Abholung [%1$ta, %1$td.%1$tm.%1$ty]"     <calendar>  { channel="icalendar:calendar:abfallkalender:next_start" }
String     next_waste_name                  "Abholung als naechstes [%s]"                     <calendar>  { channel="icalendar:calendar:abfallkalender:next_title" }

DateTime   garbage_Begin_waste              "Restmüll Start [%1$ta, %1$td.%1$tm.%1$ty]"             {channel="icalendar:eventfilter:waste:result_0#begin"}
DateTime   garbage_End_waste                "Restmüll Ende [%1$ta, %1$td.%1$tm.%1$ty]"              {channel="icalendar:eventfilter:waste:result_0#end"}
String     garbage_Title_waste              "Restmüll Titel"             {channel="icalendar:eventfilter:waste:result_0#title"}

DateTime   garbage_Begin_bio                "Bioabeutel Start [%1$ta, %1$td.%1$tm.%1$ty]"           {channel="icalendar:eventfilter:bio:result_0#begin"}
DateTime   garbage_End_bio                  "Bioabeutel Ende [%1$ta, %1$td.%1$tm.%1$ty]"            {channel="icalendar:eventfilter:bio:result_0#end"}
String     garbage_Title_bio                "Bioabeutel Titel"           {channel="icalendar:eventfilter:bio:result_0#title"}

DateTime   garbage_Begin_paper              "Blaue TonneStart [%1$ta, %1$td.%1$tm.%1$ty]"           {channel="icalendar:eventfilter:paper:result_0#begin"}
DateTime   garbage_End_paper                "Blaue TonneEnde [%1$ta, %1$td.%1$tm.%1$ty]"            {channel="icalendar:eventfilter:paper:result_0#end"}
String     garbage_Title_paper              "Blaue TonneTitel"                                      {channel="icalendar:eventfilter:paper:result_0#title"}

DateTime   garbage_Begin_garden             "Gartentonne Start [%1$ta, %1$td.%1$tm.%1$ty]"          {channel="icalendar:eventfilter:garden:result_0#begin"}
DateTime   garbage_End_garden               "Gartentonne Ende [%1$ta, %1$td.%1$tm.%1$ty]"           {channel="icalendar:eventfilter:garden:result_0#end"}
String     garbage_Title_garden             "Gartentonne Titel"          {channel="icalendar:eventfilter:garden:result_0#title"}

DateTime   garbage_Begin_wastepaper         "Altpapiersammlung Start [%1$ta, %1$td.%1$tm.%1$ty]"    {channel="icalendar:eventfilter:wastepaper:result_0#begin"}
DateTime   garbage_End_wastepaper           "Altpapiersammlung Ende [%1$ta, %1$td.%1$tm.%1$ty]"     {channel="icalendar:eventfilter:wastepaper:result_0#end"}
String     garbage_Title_wastepaper         "Altpapiersammlung Titel"    {channel="icalendar:eventfilter:wastepaper:result_0#title"}

DateTime   garbage_Begin_problem            "Problemstoff-Mobil Start [%1$ta, %1$td.%1$tm.%1$ty]"   {channel="icalendar:eventfilter:problem:result_0#begin"}
DateTime   garbage_End_problem              "Problemstoff-Mobil Ende [%1$ta, %1$td.%1$tm.%1$ty]"    {channel="icalendar:eventfilter:problem:result_0#end"}
String     garbage_Title_problem            "Problemstoff-Mobil Titel"   {channel="icalendar:eventfilter:problem:result_0#title"}

DateTime   garbage_Begin_yellow             "Gelber Sack Start [%1$ta, %1$td.%1$tm.%1$ty]"   {channel="icalendar:eventfilter:yellow:result_0#begin"}
DateTime   garbage_End_yellow               "Gelber Sack Ende [%1$ta, %1$td.%1$tm.%1$ty]"    {channel="icalendar:eventfilter:yellow:result_0#end"}
String     garbage_Title_yellow             "Gelber Sack Titel"   {channel="icalendar:eventfilter:yellow:result_0#title"}

DateTime   garbage_Begin_xmas               "Weihnachtsbaum Start [%1$ta, %1$td.%1$tm.%1$ty]"   {channel="icalendar:eventfilter:xmastree:result_0#begin"}
DateTime   garbage_End_xmas                 "Weihnachtsbaum Ende [%1$ta, %1$td.%1$tm.%1$ty]"    {channel="icalendar:eventfilter:xmastree:result_0#end"}
String     garbage_Title_xmas               "Weihnachtsbaum Titel"   {channel="icalendar:eventfilter:xmastree:result_0#title"}

DateTime   garbage_Begin_green              "Grünabfuhr Start [%1$ta, %1$td.%1$tm.%1$ty]"   {channel="icalendar:eventfilter:greenwaste:result_0#begin"}
DateTime   garbage_End_green                "Grünabfuhr Ende [%1$ta, %1$td.%1$tm.%1$ty]"    {channel="icalendar:eventfilter:greenwaste:result_0#end"}
String     garbage_Title_green              "Grünabfuhr Titel"   {channel="icalendar:eventfilter:greenwaste:result_0#title"}
Eine Regel dazu habe ich jetzt keine erstellt, aber das sollte eigentlich keine allzu grosse Hürde sein. Ich könnte mir vorstellen, dass es mit einem Cron-Trigger funktionieren sollte und die Bedingungen des Abfall-Termins mit dem Tagesdatum auf Gleichheit und ggf. Ungleichheit (Current Date + Next Date)
abgefragt könnten.

Gerade habe noch gesehen dass es wohl auch ein Switch-Item gibt.

Code: Alles auswählen

Switch     AbfallkalenderCurrentPresence   "Kalendereintrag vorhanden"   {channel="icalendar:calendar:abfallkalender:current_presence"}
Dieses könnte man evtl. auch noch als Trigger benutzen. Ich habe aber noch nicht ausprobiert, wann sich der Schalter einschaltet.

Da ich mit der "OH2-Sitemap" nicht mehr so viel mache, habe ich mich mehr auf die Darstellung in den OH3-Pages konzentriert.

Dazu habe ich im internationalen Forum ein tolles kleines Custom-Widget gefunden, dass ich noch etwas modifiziert habe. (In zwei Ausprägungen)

Custom-Widget 1:

Code: Alles auswählen

uid: garbage_calendar_v2
tags:
  - https://community.openhab.org/t/garbage-collection/114871
  - https://community.openhab.org/t/small-guide-to-icalendar/111430
props:
  parameters:
    - description: Title of the card
      label: Title
      name: title
      required: false
      type: TEXT
    - description: Background of the card e.g. linear-gradient(to top left,#B0E0E6 20%,#1E90FF 30%,#FFC0CB 60%) or green, etc, also hex and rgb
      label: Background
      name: background1
      required: false
      type: TEXT
    - description: The card footer
      label: Footer
      name: footer
      required: false
      type: TEXT
    - description: Your local translation for tomorrow
      label: Tomorrow translation
      name: tomorrow
      required: true
      type: TEXT
    - description: Your local translation for today
      label: Today translation
      name: today
      required: true
      type: TEXT
    - description: Date items
      label: Date items
      name: datearray
      required: false
      type: TEXT
  parameterGroups: []
timestamp: Jun 5, 2022, 7:04:23 PM
component: f7-card
config:
  style:
    background: '=(props.background1) ? props.background1 : "linear-gradient(to top left,#B0E0E6 20%,#1E90FF 30%,#FFC0CB 60%)"'
    background-position: down
    background-repeat: no-repeat
    background-size: cover
    border-radius: var(--f7-card-expandable-border-radius)
    font-size: medium
    height: auto
    margin: 5px
    noShadow: true
    padding: 0px
  title: =props.title
slots:
  default:
    - component: f7-card-content
      slots:
        default:
          - component: f7-list
            config:
              mediaList: true
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: listitem
                    fragment: true
                    in: =props.datearray.split("|")
                  slots:
                    default:
                      - component: oh-list-item
                        config:
                          badge: '=((dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 0 ? (props.today) : (dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 1 ? (props.tomorrow) : false)'
                          badgeColor: '=((dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 0 ? "red" : "yellow")'
                          footer: =items[loop.listitem.split("\"")[7]].displayState
                          icon: =loop.listitem.split("\"")[5]
                          iconColor: =loop.listitem.split("\"")[3]
                          title: =loop.listitem.split("\"")[1]
                          visible: '=items[loop.listitem.split("\"")[7]].state == "UNDEF" ? false : true'
    - component: f7-card-footer
      slots:
        default:
          - component: Label
            config:
              text: =props.footer
Custom-Widget 2:

Code: Alles auswählen

uid: garbage_calendar_color_v2
tags:
  - https://community.openhab.org/t/garbage-collection/114871
  - https://community.openhab.org/t/small-guide-to-icalendar/111430
props:
  parameters:
    - description: Title of the card
      label: Title
      name: title
      required: false
      type: TEXT
    - description: Background of the card e.g. linear-gradient(to top left,#B0E0E6 20%,#1E90FF 30%,#FFC0CB 60%) or green, etc, also hex and rgb
      label: Background
      name: background1
      required: false
      type: TEXT
    - description: The card footer
      label: Footer
      name: footer
      required: false
      type: TEXT
    - description: Your local translation for tomorrow
      label: Tomorrow translation
      name: tomorrow
      required: true
      type: TEXT
    - description: Your local translation for today
      label: Today translation
      name: today
      required: true
      type: TEXT
    - description: Date items
      label: Date items
      name: datearray
      required: false
      type: TEXT
  parameterGroups: []
timestamp: Jun 6, 2022, 9:23:12 PM
component: f7-card
config:
  style:
    background: '=(props.background1) ? props.background1 : "linear-gradient(to top left,#B0E0E6 20%,#1E90FF 30%,#FFC0CB 60%)"'
    background-position: down
    background-repeat: no-repeat
    background-size: cover
    border-radius: var(--f7-card-expandable-border-radius)
    font-size: medium
    height: auto
    margin: 5px
    noShadow: true
    padding: 0px
  title: =props.title
slots:
  default:
    - component: f7-card-content
      slots:
        default:
          - component: f7-list
            config:
              mediaList: true
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: listitem
                    fragment: true
                    in: =props.datearray.split("|")
                  slots:
                    default:
                      - component: oh-list-item
                        config:
                          badge: '=((dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 0 ? (props.today) : (dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 1 ? (props.tomorrow) : false)'
                          badgeColor: '=((dayjs(items[loop.listitem.split("\"")[7]].state).diff(dayjs().startOf("day"), "days")) == 0 ? "red" : "yellow")'
                          icon: =loop.listitem.split("\"")[5]
                          iconColor: =loop.listitem.split("\"")[3]
                          style:
                            color: =loop.listitem.split("\"")[3]
                            font-size: 17px
                            margin: 0px
                            padding: 0px
                          title: =items[loop.listitem.split("\"")[7]].displayState + " - " + loop.listitem.split("\"")[1]
                          visible: '=items[loop.listitem.split("\"")[7]].state == "UNDEF" ? false : true'
    - component: f7-card-footer
      slots:
        default:
          - component: Label
            config:
              text: =props.footer
              color: rgba(255,100,100, 1)
              style:
                fontSize: 18px
                color: black
Yaml-Code Custom-Widget 1:

Code: Alles auswählen

component: widget:garbage_calendar_v2
config:
  background1: linear-gradient(to top right,#6fa8dc 0%,#ffe74c 100%)
  datearray: '"Bioabfall","orange","f7:trash","garbage_Begin_bio"|"Restmüll","purple","f7:trash","garbage_Begin_waste"|"Gelber  Sack","yellow","f7:trash","garbage_Begin_yellow"|"Blaue Tonne","blue","f7:trash","garbage_Begin_paper"|"Gartentonne","teal","f7:trash","garbage_Begin_garden"|"Grünabfuhr","green","f7:car_fill","garbage_Begin_green"|"Altpapier     Verein","lightblue","f7:trash","garbage_Begin_wastepaper"|"Problemstoff-Mobil","red","f7:trash","garbage_Begin_problem"|"Weihnachtsbaum","lime","f7:trash","garbage_Begin_xmas"'
  footer: '="Nächste Leerung: " +     ((dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))     == 0 ?     "Heute : " + items.next_waste_name.state :(dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))==     1 ? "Morgen : " + items.next_waste_name.state : "In " +     (dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))     + " Tagen : " + items.next_waste_name.state)'
  title: Abfallkalender V2
  today: Heute
  tomorrow: Morgen

Yaml-Code Custom-Widget 2:

Code: Alles auswählen

component: widget:garbage_calendar_color_v2
config:
  datearray: '"Bioabfall","orange","f7:trash","garbage_Begin_bio"|"Restmüll","purple","f7:trash","garbage_Begin_waste"|"Gelber  Sack","yellow","f7:trash","garbage_Begin_yellow"|"Blaue     Tonne","blue","f7:trash","garbage_Begin_paper"|"Gartentonne","teal","f7:trash","garbage_Begin_garden"|"Grünabfuhr","green","f7:car_fill","garbage_Begin_green"|"Altpapier     Verein","lightblue","f7:trash","garbage_Begin_wastepaper"|"Problemstoff-Mobil","red","f7:trash","garbage_Begin_problem"|"Weihnachtsbaum","lime","f7:trash","garbage_Begin_xmas"'
  title: Abfallkalender Color V2
  today: Heute
  tomorrow: Morgen
  background1: radial-gradient(circle, rgba(238,86,153,1) 30%, rgba(148,187,233,1) 100%)
  footer: '="Nächste Leerung: " +     ((dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))     == 0 ?     "Heute : " + items.next_waste_name.state :(dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))==     1 ? "Morgen : " + items.next_waste_name.state : "In " +     (dayjs(items.next_waste_appointment.state).diff(dayjs().startOf("day"),"days"))     + " Tagen : " + items.next_waste_name.state)'
Die Yaml-Codes sind weitgehend gleich, bis auf die Hintergrundfarbe (background1). In dem Eingabe-Datenstring "Date items", befinden sich die Daten zu den korrespondierenden Bezeichnung, Farbe, Icon und Item, jeweils durch ein Pipe-Symbol getrennt.

Das Ergebnis sieht dann so aus:
abfall.jpg

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 12:19
von djuscha
@int5749 Danke schön hab schon selber anders gelöst .Hab einfach .ics Datei angepasst.
was ist eigentlich besser
createTimer(now.plusHours(19)) oder Abfrage per timecron ?

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 14:20
von int5749
djuscha hat geschrieben: 7. Jun 2022 12:19 was ist eigentlich besser
createTimer(now.plusHours(19)) oder Abfrage per timecron ?
Nun ja, kommt ein wenig auf die Anforderungen an ;)
Deine beiden Punkte oben sind per se schon einmal grundverschieden.

Code: Alles auswählen

createTimer(now.plusHours(19))
Erstellt einen Timer für in 19 Stunden, basierend auf der aktuellen Uhrzeit.
Natürlich kann man auch einen Timer für um 19:00 Uhr stellen, also quasi einen Wecker.
Dieser kann aber nicht wiederholend eingestellt werden, sondern muss immer neu gestellt werden.

Ein Timer wird also gestartet/gesetzt und läuft dann unabhängig von etwaiigen rules etc.
Wenn der TImer gesteuert (z.B. reschedule oder cancel) werden soll, muss es zuvor global definiert werden.

Wenn mich nicht alles täuscht, kann zudem ein Timer nur über eine DSL Rule erstellt werden.

Code: Alles auswählen

timecron
Hier wird die Regel exact to den eingestellten Zeitpunkt getriggert => fire and forget
Also z.B. jeden Tag um 19:00 Uhr oder alle 2 Tage um 19:00 Uhr etc.

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 17:30
von djuscha
Ich möchte ja nur Telegram Nachricht am Tag davor um 19 Uhr bekommen ,wenn ich Morgen Müll rausstellen muss ,mehr nicht .
Das sind meine Anforderungen was ist denn besser?

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 17:46
von int5749
djuscha hat geschrieben: 7. Jun 2022 17:30 Ich möchte ja nur Telegram Nachricht am Tag davor um 19 Uhr bekommen ,wenn ich Morgen Müll rausstellen muss ,mehr nicht .
Das sind meine Anforderungen was ist denn besser?
Ich würde eine timecron nehmen

Re: Müllkalender - Nächste Abholung

Verfasst: 7. Jun 2022 20:02
von udo1toni
Ich mag auch meinen Senf dazu geben... O:)

Punkt 1: Es gibt gar keinen so großen Unterschied zwischen Time cron und createTimer. Time cron erzeugt einen Scheduler Eintrag ebenso wie wie createTimer. Der Unterschied ist aber dass createTimer einmalige Timer erzeugt, während Time cron (so man nicht alle Werte im Ausdruck fix setzt) immer einen wiederholenden Aspekt hat, und wenn es nur einmal im Jahr ist...

Wie der Scheduler dann die Rule triggert, entzieht sich meiner Kenntnis (createTimer legt den auszuführenden Code ja direkt im Scheduler ab, Time cron führt aber die Rule selbst auf), aber der Trigger kommt so oder so vom Scheduler.

Punkt 2: Der Time cron Ansatz wird vermutlich häufiger ausgeführt werden müssen. Wenn ich die Daten über den Kalender rein bekomme, muss ich bei Time cron also z.B. täglich um 19 Uhr prüfen, ob ein Termin am nächsten Tag ansteht, den ich melden muss.
Wenn ich createTimer verwende, kann eine Rule, die auf TerminInfoItem changed triggert anschließend TerminDatumItem verwenden, um etwas in der Richtung createTimer((TerminDatumItem.state as Date).midnight.minusHours(5)) (Nur Symbolcode)) zu verwenden. Der Timer wird also auf den Zeitpunkt fünf Stunden vor Tagesbeginn des Termins gesetzt. Die Prüfung auf Art des Termins muss natürlich vorher erfolgen und der Termin muss am Vortag vor 19 Uhr eingelesen sein, aber das gilt in ähnlicher Form auch für die Time cron Variante. Es spielt dann keine Rolle, wann der Termin vorher eingelesen wird, das könnte auch fünf Tage vorher sein. Dennoch wird nur ein Eintrag im Scheduler vorgenommen.

Re: Müllkalender - Nächste Abholung

Verfasst: 8. Jun 2022 09:25
von int5749
udo1toni hat geschrieben: 7. Jun 2022 20:02 Ich mag auch meinen Senf dazu geben... O:)
Da habe ich schon darauf gewartet :lol:
udo1toni hat geschrieben: 7. Jun 2022 20:02 Punkt 1: Es gibt gar keinen so großen Unterschied zwischen Time cron und createTimer. Time cron erzeugt einen Scheduler Eintrag ebenso wie wie createTimer. Der Unterschied ist aber dass createTimer einmalige Timer erzeugt, während Time cron (so man nicht alle Werte im Ausdruck fix setzt) immer einen wiederholenden Aspekt hat, und wenn es nur einmal im Jahr ist...
Ahh, schön immer wieder etwas (für mich) neues zu lernen. Dann revidiere ich meine Aussage, dass "Time cron" besser wäre als ein "Timer" :)