Funktion mit Parameter in Rule
Verfasst: 2. Nov 2023 22:21
Hallo zusammen,
zu dem Thema habe ich nun schon einige Beiträge im Netz gefunden - vor allem im englischsprachigen OpenHab Forum. Allerdings ist das Problem für mich noch nicht so ganz gelöst. Wer weiß, vielleicht geht das ja auch gar nicht.
Ganz allgemein möchte ich eine Funktion mit Parameter definieren können und diese Funktion in jeder beliebigen Rule mit Übergabe eines Items aufrufen.
Konkret hätte ich hier ein sehr einfaches Beispiel:
In meinem Haus habe ich Taster statt Schalter verbaut. Klickt man einen Taster, schaltet er er den aktuellen Status einer Lampe um (ON --> OFF oder OFF --> ON).
Aktuell habe ich das über diesen Zweizeiler im DSL Script gelöst.
Den konte ich einfach in die einzelnen Rules kopieren und statt MyItem den konkreten Item-Namen der entsprechenden Lampe eintragen.
Lieber wäre mir, ich könnte eine Funktion vordefinieren und diese dann in den Rules aufrufen. Dann könnte ich zum einen die Funktion erweitern, wenn mir danach ist und zum anderen reduzieren ich die Gefahr von Tippfehlern.
Ich habe auf meiner Suche die Lambda-Funktion gefunden und geglaubt, das könnte der richtige Weg sein. bin aber noch nicht wirklich weiter gekommen.
Quelle: https://community.openhab.org/t/reusab ... otes/15888
Hier ist die Lambda Funktion allerdings in einer *.rules Datei verwendet worden.
Damit ist die Funktion in allen Rules dieser Datei verfügbar.
Aber wie mache ich das in der GUI in OpenHab4. Ich müsste die Funktion val log... in einem Rule DSL Script eintragen. Aber wie rufe ich die Funktion dann in einer Rule auf?
zu dem Thema habe ich nun schon einige Beiträge im Netz gefunden - vor allem im englischsprachigen OpenHab Forum. Allerdings ist das Problem für mich noch nicht so ganz gelöst. Wer weiß, vielleicht geht das ja auch gar nicht.
Ganz allgemein möchte ich eine Funktion mit Parameter definieren können und diese Funktion in jeder beliebigen Rule mit Übergabe eines Items aufrufen.
Konkret hätte ich hier ein sehr einfaches Beispiel:
In meinem Haus habe ich Taster statt Schalter verbaut. Klickt man einen Taster, schaltet er er den aktuellen Status einer Lampe um (ON --> OFF oder OFF --> ON).
Aktuell habe ich das über diesen Zweizeiler im DSL Script gelöst.
Code: Alles auswählen
val ThisItem = MyItem;
ThisItem.sendCommand(if (ThisItem.state == ON) OFF else ON);
Lieber wäre mir, ich könnte eine Funktion vordefinieren und diese dann in den Rules aufrufen. Dann könnte ich zum einen die Funktion erweitern, wenn mir danach ist und zum anderen reduzieren ich die Gefahr von Tippfehlern.
Ich habe auf meiner Suche die Lambda-Funktion gefunden und geglaubt, das könnte der richtige Weg sein. bin aber noch nicht wirklich weiter gekommen.
Quelle: https://community.openhab.org/t/reusab ... otes/15888
Hier ist die Lambda Funktion allerdings in einer *.rules Datei verwendet worden.
Code: Alles auswählen
val log= [ GenericItem s |
logInfo("lambda", s.state.toString)
s.state.toString + " logged"
]
rule "Call Lambda"
when
// some trigger
then
val loggedStr = log.apply(MyItem)
end
Aber wie mache ich das in der GUI in OpenHab4. Ich müsste die Funktion val log... in einem Rule DSL Script eintragen. Aber wie rufe ich die Funktion dann in einer Rule auf?