Rules schachteln

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Rules schachteln

Beitrag von haiko »

Hallo und guten Tag,

ist es möglich aus dem Script-Teil einer Regel wiederum eine Regel zu triggern?

Danke und Grüße
Haiko

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rules schachteln

Beitrag von peter-pan »

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

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: Rules schachteln

Beitrag von haiko »

An so einen "Trick" hatte ich auch schon gedacht. Aber ich hatte gehofft, das es auch eine art "Call" gibt. Danke schonmal!

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

Re: Rules schachteln

Beitrag von udo1toni »

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
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: Rules schachteln

Beitrag von haiko »

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!

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

Re: Rules schachteln

Beitrag von udo1toni »

haiko 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?
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 .script
Sind die Skripte ebenfalls in DSL geschrieben? Oder welche Sprache nutzt man üblicherweise da?
Es ist die Rules DSL, aber nur der Block zwischen then und end (ohne die beiden Schlüsselworte)
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)
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.
Ja, Funktionen wären schon schön gewesen :)
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.
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.
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...
Danke für Deine Diskussionsbereitschaft!
Immer gerne :)


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

Antworten