Dynamische Cron möglich?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Dynamische Cron möglich?

Beitrag von shuo »

Hallo zusammen,
ich habe eine Regel, die alle 10 Min aufgerufen wird:

Code: Alles auswählen


when
   	Time cron "0 0/10 * * * ?" 
then
	// do stuff
Jetzt hätte ich gerne, dass wenn ein bestimmtes Item stein status ändert, diese Regel nicht mal alle 10 Minuten sondern alle 2 Minuten aufgerufen wird. Hat jemand eine Idee wie ich das realisieren könnte?

Viele Grüße und Danke vorab

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Dynamische Cron möglich?

Beitrag von EmptySoft »

Den Cron alle 2 Minuten aufrufen und über den Itemstatus switchen, ob die Rule jedes Mal oder nur jedes 5. Mal durchlauft
BYe
Harald

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Dynamische Cron möglich?

Beitrag von udo1toni »

Ich frage mal andersrum: Warum?
Grundsätzlich ist openHAB ein ereignisgesteuertes System. Bei zyklischen Rules gibt es oftmals effizientere Wege. Z.B. könntest Du einen gewöhnlichen Timer mit Reschedule verwenden, beim Reschedule kann man dann die Zeit anpassen. Aber wie erwähnt kommt es auf die Funktion an...

Gesendet von meinem SM-G973F mit Tapatalk

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Dynamische Cron möglich?

Beitrag von shuo »

EmptySoft hat geschrieben: 6. Jun 2020 19:43 Ich frage mal andersrum: Warum?
Grundsätzlich ist openHAB ein ereignisgesteuertes System. Bei zyklischen Rules gibt es oftmals effizientere Wege. Z.B. könntest Du einen gewöhnlichen Timer mit Reschedule verwenden, beim Reschedule kann man dann die Zeit anpassen. Aber wie erwähnt kommt es auf die Funktion an...
Hintergrund ist folgender: Ich habe meinen Zoe in Openhab eingebunden und wenn der Zoe steht, dann frage ich alle 10 Min die aktuellen Serverwerte ab. Es werden die Updates des Batteriezustandes etc. nicht regelmäßig zu bestimmten Uhrzeiten geschickt. Daher hatte ich mal so aus dem Bauch heraus 10 Min eingestellt. Wenn der Zoe allerdings geladen wird, dann geht das auch minütlich. Dadurch bekomme ich detaillierte Infos über das Ladeverhalten.
EmptySoft hat geschrieben: 6. Jun 2020 19:43 Den Cron alle 2 Minuten aufrufen und über den Itemstatus switchen, ob die Rule jedes Mal oder nur jedes 5. Mal durchlauft
Das wäre ein smarter Weg und leuchtet mir auch ein...Ich wollte halt die Last so gering wie möglich halten.

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Dynamische Cron möglich?

Beitrag von KellerK1nd »

Warum triggerest du nicht auf Änderung/Update Akkuzustand? Dann arbeitet die Regel auch wirklich nur, wenn auch Werte sich ändern/updaten.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Dynamische Cron möglich?

Beitrag von EmptySoft »

KellerK1nd hat geschrieben: 7. Jun 2020 16:27 Warum triggerest du nicht auf Änderung/Update Akkuzustand? Dann arbeitet die Regel auch wirklich nur, wenn auch Werte sich ändern/updaten.
und dann hast Du auch alle Werte :D
BYe
Harald

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Dynamische Cron möglich?

Beitrag von shuo »

KellerK1nd hat geschrieben: 7. Jun 2020 16:27 Warum triggerest du nicht auf Änderung/Update Akkuzustand? Dann arbeitet die Regel auch wirklich nur, wenn auch Werte sich ändern/updaten.
Das geht leider nicht. Um den Wert überhaupt zu bekommen, muss ich ein python script laufen lassen, der den Wert erst holt....

Um das im pseudo code zu veranschaulichen:

Code: Alles auswählen

	when
		alle 10 min
	then
		führe python skript aus und aktualisiere alle Items via REST
	end	
Wenn ich nun auf das aktualisieren des Akkuzustandes warten würde, dann würde dieser sich nie verändern. Da das Skript nicht ausgeführt wird.

Habe es jetzt so gelöst wie EmptySoft es vorgeschlagen hatte:

Code: Alles auswählen

zähler i=0
	when
	   	Time cron "0 0/2 * * * ?" 
	then
		wenn ( charging.state == "charging" )
			führe das skript aus und aktualisiere 
			i=0
		wenn (i>=6)
			führe das skript aus und aktualisiere 
			i=0
	i ++
Blöd ist halt, das der Status "charging" erst dann gesetzt wird wenn ich die 10 Min erreicht habe. Das heißt ist habe im Worst-Case 10 Min charging-status ohne das Item refreshed zu haben. Wenn der Ladevorgang abgeschlossen ist, stört es mir nicht so sehr, da ich dann halt das Skript für 10 min alle 2 Min aufrufe....

Ideen wie ich das noch cleverer lösen könnte um den Versatz zu minimieren?

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Dynamische Cron möglich?

Beitrag von Tokamak »

Du schreibst, dass durch das Python-Script die Items aktualisiert werden.

Was spricht denn dagegen, das Python-Script viel häufiger laufen zu lassen, etwa minütlich? Das ändert dann das Item, in der der aktuelle Ladestrom drinsteht.
Auf dieses Item kannst du dann mit "Item ... changed" triggern und alles notwendige tun.

So mache ich das bei unserer PV-Anlage, wo ich minütlich via REST die aktuelle Leistung und die erzeugten kWh abhole. Allerdings starte ich zum Sonnenaufgang einen Timer, der das minütlich macht und der bei Sonnenuntergang gecancelt wird, um den Cron-Job zu sparen.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Dynamische Cron möglich?

Beitrag von EmptySoft »

Ich habe einen SolMate (genau das Gegenteil von Deiner ZOE eine Photovoltaikanlage mit Accu) die ich über eine REST API abfrage. Den frage ich im 5 Sekunden Takt ab, wenn sich die Werte ändern, pusche ich sie per MQTT an OpenHab und speichere im PythonScript die alten Werte um sie nach 5 Sekunden wieder mit den neu geholten Werten zu vergleichen. Besser kann ich es nicht (habe mir den ganzen IT-Kram selber beigebracht) Das Script verbraucht vernachlässigbare CPU Load
BYe
Harald

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Dynamische Cron möglich?

Beitrag von Tokamak »

OH ist ereignisgesteuert. Am einfachsten nachvollziehbar sind die Ereignisse "Item hat den Wert geändert" oder "Item hat ein Kommando empfangen".

Die betreffenden when-Statements lesen sich dann fast wie ein Aufsatz, und man kann sofort sehen, worum sich eine Rule kümmert, ganz im Gegensatz zu Time cron-Rules.

Um also ein externes System, für das es in OH kein Binding gibt, das aber zum Beispiel ein REST-Schnittstelle hat, anzubinden, schreibt man etwa ein Python-Script, das regelmäßig die benötigten Daten aus dem System holt und in Items schreibt. Mehr machen Bindings im Grunde genommen beim Lesen von Systemdaten auch nicht.

Alles andere, auch Vergleiche, ob sich der Wert eines Items geändert hat, sollten dann in einer Rule gemacht werden.

Dann verhalten sich alle Systeme, ob sie nun über ein Binding oder selbst angebunden sind, Rule-seitig gleichartig.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Antworten