Seite 1 von 4

Müllkalender - Nächste Abholung

Verfasst: 28. Sep 2021 11:59
von DavGre
Hallo,

ich habe die folgenden Items:

Code: Alles auswählen

DateTime	Abfall_Termin_Bio		"Biotonne"
DateTime	Abfall_Termin_Papier	"Papiertonne"

... und so weiter
Darüber lasse ich mir das Abholdatum der jeweiligen Mülltonnen anzeigen. Klappt soweit auch alles wunderbar.
Jetzt würde ich gerne ein weiteres Item ("Nächste Abholung"), dass mir in der Sitemap anzeigt, was für eine Tonne als nächstes abgeholt wird.
Das sollte ja über ein ganz normales String-Item möglich sein. Nur habe ich keinen blassen Schimmer, wie ich das Beschreiben des String-Items in einer Regel formulieren soll.

Im Prinzip benötige ich ja nur eine Regel, die um Mitternacht die verschiedenen DateTime-Items (Biotonne, Papiertonne etc.) auswertet und das String-Item mit dem entsprechenden Wert beschreibt, der dem aktuellen Datum am nächsten ist.

Code: Alles auswählen

rule "Nächste Abholung"
when
	Time cron "0 0 0 1/1 * ? *"
then 
	... ??? ...
end

Kann mir jemand auf die Sprünge helfen?

Re: Müllkalender - Nächste Abholung

Verfasst: 28. Sep 2021 14:21
von int5749
DavGre hat geschrieben: 28. Sep 2021 11:59 Kann mir jemand auf die Sprünge helfen?
Ich kann Dir zumindest kurz schreiben, wie ich die gelöst habe. Wobei ich nur die Tage auswerte wann was abgeholt wird und dies wird dann angezeigt.
Um dies auf Deine beiden Müllarten zu beschränken, musst Du dies evtl. etwas anpassen

Abfallkalender heute

Code: Alles auswählen

rule "Abfallkalender heute"
when
   Item ABFALL_ICAL_heute changed
then
   //Prüfen ob heute Abfall abgeholt wird
	if (ABFALL_ICAL_heute.state != "false" && ABFALL_ICAL_heute.state != "Uninitialized"){
      postUpdate(ABFALL_AKTIV_heute,ON)
      postUpdate(ABFALL_NAME_heute,ABFALL_ICAL_heute.state)
   } else {
      postUpdate(ABFALL_AKTIV_heute,OFF)
      postUpdate(ABFALL_NAME_heute,"false")
   }
end
Abfallkalender morgen

Code: Alles auswählen

rule "Abfallkalender morgen"
when
   Item ABFALL_ICAL_morgen changed
then
   //Prüfen ob morgen Abfall abgeholt wird
	if (ABFALL_ICAL_morgen.state != "false" && ABFALL_ICAL_morgen.state != "Uninitialized"){
      postUpdate(ABFALL_AKTIV_morgen,ON)
      postUpdate(ABFALL_NAME_morgen,ABFALL_ICAL_morgen.state)
   } else {
      postUpdate(ABFALL_AKTIV_morgen,OFF)
      postUpdate(ABFALL_NAME_morgen,"false")
   }
end
Dann lasse ich mich noch entsprechend erinnern, einmal am Vorabend und Morgens noch einmal

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){
ABFALL_NAME_heute.state)
		actions.sendMessageToDevice("iPhone", "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){
ABFALL_NAME_morgen.state)
		actions.sendMessageToDevice("iPhone", "Morgen den " + ABFALL_NAME_morgen.state + " rausstellen.", "Notification")
	}
end
Meine Items

Code: Alles auswählen

//Abfallkalender
// Nächste Abholung
String ABF1_NAME			"Nächste Abholung [%s]"					(gWasteCollection)	["Point"]	{channel="http:url:abfallkalender:cABF1_NAME"}
DateTime ABF1_DATE			"Termin: [%1$ta, %1$td.%1$tm.%1$ty]"	(gWasteCollection)	["Point", "Timestamp"]	{channel="http:url:abfallkalender:cABF1_DATE"}

//Abfall heute
String ABFALL_ICAL_heute	{channel="http:url:abfallkalender:cABFALL_ICAL_heute"}
Switch ABFALL_AKTIV_heute
String ABFALL_NAME_heute

//Abfall morgen
String ABFALL_ICAL_morgen	{channel="http:url:abfallkalender:cABFALL_ICAL_morgen"}
Switch ABFALL_AKTIV_morgen
String ABFALL_NAME_morgen
Das Thing, den ics link bekommst Du in der Regel auf der Umwelt Webmedia oder einer Seite Deiner Stadt.

Code: Alles auswählen

/* HTTP Binding */
Bridge http:url:abfallkalender "Abfallkalender" @ "Internet" [
	baseURL="https://www.umwelt-webmedia.de/caldownload/f8d00c76fegegegeerherhrhrh59.ics",
	refresh=360,
	ignoreSSLErrors=false,
	commandMethod="GET",
	timeout=3000,
	bufferSize=2048
	] {
		Channels:
			Type string : cABF1_NAME				"Nächste Abholung"			[ stateTransformation="JS:abfall_naechste_abholung_name.js", mode="READONLY"]
			Type datetime : cABF1_DATE			"Datum nächste Abholung"	[ stateTransformation="JS:abfall_naechste_abholung_datum.js", mode="READONLY"]
			Type string : cABFALL_ICAL_heute		"Abholung heute"			[ stateTransformation="JS:abfall_heute.js", mode="READONLY"]
			Type string : cABFALL_ICAL_morgen	"Abholung morgen"			[ stateTransformation="JS:abfall_morgen.js", mode="READONLY"]
		}
Und die notwendigen Transform Files =>
transform.zip

Re: Müllkalender - Nächste Abholung

Verfasst: 8. Feb 2022 17:52
von magarethe
Hallo Leute,

Ich möchte jetzt auch keinen neuen Müllkalender Eintrag aufmachen. Aber der iCal Kalender unter Oh2.5 lief ja hervorragend. Also es wurde ja angezeigt wann der nächste Abholtermin war und welche Tonnen abgeholt wurden. Alles aus einer ics Datei!

Jetzt nach dem Update auf OH3 kriege ich gar kein Abfallkalender mehr hin. Hat jemand schon einen Abfallkalender unter OH3 realisiert, der wieder auf ein ics basiert, und dann die Termine anzeigt und mit welche Art Tonnen abholt. Bei mir hier z.Bsp: Restabfalltonne, Wertstofftonne und Umweltmobil

Ich kriege es einfach nicht gebacken.

Grüße Magarethe

Re: Müllkalender - Nächste Abholung

Verfasst: 2. Jun 2022 20:50
von maffi91
Hi,

auch wenn der Beitrag schon ein paar Tage alt ist, hier habe ich eine Lösung:

iCalendar-Binding installieren und dann eine things Datei erstellen mit:

Code: Alles auswählen

Bridge icalendar:calendar:abfallkalender    "Abfallkalender" @ "RPI4" [ url="http://xx:8080/static/Leerungstermine580443.ics", refreshTime=360 ]
Thing  icalendar:eventfilter:ma202205ab "Abfall morgen" (icalendar:calendar:abfallkalender) [ maxEvents=1, datetimeUnit="DAY", datetimeStart=1, datetimeEnd=2, datetimeRound=true ]
Die items erstellen:

Code: Alles auswählen

String   ABFALL_heute_name        "Abholung heute: [%s]"                       <calendar> { channel="icalendar:calendar:abfallkalender:current_title" }
String   ABFALL_alsnaechstes_name           "Abholung als naechstes [%s]"                          <calendar> { channel="icalendar:calendar:abfallkalender:next_title" }
DateTime ABFALL_alsnaechstes_datum             "Abholung am [%1$tT, %1$tY-%1$tm-%1$td]"       <calendar> { channel="icalendar:calendar:ma202205ab:next_start" }
String   ABFALL_morgen_name              "Abholung morgen: [%s]"                         <calendar> { channel="icalendar:eventfilter:ma202205ab:result_0#title" }
und die Rules:

Code: Alles auswählen

rule "Abfallkalender"
when
    Item ABFALL_morgen_name changed
then
    if (ABFALL_morgen_name.state != UNDEF) {
        sendNotification("xx@xx.de", "Morgen wird folgender Müll abgeholt: " + ABFALL_morgen_name.state)
    }
end
Wenn fragen sind, einfach fragen .. ;)

Hab das hier auch auf meinem Blog publiziert:
https://www.maffert.net/openhab-3-abfal ... nd-morgen/

Re: Müllkalender - Nächste Abholung

Verfasst: 3. Jun 2022 16:41
von djuscha
@maffi91 Wo speicherst du den geladenen Kalender ab?

Re: Müllkalender - Nächste Abholung

Verfasst: 3. Jun 2022 23:52
von maffi91
Hi,

habe mir die Datei direkt auf meiner openHAB Installation gelegt, unter dem Ordner: /etc/openhab/html

Dort kann man dann wie folgt die Datei abrufen: http://IPoderHOSTNAME:8080/static/Leeru ... 609848.ics

Kannst die Datei aber auch auf jeden anderen Webspace hochladen, nur so bleibt alles im Haus ;)

Re: Müllkalender - Nächste Abholung

Verfasst: 4. Jun 2022 12:45
von udo1toni
Der Punkt ist hier, das Binding liest ja nur eine *.ics Datei. Es ist also vollkommen unabhängig von einem "echten" Kalender. Natürlich muss man die *.ics Datei auch irgendwie füllen, aber gerade bei importierten Kalendern wie z.B. Müllabfuhr hat man ja ohnehin eine *.ics Datei.

Sehr elegant!

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 12:54
von djuscha
@maffi91 und die Nachricht kommt dann um 12 uhr Nachts ?

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 13:13
von int5749
djuscha hat geschrieben: 6. Jun 2022 12:54 @maffi91 und die Nachricht kommt dann um 12 uhr Nachts ?
In diesem Fall eben wenn das Item ABFALL_morgen_name sich ändert und dies wird alle 360 Min abgefragt.

Aber Du kannst natürlich auch eine timecron Abfrage machen und Dich entsprechend erinnern lassen.

Re: Müllkalender - Nächste Abholung

Verfasst: 6. Jun 2022 14:38
von maffi91
Genau, hab einfach einen Timer erstellt der uns dann um 11 Uhr jeweils erinnert ;)

createTimer(now.plusHours(11)) [|
sendNotification("E-MailAdresse", "Morgen wird folgender Müll abgeholt: " + ABFALL_morgen_name.state)
]