Hallo und guten Tag,
ist es möglich aus dem Script-Teil einer Regel wiederum eine Regel zu triggern?
Danke und Grüße
Haiko
Rules schachteln
- peter-pan
- Beiträge: 2769
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Rules schachteln
Das geht bestimmt. Z.B.: mit einem Dummy-Switch (ungebundenes Item), dass du in deiner ersten Regel z.B. auf "ON"setzt und als Trigger für die zweite Regel benutzt.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 23
- Registriert: 30. Sep 2020 21:28
Re: Rules schachteln
An so einen "Trick" hatte ich auch schon gedacht. Aber ich hatte gehofft, das es auch eine art "Call" gibt. Danke schonmal!
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules schachteln
Du kannst Scripte per Call aufrufen, aber eben keine Rules.
Ich frage aber mal provokant: Warum?
vermutlich möchtest Du Funktionsaufrufe haben. Das unterstützt die Rules DSL nicht.
Es gibt die Möglichkeit Lambdas zu nutzen, die unterstützen bis zu zehn Parameter.
Meist ist das aber unnötig und es gibt elegante Möglichkeiten, keine Funktion zu nutzen und dennoch kompakten Code zu nutzen, der nur einmal da steht.
Da wäre es aber wichtig, die konkrete Aufgabenstellung zu kennen.
Gesendet von iPad mit Tapatalk
Ich frage aber mal provokant: Warum?
vermutlich möchtest Du Funktionsaufrufe haben. Das unterstützt die Rules DSL nicht.
Es gibt die Möglichkeit Lambdas zu nutzen, die unterstützen bis zu zehn Parameter.
Meist ist das aber unnötig und es gibt elegante Möglichkeiten, keine Funktion zu nutzen und dennoch kompakten Code zu nutzen, der nur einmal da steht.
Da wäre es aber wichtig, die konkrete Aufgabenstellung zu kennen.
Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 23
- Registriert: 30. Sep 2020 21:28
Re: Rules schachteln
Jetzt hab ich auch eine Gegenfrage: Wie ruft man ein Script auf? Gibt es da irgendwo eine Anleitung? Müssen die Skripte in dem scripts-Ordner liegen? Sind die Skripte ebenfalls in DSL geschrieben? Oder welche Sprache nutzt man üblicherweise da?
Zu Deiner Frage: ja, ich würde gerne meinen Code etwas besser strukturieren. Ich bin das einfach so gewohnt und finde es dann auch les- und wartbarer. Ich geb zu, ich bin ein Java-Freak erster Stunde und gewohnt in Klassen und Methoden zu denken. Ich bekomme Schnappatmung, wenn eine Methode mehr als 20 Zeilen hat. Und in meiner Rule (die nacheinander vier Server abfragt und Kenndaten sammelt) ist viel duplizierter Code. Das heißt nicht, dass ich etwas gegen die DSL hätte. Im Gegenteil. Sie tut genau, was sie soll, ist schlank und leicht verständlich. Aber so was wie einen eleganten Funktionsaufruf hätten sie wirklich spendieren können.
Ich denke darüber nach, ob ich nicht die eine Rule in vier Rules aufteilen soll. Für jeden Server eine. Ich glaube das ist die eleganteste Lösung.
Danke für Deine Diskussionsbereitschaft!
Zu Deiner Frage: ja, ich würde gerne meinen Code etwas besser strukturieren. Ich bin das einfach so gewohnt und finde es dann auch les- und wartbarer. Ich geb zu, ich bin ein Java-Freak erster Stunde und gewohnt in Klassen und Methoden zu denken. Ich bekomme Schnappatmung, wenn eine Methode mehr als 20 Zeilen hat. Und in meiner Rule (die nacheinander vier Server abfragt und Kenndaten sammelt) ist viel duplizierter Code. Das heißt nicht, dass ich etwas gegen die DSL hätte. Im Gegenteil. Sie tut genau, was sie soll, ist schlank und leicht verständlich. Aber so was wie einen eleganten Funktionsaufruf hätten sie wirklich spendieren können.
Ich denke darüber nach, ob ich nicht die eine Rule in vier Rules aufteilen soll. Für jeden Server eine. Ich glaube das ist die eleganteste Lösung.
Danke für Deine Diskussionsbereitschaft!
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules schachteln
Anleitung... sagen wir mal so: irgendwo steht das sicherlich... Der Aufruf lautet call(„scriptname“) [oder war es callScript?] wobei das Script in einer einzelnen Datei im scripts-Verzeichnis liegt. Endung, soweit ich mich erinnere ist .scripthaiko hat geschrieben:Jetzt hab ich auch eine Gegenfrage: Wie ruft man ein Script auf? Gibt es da irgendwo eine Anleitung? Müssen die Skripte in dem scripts-Ordner liegen?
Es ist die Rules DSL, aber nur der Block zwischen then und end (ohne die beiden Schlüsselworte)Sind die Skripte ebenfalls in DSL geschrieben? Oder welche Sprache nutzt man üblicherweise da?
Das Blöde dabei: Man kann keine Parameter übergeben (man könnte natürlich die Parameter vorher in ein Item retten und das Script mit Verzögerung aufrufen)
Ja, Funktionen wären schon schön gewesenZu Deiner Frage: ja, ich würde gerne meinen Code etwas besser strukturieren. Ich bin das einfach so gewohnt und finde es dann auch les- und wartbarer. Ich geb zu, ich bin ein Java-Freak erster Stunde und gewohnt in Klassen und Methoden zu denken. Ich bekomme Schnappatmung, wenn eine Methode mehr als 20 Zeilen hat. Und in meiner Rule (die nacheinander vier Server abfragt und Kenndaten sammelt) ist viel duplizierter Code. Das heißt nicht, dass ich etwas gegen die DSL hätte. Im Gegenteil. Sie tut genau, was sie soll, ist schlank und leicht verständlich. Aber so was wie einen eleganten Funktionsaufruf hätten sie wirklich spendieren können.

Wenn die Abfragen quasi identisch sind, bis auf die abgearbeiteten Parameter, dann könnte es mit einer Rule getan sein. Der Trick besteht dann darin, die Items in Groups zu organisieren (Eingang wie Ausgang) und zueinander gehörende Items so zu benennen, dass sich der Name des einen aus dem Namen des anderen ableiten lässt. Dann kann man die Group verwenden, um jedes Element der Member anzufassen.Ich denke darüber nach, ob ich nicht die eine Rule in vier Rules aufteilen soll. Für jeden Server eine. Ich glaube das ist die eleganteste Lösung.
Beispiele müsste ich raus suchen, aber ich habe z.B. eine Rule, die sich um das Update von neun Raumtemperaturreglern kümmert.
Die jeweiligen Items liegen einfach in zwei Gruppen. Bräuchte ich weitere RTR, so könnte ich die Items einfach dazu packen und die Rule kümmerte sich auch um die neuen RTR, ohne eine weitere Zeile Code...
Immer gerneDanke für Deine Diskussionsbereitschaft!

Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet