Pause in einer Regel
- scotty
- Beiträge: 676
- Registriert: 28. Apr 2020 04:44
Pause in einer Regel
Hallo,
um eine kurze Pause in einer Rule einzubauen möchte ich den Befehl time.sleep(x) verwenden.
1.) reicht der Befehl allein aus, oder muss vorher ein Timer definiert werden,
2.) kann ich auch time.sleep(0.5) oder time.sleep(1.5) verwenden?
Danke im Voraus.
um eine kurze Pause in einer Rule einzubauen möchte ich den Befehl time.sleep(x) verwenden.
1.) reicht der Befehl allein aus, oder muss vorher ein Timer definiert werden,
2.) kann ich auch time.sleep(0.5) oder time.sleep(1.5) verwenden?
Danke im Voraus.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's
-
- Beiträge: 13
- Registriert: 3. Jan 2021 19:08
Re: Pause in einer Regel
Hallo Scotty,
soviel ich weiss, ist die Zeitangabe bei time.sleep in Millisekunden. Also im ersten fall time.sleep(500) und im zweiten Fall time.sleep(1500).
Viele Grüße
Ulrich
soviel ich weiss, ist die Zeitangabe bei time.sleep in Millisekunden. Also im ersten fall time.sleep(500) und im zweiten Fall time.sleep(1500).
Viele Grüße
Ulrich
- scotty
- Beiträge: 676
- Registriert: 28. Apr 2020 04:44
Re: Pause in einer Regel
Hallo ULrich aus O,
vielen Dank für deine Hilfe. Damit ist mein Post allerdings noch nicht komplett beantwortet. Ich vermute mal, dass ich zur ersten Frage die Antwort gleich mitgeliefert habe. Vielleicht erhalte ich darauf ja noch eine Antwort.
Viele Grüße
vielen Dank für deine Hilfe. Damit ist mein Post allerdings noch nicht komplett beantwortet. Ich vermute mal, dass ich zur ersten Frage die Antwort gleich mitgeliefert habe. Vielleicht erhalte ich darauf ja noch eine Antwort.
Viele Grüße
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Pause in einer Regel
Unter openHAB1 und openHAB2 war es problematisch, längere Pausen mit Thread::sleep() einzubauen, weil die Anzahl der Threads für Rules auf 5 + 2 begrenzt war (mit den Standardeinstellungen). Und eine Rule konnte beliebig oft gleichzeitig ausgeführt werden. Damit konnte eine einzige Rule potenziell das gesamte System zum Stillstand bringen, wenn nur die Rule lang genug lief.
Unter openHAB3 startet jede Rule nur einmal "gleichzeitig". Außerdem hat jede Rule einen Thread exklusiv für sich. Rules können also andere Rules nicht mehr ausbremsen oder gar die Ausführung von Rules verhindern.
Insofern ist es auch nicht mehr problematisch, die Ausführung einer Rule "anzuhalten". time.sleep() dürfte die gleiche Funktion sein wie Thread::sleep()
Allerdings wäre die Frage, ob es sinnvoll ist, einen Thread anzuhalten.
Unter openHAB3 startet jede Rule nur einmal "gleichzeitig". Außerdem hat jede Rule einen Thread exklusiv für sich. Rules können also andere Rules nicht mehr ausbremsen oder gar die Ausführung von Rules verhindern.
Insofern ist es auch nicht mehr problematisch, die Ausführung einer Rule "anzuhalten". time.sleep() dürfte die gleiche Funktion sein wie Thread::sleep()
Allerdings wäre die Frage, ob es sinnvoll ist, einen Thread anzuhalten.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- scotty
- Beiträge: 676
- Registriert: 28. Apr 2020 04:44
Re: Pause in einer Regel
OK, dann mal etwas näher erklärt: innerhalb der Rule gibt es u. a. 56 aufeinander folgende Update Befehle nach dem Schema itemNeu.postUpdate(itemAlt.state). Damit ein flüssiger Ablauf gewährleistet ist, wollte ich zwischendurch kleine Pausen einrichten. Oder hast du einen andern Vorschlag?
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Pause in einer Regel
Sofern es tatsächlich um ein postUpdate geht, braucht es keine Pause.
Abgesehen davon bin ich gespannt, was sich dahinter verbirgt. Ich bin mir ziemlich sicher, dass Du unnötig kompliziert denkst...
Abgesehen davon bin ich gespannt, was sich dahinter verbirgt. Ich bin mir ziemlich sicher, dass Du unnötig kompliziert denkst...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- scotty
- Beiträge: 676
- Registriert: 28. Apr 2020 04:44
Re: Pause in einer Regel
Da könntest du richtig liegen. Folgendes steckt dahinter:
Das Binding tr064 liefert mir eingehende und ausgehende Telefonate mit Nummern und Namen aus dem Telefonbuch meiner Fritzbox. Nun möchte ich noch eine Liste der letzten 7 Telefonaten anzeige, die im Gegensatz zu dem Item "Callist" optisch verbessert ist.
Mir geht es jeweils um Namen, Nummer, Datum und Zeit. Zunächst einmal müsste eine Zeile aus der openhab.log nach %1, %2, %3 und %4 zerlegt und für Dummy-Items bereitgestellt werden. Mir fehlen da aber teilweise die Kenntnisse. Und weil die Daten ja nach jedem Telefonat nach hinten "rutschen" ändere ich das über postupdate.
Ich hoffe, es einigermaßen erklärt zu haben und vielleicht hast du ja einen einfacheren Weg.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Pause in einer Regel
Ja, Listenfunktion der letzten Einträge... gerne genommenes Problem.
Ich habe das bei mir über eine externe Datenbank gelöst (ich persistiere die Anrufdaten einfach als String nach MariaDB. Anschließend verwende ich diese Daten in Grafana und erzeuge dort eine Liste, wobei der String über die Konfiguration der Liste zerlegt wird.
Die Liste selbst schaue ich mir immer in Grafana direkt an, weil ich bisher zu faul war, die Ansicht in openHAB einzublenden.
MariaDB nutze ich hier nur, weil die eh da ist, das ginge genauso auch mit InfluxDB. Natürlich sehen die String Operationen in Grafana dann anders aus.
Ich hoffe aber auch immer noch, dass es irgendwann mal wieder ein List Widget geben wird, welches über die angebundene Persistence die letzten x Einträge anzeigt. Die Funktion als solche dürfte nicht all zu schwer umzusetzen sein, hat halt noch kein Entwickler gemacht.
Ich habe das bei mir über eine externe Datenbank gelöst (ich persistiere die Anrufdaten einfach als String nach MariaDB. Anschließend verwende ich diese Daten in Grafana und erzeuge dort eine Liste, wobei der String über die Konfiguration der Liste zerlegt wird.
Die Liste selbst schaue ich mir immer in Grafana direkt an, weil ich bisher zu faul war, die Ansicht in openHAB einzublenden.

MariaDB nutze ich hier nur, weil die eh da ist, das ginge genauso auch mit InfluxDB. Natürlich sehen die String Operationen in Grafana dann anders aus.
Ich hoffe aber auch immer noch, dass es irgendwann mal wieder ein List Widget geben wird, welches über die angebundene Persistence die letzten x Einträge anzeigt. Die Funktion als solche dürfte nicht all zu schwer umzusetzen sein, hat halt noch kein Entwickler gemacht.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- scotty
- Beiträge: 676
- Registriert: 28. Apr 2020 04:44
Re: Pause in einer Regel
Im Unterschied zur dir läuft bei mir OH3 im Docker, auf einer Synology. Deshalb habe ich bereits Influx2 im Docker installiert, aber noch nicht eingebunden. Damit werde ich mich später noch auseinander setzen müssen. Ich hoffe nur, dass dies nicht allzu schwierig wird.
Aber noch einmal zurück zu deiner Bemerkung, ich hätte wohl zu umständlich gedacht. Dem habe ich ja bereits zugestimmt, denn 56 postupdates sind doch eine Menge. Mein Grundgedanke ist zur Zeit, den Log-Befehl zu zerlegen (%1, %2, %3, %4) und die Ergebnisse danach 4 verschiedenen Dummy-Items zuzuweisen. Kannst du mir vielleicht bei dem Befehl zum zerlegen behilflich sein, damit nicht so viel Zeit dabei drauf geht?
Anschließend würden die gewünschten Werte per Item für 1 Telefonat zu Verfügung stehen (x 4=7 Telefonate, x2=für Eingang u. Ausgang). Das ergibt zusammen 56 Werte, deshalb 56 x postupdate.
Aufgrund deiner Anmerkung dachte ich, du kennst eventuell einen einfacheren Weg, oder habe ich dich missverstanden?
Aber noch einmal zurück zu deiner Bemerkung, ich hätte wohl zu umständlich gedacht. Dem habe ich ja bereits zugestimmt, denn 56 postupdates sind doch eine Menge. Mein Grundgedanke ist zur Zeit, den Log-Befehl zu zerlegen (%1, %2, %3, %4) und die Ergebnisse danach 4 verschiedenen Dummy-Items zuzuweisen. Kannst du mir vielleicht bei dem Befehl zum zerlegen behilflich sein, damit nicht so viel Zeit dabei drauf geht?
Anschließend würden die gewünschten Werte per Item für 1 Telefonat zu Verfügung stehen (x 4=7 Telefonate, x2=für Eingang u. Ausgang). Das ergibt zusammen 56 Werte, deshalb 56 x postupdate.
Aufgrund deiner Anmerkung dachte ich, du kennst eventuell einen einfacheren Weg, oder habe ich dich missverstanden?
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Pause in einer Regel
Na, wie gesagt, ich habe ein Item, über das der Call rein kommt. Dieses eine Item speichere ich mittels Persistence in einer Datenbank (Ich nutze kein Docker, aber dafür LXC, meine Datenbanken, MariaDB und InfluxDB, laufen beide als LXC (das C steht auch für Container...).
Grafana läuft in einem weiteren Container und holt sich die Daten aus der Datenbank (bzw. aus beiden, man kann ja mehrere Datenquellen parallel einbinden...). In Grafana habe ich eine Ansicht definiert, welche mir die letzten zehn Anrufe anzeigt, dabei werden die "Datensätze" (Status des Items) in der Ansicht aufgesplittet. Die Tabelle, welche ich als Ergebnis angezeigt bekomme, könnte ich auch wieder in openHAB anzeigen lassen, dazu bin ich zu faul, weshalb ich die Ansicht in Grafana nutze.
Ein Item. Keine Pointe.
Erste Spalte: Zeitpunkt des Anrufs. Zweite Spalte, angerufene Nummer (hier aber mittels Alias in Klartext überführt), dritte Spalte Anrufende Nummer, vierte Spalte gefundener Name (internes Telefonbuch und/oder Rückwärtssuche extern)
Grafana läuft in einem weiteren Container und holt sich die Daten aus der Datenbank (bzw. aus beiden, man kann ja mehrere Datenquellen parallel einbinden...). In Grafana habe ich eine Ansicht definiert, welche mir die letzten zehn Anrufe anzeigt, dabei werden die "Datensätze" (Status des Items) in der Ansicht aufgesplittet. Die Tabelle, welche ich als Ergebnis angezeigt bekomme, könnte ich auch wieder in openHAB anzeigen lassen, dazu bin ich zu faul, weshalb ich die Ansicht in Grafana nutze.
Ein Item. Keine Pointe.
Erste Spalte: Zeitpunkt des Anrufs. Zweite Spalte, angerufene Nummer (hier aber mittels Alias in Klartext überführt), dritte Spalte Anrufende Nummer, vierte Spalte gefundener Name (internes Telefonbuch und/oder Rückwärtssuche extern)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet