Seite 14 von 15
Re: Müllkalender via openHAB
Verfasst: 10. Apr 2021 17:33
von CHUluck4
StefanH. hat geschrieben: ↑10. Apr 2021 12:11
CHUluck4 hat geschrieben: ↑8. Apr 2021 16:12
Wäre super wenn du mir die Auswertung der Telegramantwort einmal erläutern könntest.
Ich hab die glaube ich wichtigen Teile mal extrahiert:
Code: Alles auswählen
import org.openhab.core.model.script.ScriptServiceUtil
rule "telegram.rules - Telegram Reply handler"
when
Item telegramReplyId received update
then
val ReplyMessage = telegramMsg.state.toString
val ReplySender = telegramMsgName.state.toString
val ReplyId = telegramReplyId.state.toString
logInfo("telegram.rules", "Telegram Query Reply, ID=" + ReplyId + ", Value=" + ReplyMessage)
val telegramAction = getActions("telegram","telegram:telegramBot:c492a03354")
//abfall
if(ReplyId == "Abfall") {
if (ReplyMessage == "Ja")
{
ABFALL_ERINNERUNG_NOTWENDIG.sendCommand("OFF")
telegramAction.sendTelegram(Long.valueOf(telegramChat_Gruppe.label), "Ok, " + ReplySender + " ich werde keine weitere Erinnerung senden.")
logInfo("telegram.rules", "Abfallerinnerung ausgeschaltet.")
}
}
end
Danke dir... ich werde es nachher mal testen.
edit* Hat super funktioniert. Vielen Dank nochmal. Damit kann ich mir hoffentlich weitere Sachen basteln

Re: Müllkalender via openHAB
Verfasst: 11. Apr 2021 11:40
von dr_vergleich
StefanH. hat geschrieben: ↑10. Apr 2021 12:14
Schau dir mal an wie ich das umgesetzt habe. Ich lasse mich einen Tag vorher per Telegram benachrichtigen. Jede Stunde wird mir eine Nachricht geschickt, die ich per Telegram bestaetigen muss. Ansonsten sendet er mir weiterhin Erinnerungen (ich glaube bis Mitternacht).
viewtopic.php?p=28031#p28031
Stefan
Super, vielen Dank für den Hinweis. Ich habe Deine Rules verstanden. Für mich ist es wichtig, dass ich die Regeln auch verstehe. Ich möchte nicht einfach irgendeinen Code kopieren, auch wenn das Ergebnis am Ende funktioniert, ich aber das ganz nicht nachvollziehen kann.
Ich muss zugeben, dass mir die anderen Beispiele in diesem Thread für mich als Anfänger oftmals nicht nachvollziehbar sind, vorallem wenn es um das Bearbeiten / Rechnen mit Variablen und deren Umwandlungen geht.
In Deinen Regeln konnte ich nachvollziehen, wie Du das aktuelle Datum ermittelst und mit dem Datum der nächsten Leerung aus dem Müllkalender vergleichen kannst.
Danke dafür.

Re: Müllkalender via openHAB
Verfasst: 17. Apr 2021 11:11
von Lactobacillus
Habs jetzt mal geschafft den Müllkalender einzurichten auch einen Eventfilter bislang allerdings über die OH Oberfläche!
Wenn ich nun zum Beispiel als Eintragsfilter Restmüll mache erscheint 11.01.21 aber da sollte doch eigentlich ein Datum in der Zukunft erscheinen:-(
Re: Müllkalender via openHAB
Verfasst: 23. Jun 2021 08:00
von DarkOfSoul
Moin Moin,
genau das gleiche Problem habe ich auch. Konntest du das schon lösen?
Oder hat ein anderer eine Idee?
VG
DarkOfSoul
Re: Müllkalender via openHAB
Verfasst: 23. Jun 2021 08:05
von StefanH.
Bitte mehr details. am besten mit screenshots
Re: Müllkalender via openHAB
Verfasst: 23. Jun 2021 09:57
von DarkOfSoul
Okay,
Eintragsfilter angelegt mit folgenden Config:
Ergebnis-Maximum: 3
Sonnst alles auf Voreinstellung gelassen.
Habe dann die Channels mit den vorhandenen Items aus 2.5 verknüpft.
https://1drv.ms/u/s!ApC5pytcbp9HoDBVtJ49SKMhbyse
Angezeigt werden aber nur die ersten 3 Termine die ich damals in OH 2.5 eingestellt hatte.
https://1drv.ms/u/s!ApC5pytcbp9HoDFb3dMSdIPclWJ6
Rules: Hier habe ich gerade gesehen das DateTime nicht mehr funktioniert. Das müsste ich dann auch noch lösen.
Code: Alles auswählen
val telegramAction = getActions("telegram","telegram:telegramBot:290ee30de3")
rule "Müllkalender"
when
//Time cron "0 * * ? * *" //every 1 Minute
Time cron "0 0 16 * * ?" or
System started
//Item date_today changed
then
var String muelltonne_1
muelltonne_1 = CalDav_Termin.state.toString
var String muelltonne_2
muelltonne_2 = CalDav_Termin1.state.toString
// Prüfung ob der Wert gefüllt ist (damit beim cast auf DateTimeType keine Fehlermeldung erscheint)
if (muelltonne_1 != "UNDEF") {
// Datum der Abholung wird mit dem aktuellen Datum verglichen
// die erste Bedingung prüft, ob das aktuelle Datum vor dem Ablaufdatum + 24 Std. liegt
// die zweite Bedingungprüft, ob das aktuelle Datum nach dem Datum der Abholung liegt
if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).plusHours(24)) &&
now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).minusHours(16))) {
// Benachrichtigung per Telegram an Bot senden
if(CalDav_Date.state == CalDav_Date1.state) {
telegramAction.sendTelegram ("Müllkalender: " + muelltonne_1 + " & " + muelltonne_2)
logInfo("INFO","Abfall.rules - Müllkalender: " + muelltonne_1 + " & " + muelltonne_2)
} else {
telegramAction.sendTelegram ("Müllkalender: " + muelltonne_1)
logInfo("INFO","Abfall.rules - Müllkalender: " + muelltonne_1)
}
}
}
end
Sitemap:
Code: Alles auswählen
Frame label="Müllabholtermine" {
Text item=CalDav_Date label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Papiertonne] icon="papiertonne"
Text item=CalDav_Date label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Restabfall] icon="restabfall"
Text item=CalDav_Date label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Bioabfall] icon="bioabfall"
Text item=CalDav_Date label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Gelber_Sack] icon="gelber_sack"
Text item=CalDav_Date1 label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Papiertonne] icon="papiertonne"
Text item=CalDav_Date1 label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Restabfall] icon="restabfall"
Text item=CalDav_Date1 label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Bioabfall] icon="bioabfall"
Text item=CalDav_Date1 label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Gelber_Sack] icon="gelber_sack"
Text item=CalDav_Date2 label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Papiertonne] icon="papiertonne"
Text item=CalDav_Date2 label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Restabfall] icon="restabfall"
Text item=CalDav_Date2 label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Bioabfall] icon="bioabfall"
Text item=CalDav_Date2 label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Gelber_Sack] icon="gelber_sack"
}
Re: Müllkalender via openHAB
Verfasst: 23. Jun 2021 13:36
von StefanH.
achso, das ist eine eigene Entwicklung. Und stimmt, DateTime muss zwischen OH 2 und 3 angepasst werden. Schau mal meine Lösung:
Ich lasse mich einen Tag vorher per Telegram benachrichtigen. Jede Stunde wird mir eine Nachricht geschickt, die ich per Telegram bestaetigen muss. Ansonsten sendet er mir weiterhin Erinnerungen (ich glaube bis Mitternacht).
viewtopic.php?p=28031#p28031
Re: Müllkalender via openHAB
Verfasst: 24. Jun 2021 18:00
von DarkOfSoul
Danke dir, es lag an einen Tipfehler in den Items ich könnte manchmal auch mit den Kopf durch die Wand laufen.
Wie ich gerade feststellen muss funktioniert die Rule anscheinend doch nicht und zwar macht der folgende Abschnitt wohl Probleme.
Code: Alles auswählen
if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).plusHours(24)) &&
now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).minusHours(16))) {
Warum funktioniert der Code in OH3 so nicht mehr? Wie sollte der nun aussehen und bitte auch den Code erklären. Nur wenn ich es verstehe kann man es richtig anwenden.
Vielen Dank!
Re: Müllkalender via openHAB
Verfasst: 6. Jul 2021 12:47
von DarkOfSoul
Moin Moin Zusammen,
ich muss das Thema einmal nei aufgreifen. Wie bereits erwähnt funktioniert die Rule in OH3.0 nicht mehr so wie vorher in 2.5.
Ich habe bereits rausgefunden das ich das NTP-Binding brauche um eine Item mit der Datum und Zeit zu füllen. Das habe ich Installiert und auch habe ich ein Item erstellt was die aktuelle Zeit enthält.
Nun möchte ich eine Erinnerung zwischen 8 Stunden vor und 16 Stunden nach dem Termin von CalDav_Date erhalten. In CalDav_Date ist ein Datum mit 0:00 Uhr hinterlegt. Ich habe noch nicht verstanden wie ich das in OH3 umsetze. Wenn ich das habe muss ich doch nur noch prüfen ob das Item mit der aktuellen Zeit zwischen den
Ich habe mich auch schon bereits bei den Englisch sprachigen Seiten umgeschaut, leider ist mein Englisch so schlecht das ich dort überhaupt nichts verstehe.
Vielen Dank für eure Hilfe.
Re: Müllkalender via openHAB
Verfasst: 11. Sep 2021 12:56
von nw378
StefanH. hat geschrieben: ↑3. Jan 2021 20:03
hier nun meine neue Implementierung mit OH3 und dem iCalendar Binding.
....
Hoffe das hilft.
Stefan
Vielen Dank für die Vorlage.
Ich habe sie ein wenig modifiziert, zum einen weil ich eine sendBroadcastNotification wollte, zum anderen, weil ich in der Sitemap sehen will, welcher Müll in der nächsten Woche abgeholt wird, siehe Screenshot:
Code: Alles auswählen
rule "abfall.rules - Switches fuer Woche und morgen aktualisieren"
when
Time cron "0 0 5 * * ? *"
then
logInfo("abfall.rules", "Switches fuer Woche und morgen aktualisieren.")
val blau = (ABFALL_TERMIN_BLAU.state as DateTimeType).zonedDateTime
val schwarz = (ABFALL_TERMIN_SCHWARZ.state as DateTimeType).zonedDateTime
val gelb = (ABFALL_TERMIN_GELB.state as DateTimeType).zonedDateTime
val gruen = (ABFALL_TERMIN_GRUEN.state as DateTimeType).zonedDateTime
val tomorrow = now.plusDays(1);
val delta_blau = blau.dayOfYear-now.dayOfYear
val delta_schwarz = schwarz.dayOfYear-now.dayOfYear
val delta_gruen = gruen.dayOfYear-now.dayOfYear
val delta_gelb = gelb.dayOfYear-now.dayOfYear
ABFALLTONNEN_WOCHE.sendCommand("");
ABFALLTONNEN_MORGEN.sendCommand("");
var tonnen_woche = "";
var tonnen_morgen = "";
if (gruen.year == now.year && gruen.month == now.month && (delta_gruen<7))
{
ABFALL_WOCHE_GRUEN.sendCommand("ON")
tonnen_woche = tonnen_woche + "Bio "+ delta_gruen + " Tag(e) ";
postUpdate(muellfarbe,"green")
}else{
ABFALL_WOCHE_GRUEN.sendCommand("OFF")
if (blau.year == now.year && blau.month == now.month && (delta_blau<7))
{
ABFALL_WOCHE_BLAU.sendCommand("ON")
tonnen_woche = tonnen_woche + "Papier "+ delta_blau + " Tag(e)";
postUpdate(muellfarbe,"blue")
}else{
ABFALL_WOCHE_BLAU.sendCommand("OFF")
}
if (blau.year == tomorrow.year && blau.month == tomorrow.month && blau.dayOfMonth == tomorrow.dayOfMonth)
{
ABFALL_ISTMORGEN_BLAU.sendCommand("ON")
tonnen_morgen = tonnen_morgen + "Blau + ";
}else{
ABFALL_ISTMORGEN_BLAU.sendCommand("OFF")
}
if (schwarz.year == now.year && schwarz.month == now.month && (delta_schwarz<7))
{
ABFALL_WOCHE_SCHWARZ.sendCommand("ON")
tonnen_woche = tonnen_woche + "Restmüll "+ delta_schwarz + " Tag(e)";
postUpdate(muellfarbe,"black")
}else{
ABFALL_WOCHE_SCHWARZ.sendCommand("OFF")
}
if (schwarz.year == tomorrow.year && schwarz.month == tomorrow.month && schwarz.dayOfMonth == tomorrow.dayOfMonth)
{
ABFALL_ISTMORGEN_SCHWARZ.sendCommand("ON")
tonnen_morgen = tonnen_morgen + "Grau + ";
}else{
ABFALL_ISTMORGEN_SCHWARZ.sendCommand("OFF")
}
if (gelb.year == now.year && gelb.month == now.month && (delta_gelb<7))
{
ABFALL_WOCHE_GELB.sendCommand("ON")
tonnen_woche = tonnen_woche + "Gelb "+ delta_gelb + " Tag(e)";
postUpdate(muellfarbe,"yellow")
}else{
ABFALL_WOCHE_GELB.sendCommand("OFF")
}
if (gelb.year == tomorrow.year && gelb.month == tomorrow.month && gelb.dayOfMonth == tomorrow.dayOfMonth)
{
ABFALL_ISTMORGEN_GELB.sendCommand("ON")
tonnen_morgen = tonnen_morgen + "Gelb + ";
}else{
ABFALL_ISTMORGEN_GELB.sendCommand("OFF")
}
}
if (gruen.year == tomorrow.year && gruen.month == tomorrow.month && gruen.dayOfMonth == tomorrow.dayOfMonth)
{
ABFALL_ISTMORGEN_GRUEN.sendCommand("ON")
tonnen_morgen = tonnen_morgen + "Grün + ";
}else{
ABFALL_ISTMORGEN_GRUEN.sendCommand("OFF")
}
if (tonnen_woche.length > 0) {
postUpdate(ABFALLTONNEN_WOCHE,tonnen_woche);
ABFALL_WOCHE_AKTIV.sendCommand("ON");
}else{
ABFALL_WOCHE_AKTIV.sendCommand("OFF");
}
if (tonnen_morgen.length > 0) {
ABFALLTONNEN_MORGEN.sendCommand(tonnen_morgen.substring(0, tonnen_morgen.length - 3));
ABFALL_ISTMORGEN_AKTIV.sendCommand("ON");
}else{
ABFALL_ISTMORGEN_AKTIV.sendCommand("OFF");
}
end
rule "abfall.rules - Muss Abfallerinnerung gesendet werden?"
when
Time cron "0 0 18 * * ? *"
then
if (ABFALL_ISTMORGEN_SCHWARZ.state == ON || ABFALL_ISTMORGEN_BLAU.state == ON || ABFALL_ISTMORGEN_GRUEN.state == ON || ABFALL_ISTMORGEN_GELB.state == ON) {
ABFALL_ERINNERUNG_NOTWENDIG.sendCommand("ON")
sendBroadcastNotification(ABFALLTONNEN_MORGEN.state.toString() + "e Tonne für morgen schon rausgestellt?")
}
end
Code: Alles auswählen
Text item=ABFALLTONNEN_WOCHE valuecolor=[muellfarbe=="blue" ="blue", muellfarbe=="yellow" ="yellow", muellfarbe=="green" ="green", muellfarbe=="black" ="black"]