Müllkalender - Nächste Abholung
- peter-pan
- Beiträge: 2564
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Müllkalender - Nächste Abholung
...jetzt hätt ich auch noch eine Frage !!. Was passiert bei einem Stromausfall mit dem Timer ? Wenn ich das richtig verstanden habe, wir der Timer ja am Vortag (~0 Uhr) berechnet und dann gesetzt. Läuft der dann nach dem Ausfall weiter oder ist der dann weg ?
Der Cron müsste doch wieder da sein, oder ?
Der Cron müsste doch wieder da sein, oder ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian
- udo1toni
- Beiträge: 13860
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Müllkalender - Nächste Abholung
Ein Stromausfall führt zu einem Ausfall des openHAB Systems.
Wenn der Strom wieder da ist, startet auch openHAB neu. Wenn dies vor 19 Uhr des Vortages eines Termins passiert, wird beim initialisieren des Systems der nächste Termin erkannt und das entsprechende Item wird geändert. Die Änderung des Itemstatus führt zum Ausführen der Rule, nicht ein Time cron Trigger. Nun prüft die Rule, ob es sich um ein Ereignis handelt, welches gemeldet werden muss und setzt den Timer anhand des hinterlegten Datums.
Ich sehe jetzt nicht, warum das nicht funktionieren sollte.
Wenn der Strom wieder da ist, startet auch openHAB neu. Wenn dies vor 19 Uhr des Vortages eines Termins passiert, wird beim initialisieren des Systems der nächste Termin erkannt und das entsprechende Item wird geändert. Die Änderung des Itemstatus führt zum Ausführen der Rule, nicht ein Time cron Trigger. Nun prüft die Rule, ob es sich um ein Ereignis handelt, welches gemeldet werden muss und setzt den Timer anhand des hinterlegten Datums.
Ich sehe jetzt nicht, warum das nicht funktionieren sollte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- peter-pan
- Beiträge: 2564
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Müllkalender - Nächste Abholung
Dann ist das ja genau anders herum. Timer geht, Cron nicht ..Mein "verqueres Denken" . Danke das du mich da auf den richtigen Pfad gesetzt hast. Hoffentlich weiss ich das beim nächsten Mal noch. Der alte Mann wird halt immer vergesslicher. Aber auf deine Hilfe kann man ja immer zählen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian
- udo1toni
- Beiträge: 13860
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Müllkalender - Nächste Abholung
Nein, Time cron wird auch funktionieren, solange zum Zeitpunkt des Time cron Event auch das richtige im Kalenderevent drin steht. Ob ich nun um 19 Uhr prüfe, ob morgen Müll abgeholt wird, oder, wenn der Kalender sagt "es gibt ein neues Event" nachschaue, ob es sich um Müll handelt, und anschließend den verknüpften Zeitstempel nutze, um mir einen Wecker zu programmieren, sollte erst mal egal sein.
Es ist ja auch nicht so, dass es furchtbar verschwenderisch ist, einmal am Tag zu prüfen, ob es etwas für den nächsten Tag gibt. Mir ging es eher darum, dass man beide Varianten betreiben kann und keine der beiden Varianten zwangsläufig unter bestimmten Umständen nicht funktioniert.
Es ist ja auch nicht so, dass es furchtbar verschwenderisch ist, einmal am Tag zu prüfen, ob es etwas für den nächsten Tag gibt. Mir ging es eher darum, dass man beide Varianten betreiben kann und keine der beiden Varianten zwangsläufig unter bestimmten Umständen nicht funktioniert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 26. Sep 2021 17:12
Re: Müllkalender - Nächste Abholung
Hallo Udo1Toni!udo1toni hat geschrieben: ↑7. Jun 2022 20:02 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.
Ich weiß, dein Post ist schon älter... aber ich habe hier ein Problem mit den Datumsformaten und komme einfach nicht weiter.
Vielleicht hast du mir ja einen Tipp, scheinst ziemlich fit mit OpenHab zu sein!
timer_Muell = createTimer((Kalender_Muell_1_Beginn.state as Date).midnight.minusHours(4), [|
timer_Muell = null
// Mach irgendwas
])
Das Item "Kalender_Muell_1_Beginn.state" ist vom Typ DateTime.
Ich bekomme hier die Fehlermeldung:
"Date cannot be resolved to a type."
Ich habe heute Nachmittag nun schon einige Zeit investiert, komme aber nicht dahinter
Vielen Dank für Deine Hilfe!
Markus
-
- Beiträge: 59
- Registriert: 24. Jun 2022 08:16
- Wohnort: Bielefeld
- Kontaktdaten:
Re: Müllkalender - Nächste Abholung
Interessanter Thread und da werde ich hellhörig. Ich versuche gerade mit müll.io die Schnittstelle zu vereinheitlichen. Wer es mal ausprobieren will, habe auch eine openHAB Anleitung: https://müll.io/integration/openhab Nehme auch gerne Feedback und auch weitere Versorger auf.
Beste Grüße,
Tim
Beste Grüße,
Tim
Meine openHAB Erfahrungen bei mir im Blog: https://360friends.de/tag/openhab/
- udo1toni
- Beiträge: 13860
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Müllkalender - Nächste Abholung
Geht so
Ja, das ist korrekt. Es gibt keinen Datentyp Date (oder zumindest nicht so). Wenn Du ein DateTime Item hast, dann wird der Status dieses Items vom Typ DateTimeType sein. Also wäre es wenn, dannjoe73 hat geschrieben: ↑3. Feb 2023 15:23Das Item "Kalender_Muell_1_Beginn.state" ist vom Typ DateTime.Code: Alles auswählen
timer_Muell = createTimer((Kalender_Muell_1_Beginn.state as Date).midnight.minusHours(4), [| timer_Muell = null // Mach irgendwas ])
Ich bekomme hier die Fehlermeldung:
"Date cannot be resolved to a type."
Code: Alles auswählen
Kalender_Muell_1_Beginn.state as DateTimeType
DateTimeType kennt kein .midnight, genausowenig wie DateTime (oder auch jedes beliebige andere Datumsmodell in openHAB und Umgebung)
Selbst die Methode .minusHours() gibt es nicht bei DateTimeType.
Du möchtest einen Timer, der um 20 Uhr des Vortags des Termins auslöst. Dazu musst Du zunächst aus dem DateTimeType ein DateTime Objekt machen:
Code: Alles auswählen
val MyJavaTimeFromDateTimeItem = (Kalender_Muell_1_Beginn.state as DateTimeType).getZonedDateTime()
Code: Alles auswählen
.with(LocalTime.MIDNIGHT)
Zusammen ergibt sich also dieser Bandwurm:
Code: Alles auswählen
val myAlarm = (Kalender_Muell_1_Beginn.state as DateTimeType).getZonedDateTime.with(LocalTime.MIDNIGHT).minusHours(4)
timer_Muell = createTimer(myAlarm, [|
// mach was
])
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 26. Sep 2021 17:12
Re: Müllkalender - Nächste Abholung
Hallo zusammen!
@udo1toni:
War das WE unterwegs, habe das Ganze aber gestern abend noch ausprobiert... und was soll ich sagen?
Hat wunderbar und auf Anhieb geklappt! Vielen Dank an dieser Stelle für die schnelle Hilfe (wieder mal)!!
Hast du zufällig einen Link um sich in das Thema Date/Time reinzufuchsen? Ich habe schon vieles gefunden, aber meist ist das Level dann schon etwas gehobener und/oder nicht auf DSL-Ebene.
Grüße
Markus
@udo1toni:
War das WE unterwegs, habe das Ganze aber gestern abend noch ausprobiert... und was soll ich sagen?
Hat wunderbar und auf Anhieb geklappt! Vielen Dank an dieser Stelle für die schnelle Hilfe (wieder mal)!!
Hast du zufällig einen Link um sich in das Thema Date/Time reinzufuchsen? Ich habe schon vieles gefunden, aber meist ist das Level dann schon etwas gehobener und/oder nicht auf DSL-Ebene.
Grüße
Markus
- udo1toni
- Beiträge: 13860
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Müllkalender - Nächste Abholung
Ja, Datetime ist schon die fortgeschrittene Fortgeschrittenenklasse
Es gibt im englischen Forum eine super Übersicht, die hilft, zu verstehen, wie man wann von wo nach wo kommt: https://community.openhab.org/t/datetim ... 3-x/107197
Es gibt im englischen Forum eine super Übersicht, die hilft, zu verstehen, wie man wann von wo nach wo kommt: https://community.openhab.org/t/datetim ... 3-x/107197
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 26. Sep 2021 17:12
Re: Müllkalender - Nächste Abholung
Das habe ich gemerkt
Aber mit deiner Hilfe funktioniert es jetzt ja! Allerdings habe ich jetzt noch kleine Frage zum erstellen Timer.... der lautet je jetzt:
"Kalender_Muell_1_Name" ist ein String-Item... sobald ich die Zeile mit "message =" nicht mehr auskommentiere, bekomme ich den folgenden Wust an Fehlermeldungen im Log, sobald der Timer auslöst:
Solange "message" nur einen Testtext enthält, funktioniert das Benachrichtigen per Kodi und auch per Telegram ohne Fehler und Probleme.
Es scheint, ich könnte auf ""Kalender_Muell_1_Name" nicht innerhalb des Timers zugreifen... Kann das sein? Und wie kann ich das umgehen?
Gruß
Markus
Aber mit deiner Hilfe funktioniert es jetzt ja! Allerdings habe ich jetzt noch kleine Frage zum erstellen Timer.... der lautet je jetzt:
Code: Alles auswählen
timer_Muell?.cancel
val myAlarm = (Kalender_Muell_1_Beginn.state as DateTimeType).getZonedDateTime.with(LocalTime.MIDNIGHT).minusHours(4)
timer_Muell = createTimer(myAlarm, [|
timer_Muell = null
var String message
message = "Test"
// message = "Kalender: " + Kalender_Muell_1_Name.state + " schon an die Straße gestellt?"
if (KodiOnline.state==ON) { Kodi_Muell_Notification.sendCommand(message) }
telegramAction_Warn.sendTelegram(message)
])
Code: Alles auswählen
2023-02-06 20:00:00.002 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job '<unknown>' failed and stopped
java.lang.IllegalStateException: Cannot resolve proxy: calendar.rules#/1
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:109) ~[?:?]
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getField(JavaReflectAccess.java:58) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1354) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:211) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1327) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1319) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
at com.sun.proxy.$Proxy405.apply(Unknown Source) ~[?:?]
at org.openhab.core.model.script.actions.ScriptExecution.lambda$0(ScriptExecution.java:97) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:191) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:88) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
2023-02-06 20:00:00.027 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job '<unknown>' failed and stopped
java.lang.IllegalStateException: Cannot resolve proxy: calendar.rules#/1
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:109) ~[?:?]
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getField(JavaReflectAccess.java:58) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1354) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:211) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1327) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1319) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
at com.sun.proxy.$Proxy405.apply(Unknown Source) ~[?:?]
at org.openhab.core.model.script.actions.ScriptExecution.lambda$0(ScriptExecution.java:97) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:191) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:88) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Solange "message" nur einen Testtext enthält, funktioniert das Benachrichtigen per Kodi und auch per Telegram ohne Fehler und Probleme.
Es scheint, ich könnte auf ""Kalender_Muell_1_Name" nicht innerhalb des Timers zugreifen... Kann das sein? Und wie kann ich das umgehen?
Gruß
Markus