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).
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.
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
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).
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.
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.
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: