Lösung für Müllkalender
Verfasst: 8. Mai 2022 13:15
Lösung für Müllkalender
Der Umzug vonOH2 zu OH3 mit meinem Müllkalender hat mir etwas Mühe bereitet, daher hier mal die Lösung.
Ich habe über die Web UI eine Kalender Bridge zu meinem Müllkalender auf dem Synology NAS angelegt, dazu vier Eventfilter mit Textsuche nach Gelber Sack, Restabfall, Bioabfall und Sperrmüll. Jeweils ein Event, Suchzeitraum 0-21, bei Sperrmüll 90 Tage, der kommt nicht so oft.
Über einen fünften Eventfilter suche ich über 90 Tage nach dem nächsten Eintrag, hier aber mit REGEX Suche nach ^((?!(Gelber Sack|Sperrmüll|Restabfall|Bioabfall)).)*$ also alle Einträge, die nicht zu den anderen vier passen.
Dann habe ich folgende Items:
in der Sidemap:
Mit folgender rule:
Das OH Datumsformat ist nicht Java konform und hat sich zudem zu OH3 noch mal geändert.
Daher die leicht bekloppte Umrechnung für isAfter/isBefore.
So habe ich aber die Anzeige , wenn der Termin nahe rückt.
Dirk
EDIT 09.05.22 rules noch einmal editiert
Der Umzug vonOH2 zu OH3 mit meinem Müllkalender hat mir etwas Mühe bereitet, daher hier mal die Lösung.
Ich habe über die Web UI eine Kalender Bridge zu meinem Müllkalender auf dem Synology NAS angelegt, dazu vier Eventfilter mit Textsuche nach Gelber Sack, Restabfall, Bioabfall und Sperrmüll. Jeweils ein Event, Suchzeitraum 0-21, bei Sperrmüll 90 Tage, der kommt nicht so oft.
Über einen fünften Eventfilter suche ich über 90 Tage nach dem nächsten Eintrag, hier aber mit REGEX Suche nach ^((?!(Gelber Sack|Sperrmüll|Restabfall|Bioabfall)).)*$ also alle Einträge, die nicht zu den anderen vier passen.
Dann habe ich folgende Items:
Code: Alles auswählen
DateTime date_today "Heute [%1$td.%1$tm.%1$tY]" <calendar> {channel="ntp:ntp:local:dateTime"}
DateTime Tonne_ge_Date "Gelber Sack [%1$tA, %1$td.%1$tm.%1$tY]" <tgelb> {channel="icalendar:eventfilter:abfuhr:gelberSack:result_0#begin"}
Number Tonne_ge_Warn "gelber Sack Warnstufe [%d]"
DateTime Tonne_br_Date "Bioabfall [%1$tA, %1$td.%1$tm.%1$tY]" <tbraun> {channel="icalendar:eventfilter:abfuhr:biomuell:result_0#begin"}
Number Tonne_br_Warn "braune Tonne Warnstufe [%d]"
DateTime Tonne_sw_Date "Restabfall [%1$tA, %1$td.%1$tm.%1$tY]" <tgrau> {channel="icalendar:eventfilter:abfuhr:restmuell:result_0#begin"}
Number Tonne_sw_Warn "Restmüll Warnstufe [%d]"
DateTime Tonne_sp_Date "Sperrmüll [%1$tA, %1$td.%1$tm.%1$tY]" <tsperr> {channel="icalendar:eventfilter:abfuhr:sperrmuell:result_0#begin"}
Number Tonne_sp_Warn "Sperrmüll Warnstufe [%d]"
String Tonne_so_Typ "Sonderentsorgung [%s]" <tsack> {channel="icalendar:eventfilter:abfuhr:sondernuell:result_0#title"}
DateTime Tonne_so_Date "Datum [%1$tA, %1$td.%1$tm.%1$tY]" <tsack> {channel="icalendar:eventfilter:abfuhr:sondernuell:result_0#begin"}
Number Tonne_so_Warn "Sondermüll Warnstufe [%d]"
Code: Alles auswählen
Frame label="Müllkalender"
{
Text item=Tonne_sw_Date visibility=[Tonne_sw_Warn > 1 ] valuecolor=[Tonne_sw_Warn ==3="red", Tonne_sw_Warn==2="orange", Tonne_sw_Warn==1="green", Tonne_sw_Warn==0="gray"]
Text item=Tonne_ge_Date visibility=[Tonne_ge_Warn > 1 ] valuecolor=[Tonne_ge_Warn ==3="red", Tonne_ge_Warn==2="orange", Tonne_ge_Warn==1="green", Tonne_ge_Warn==0="gray"]
Text item=Tonne_br_Date visibility=[Tonne_br_Warn > 1 ] valuecolor=[Tonne_br_Warn ==3="red", Tonne_br_Warn==2="orange", Tonne_br_Warn==1="green", Tonne_br_Warn==0="gray"]
Text item=Tonne_sp_Date visibility=[Tonne_sp_Warn > 1 ] valuecolor=[Tonne_sp_Warn ==3="red", Tonne_sp_Warn==2="orange", Tonne_sp_Warn==1="green", Tonne_sp_Warn==0="gray"]
Text item=Tonne_so_Typ visibility=[Tonne_so_Warn > 1 ]
Text item=Tonne_so_Date visibility=[Tonne_so_Warn > 1 ] valuecolor=[Tonne_so_Warn ==3="red", Tonne_so_Warn==2="orange", Tonne_so_Warn==1="green", Tonne_so_Warn==0="gray"]
Text label="kommende Abfuhrtermine" icon="tcar"
{
Text item=Date label="aktuelles Datum [%1$tA, %1$td.%1$tm.%1$tY]"
Text item=Tonne_sw_Date visibility=[Tonne_sw_Warn > 0 ] valuecolor=[Tonne_sw_Warn ==3="red", Tonne_sw_Warn==2="orange", Tonne_sw_Warn==1="green", Tonne_sw_Warn==0="gray"]
Text item=Tonne_ge_Date visibility=[Tonne_ge_Warn > 0 ] valuecolor=[Tonne_ge_Warn ==3="red", Tonne_ge_Warn==2="orange", Tonne_ge_Warn==1="green", Tonne_ge_Warn==0="gray"]
Text item=Tonne_br_Date visibility=[Tonne_br_Warn > 0 ] valuecolor=[Tonne_br_Warn ==3="red", Tonne_br_Warn==2="orange", Tonne_br_Warn==1="green", Tonne_br_Warn==0="gray"]
Text item=Tonne_sp_Date visibility=[Tonne_sp_Warn > 0 ] valuecolor=[Tonne_sp_Warn ==3="red", Tonne_sp_Warn==2="orange", Tonne_sp_Warn==1="green", Tonne_sp_Warn==0="gray"]
Text item=Tonne_so_Typ visibility=[Tonne_so_Warn > 0 ]
Text item=Tonne_so_Date visibility=[Tonne_so_Warn > 0 ] valuecolor=[Tonne_so_Warn ==3="red", Tonne_so_Warn==2="orange", Tonne_so_Warn==1="green", Tonne_so_Warn==0="gray"]
//Text item=CalDav_Nxt
//Text item=CalDav_Act
}
}
Code: Alles auswählen
rule "Tonnenpruefung Datum Change"
when
//Item date_today changed or System started
Time cron "*/1 * * * * ?" // jede Sekunde
then
var debug = 1
var datstring ="2022-05-16T06:00:00.000+0200 "
var datum
if(Tonne_ge_Date.state!=UNDEF)
{
datstring = Tonne_ge_Date.state.toString // 2022-05-16T06:00:00.000+0200
datstring = datstring.substring(0,23) // 2022-05-16T06:00:00.000
datstring = datstring + "Z" // 2022-05-16T06:00:00.000Z
//var datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault())
datum = ZonedDateTime.parse(datstring).withZoneSameInstant(ZoneId.systemDefault())
}
else
{
datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault()) // irgendein Datum
}
if (debug > 0) logWarn("caldav", "Tonnenprüfung gesartet ")
if(Tonne_ge_Date.state==UNDEF)
{
Tonne_ge_Warn.postUpdate(0) // Müllart nicht gefunden
if (debug > 1) logWarn("caldav", "gelbe Tonne Datum nicht gefunden")
return
}
else if( (now.plusDays(0).isAfter(datum) ) && (now.minusDays(1).isBefore(datum)) )
{
Tonne_ge_Warn.postUpdate(3)
if (debug > 1) logWarn("caldav", "gelbe Tonne Datum Heute")
}
else if( (now.plusDays(1).isAfter(datum) ) && (now.plusDays(0).isBefore(datum)) )
{
Tonne_ge_Warn.postUpdate(2)
if (debug > 1) logWarn("caldav", "gelbe Tonne Datum morgen")
}
else
{
Tonne_ge_Warn.postUpdate(1)
if (debug > 1) logWarn("caldav", "gelbe Tonne Datum demnächst")
}
if(Tonne_sw_Date.state!=UNDEF)
{
datstring = Tonne_sw_Date.state.toString // 2022-05-16T06:00:00.000+0200
datstring = datstring.substring(0,23) // 2022-05-16T06:00:00.000
datstring = datstring + "Z" // 2022-05-16T06:00:00.000Z
//var datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault())
datum = ZonedDateTime.parse(datstring).withZoneSameInstant(ZoneId.systemDefault())
}
else
{
datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault()) // irgendein Datum
}
if(Tonne_sw_Date.state==UNDEF)
{
Tonne_sw_Warn.postUpdate(0) // Müllart nicht gefunden
if (debug > 1) logWarn("caldav", "schwarze Tonne Datum nicht gefunden")
return
}
else if( (now.plusDays(0).isAfter(datum) ) && (now.minusDays(1).isBefore(datum)) )
{
Tonne_sw_Warn.postUpdate(3)
if (debug > 1) logWarn("caldav", "schwarze Tonne Datum Heute")
}
else if( (now.plusDays(1).isAfter(datum) ) && (now.plusDays(0).isBefore(datum)) )
{
Tonne_sw_Warn.postUpdate(2)
if (debug > 1) logWarn("caldav", "schwarze Tonne Datum morgen")
}
else
{
Tonne_sw_Warn.postUpdate(1)
if (debug > 1) logWarn("caldav", "schwarze Tonne Datum demnächst")
}
if(Tonne_br_Date.state!=UNDEF)
{
datstring = Tonne_br_Date.state.toString // 2022-05-16T06:00:00.000+0200
datstring = datstring.substring(0,23) // 2022-05-16T06:00:00.000
datstring = datstring + "Z" // 2022-05-16T06:00:00.000Z
//var datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault())
datum = ZonedDateTime.parse(datstring).withZoneSameInstant(ZoneId.systemDefault())
}
else
{
datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault()) // irgendein Datum
}
if(Tonne_br_Date.state==UNDEF)
{
Tonne_br_Warn.postUpdate(0) // Müllart nicht gefunden
if (debug > 1) logWarn("caldav", "braune Tonne Datum nicht gefunden")
return
}
else if( (now.plusDays(0).isAfter(datum) ) && (now.minusDays(1).isBefore(datum)) )
{
Tonne_br_Warn.postUpdate(3)
if (debug > 1) logWarn("caldav", "braune Tonne Datum Heute")
}
else if( (now.plusDays(1).isAfter(datum) ) && (now.plusDays(0).isBefore(datum)) )
{
Tonne_br_Warn.postUpdate(2)
if (debug > 1) logWarn("caldav", "braune Tonne Datum morgen")
}
else
{
Tonne_br_Warn.postUpdate(1)
if (debug > 1) logWarn("caldav", "braune Tonne Datum demnächst")
}
if(Tonne_sp_Date.state!=UNDEF)
{
datstring = Tonne_sp_Date.state.toString // 2022-05-16T06:00:00.000+0200
datstring = datstring.substring(0,23) // 2022-05-16T06:00:00.000
datstring = datstring + "Z" // 2022-05-16T06:00:00.000Z
//var datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault())
datum = ZonedDateTime.parse(datstring).withZoneSameInstant(ZoneId.systemDefault())
}
else
{
datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault()) // irgendein Datum
}
if(Tonne_sp_Date.state==UNDEF)
{
Tonne_sp_Warn.postUpdate(0) // Müllart nicht gefunden
if (debug > 1) logWarn("caldav", "Sperrmüll Datum nicht gefunden")
return
}
else if( (now.plusDays(0).isAfter(datum) ) && (now.minusDays(1).isBefore(datum)) )
{
Tonne_sp_Warn.postUpdate(3)
if (debug > 1) logWarn("caldav", "Sperrmüll Datum Heute")
}
else if( (now.plusDays(1).isAfter(datum) ) && (now.plusDays(0).isBefore(datum)) )
{
Tonne_sp_Warn.postUpdate(2)
if (debug > 1) logWarn("caldav", "Sperrmüll Datum morgen")
}
else
{
Tonne_sp_Warn.postUpdate(1)
if (debug > 1) logWarn("caldav", "Sperrmüll Datum demnächst")
}
if(Tonne_so_Date.state!=UNDEF)
{
datstring = Tonne_so_Date.state.toString // 2022-05-16T06:00:00.000+0200
datstring = datstring.substring(0,23) // 2022-05-16T06:00:00.000
datstring = datstring + "Z" // 2022-05-16T06:00:00.000Z
//var datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault())
datum = ZonedDateTime.parse(datstring).withZoneSameInstant(ZoneId.systemDefault())
}
else
{
datum = ZonedDateTime.parse("2020-12-25T00:00:00.000Z").withZoneSameInstant(ZoneId.systemDefault()) // irgendein Datum
}
if(Tonne_so_Date.state==UNDEF)
{
Tonne_so_Warn.postUpdate(0) // Müllart nicht gefunden
if (debug > 1) logWarn("caldav", "Sondermüll Datum nicht gefunden")
return
}
else if( (now.plusDays(0).isAfter(datum) ) && (now.minusDays(1).isBefore(datum)) )
{
Tonne_so_Warn.postUpdate(3)
if (debug > 1) logWarn("caldav", "Sondermüll Datum Heute")
}
else if( (now.plusDays(1).isAfter(datum) ) && (now.plusDays(0).isBefore(datum)) )
{
Tonne_so_Warn.postUpdate(2)
if (debug > 1) logWarn("caldav", "Sondermüll Datum morgen")
}
else
{
Tonne_so_Warn.postUpdate(1)
if (debug > 1) logWarn("caldav", "Sondermüll Datum demnächst")
}
end
Daher die leicht bekloppte Umrechnung für isAfter/isBefore.
So habe ich aber die Anzeige , wenn der Termin nahe rückt.
Dirk
EDIT 09.05.22 rules noch einmal editiert