Seite 2 von 2

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 5. Dez 2019 16:43
von Tokamak
Selbst wenn OH nicht meckert, hilft es am Ende nicht. Ich würde ja sowas wie

Code: Alles auswählen

val confDir=System.getenv("OPENHAB_CONF")
ausführen wollen, wozu der "import java.lang.getenv" nichts beiträgt:
Anmerkung 2019-12-05 164240.jpg

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 5. Dez 2019 16:48
von peter-pan
Wie gesagt, von Java verstehe ich nichts und mit der Syntax kenne ich mich nicht aus, aber die von dir zuerst beschriebene Warnung kommt schon mal nicht mehr.

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 5. Dez 2019 22:58
von udo1toni
imports müssen, genau wie globale Variablen, zu Beginn der Datei angegeben werden. Die normale Reihenfolge ist dabei:
Zuerst imports, dann globale Konstanten, dann globale Variablen, dann Lambdas, zum Schluss die rules. Diese Reihenfolge ist aber sicher nicht zwingend, zumindest funktioniert bei mir das wilde mischen von Konstanten, Variablen und Lambdas ohne Probleme. Imports hab ich aber immer ganz oben.

Für das eigentliche Problem habe ich aber keine Idee. Vielleicht weiß im englischen Forum jemand Rat. Ansonsten bliebe immer noch der normale Weg über ein externes Script (oder mehrere davon).

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 5. Dez 2019 23:25
von peter-pan
Da bin ich ganz bei dir (wenn, dann externe Scripts, etc.).

Wenn ich das richtig verstanden habe was Rich und Scott im englischen Forum geschrieben haben , geht das mit JS223 und NGRE mit Helper-Libraries bzw. ab OH3.

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 6. Dez 2019 13:48
von udo1toni
Ja, JS223 ist da wesentlich offener.

Re: Wie komme ich in einer Rule an OPENHAB_CONF?

Verfasst: 6. Dez 2019 19:11
von Tokamak
Nachdem ich mich eine Weile mit dem Exec-Binding rumgeschlagen have, das wie executeCommandLine() nicht erwartungskonform mit Pipes umgehen kann, um den Befehl "env | grep ^OPENHAB_CONF= | cut -d= -f2" abzusetzen, habe ich eine einfache Lösung implementiert.
Einfach deswegen, weil sie etwa nicht mit mehrzeiligen Environmentvariablen umgehen kann.

Um den Thread damit abzuschließen:

Code: Alles auswählen

val getenv = [ String envvar |
    val line=executeCommandLine("env",1000).split('\n').findFirst[ s | s.startsWith(envvar+"=") ]
    return if (line!==null) line.split('=').get(1)
]

...
val openhab_conf_dir=getenv.apply("OPENHAB_CONF")
liefert das gewünschte Ergebnis. Vermutlich muss unter Windows in der Lambda das "env" durch "set" ersetzt werden.