Seite 1 von 2
Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 4. Dez 2019 08:35
von Tokamak
Moin,
um in einer Rule die Environment-Variable OPENHAB_CONF zu nutzen, wollte ich sie mit System.getenv() lesen. Geht aber nicht, das System-Objekt ist nicht da oder zumindest in der Rule-DSL verschollen.
Wie bekomme ich das nun hin? Muss ich mir tatsächlich was mit den Exec-Binding basteln, das ich bisher nicht benötigt habe?
Danke und Gruß
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 4. Dez 2019 08:59
von udo1toni
Warum sollte man das tun wollen? Im Allgemeinen musst Du keine absoluten Pfade zu openHAB-Dateien angeben, mal abgesehen davon, dass Du auf die Dateien auch nicht aus Rules heraus zugreifen solltest. Entsprechend ist es auch nicht vorgesehen, die Bash-Variable zu verwenden.
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 4. Dez 2019 10:27
von Tokamak
Warum sollte man das tun wollen?
Weil ich Dateien auslesen will, die ich zusätzlich dort ablege, praktischerweise deswegen, weil ich sie eh über das Openhab-Samba-Share dort im Zugriff habe.
Und wenn ich die Frage ohne OPENHAB_CONF gestellt hätte, sondern nur: "Wie lese ich aus einer Rule heraus Environment-Variablen?", was wäre dann die Antwort gewesen?
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 4. Dez 2019 20:21
von udo1toni
Dein Vorhaben wird nicht ohne externe Scripte realisierbar sein, jedenfalls ist mir dazu kein Weg bekannt. Die Environment Variablen sind außerhalb openHAB, diese Information steht schlicht nicht zur Verfügung.
Um mit einem beliebten Vergleich zu sprechen: Man wird auhc kein Dreirad nutzen, um einen Schiffscontainer zu transprtieren. Die Rules DSL kann vieles, aber sie sit nicht für alle Dinge gleichermaßen geeignet.
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 07:41
von Tokamak
Nun gut... muss ich es eben anders machen.
Das Argument nachvollziehen kann ich nicht. java.util.Arrays kann ich in OH einbinden und nutzen, java.lang.System und System hingegen nicht? An manchen Stellen tue ich mich durchaus schwer mit den Einschränkungen bzw. möglichen Überlegungen der Entwickler, die zu den Einschränkungen geführt haben.
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 09:47
von udo1toni
Hast Du denn mal versucht, java.lang.System zu importiern?
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 11:15
von Tokamak
Yep. "java" in
wird sowohl unter Debian als auch unter openhabian unterkringelt mit der Meldung
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 15:01
von peter-pan
Ich weiss zwar nicht, ob dir das weiterhilft, aber probiere einfach mal
dann sollte die Fehlermeldung eigentlich nicht mehr kommen.Falls das klappt, würde mich interessieren, wie du dann weiter gemacht hast.
Ich habe leider keine Ahnung von dem Ganzen, hab's einfach mal per "trial and error" probiert und diesen Import in einer Rule angelegt, basierend auf dieser
Webseite
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 16:08
von Tokamak
Wie nicht anders zu erwarten:
Von welcher Web-Site sprichst du?
Re: Wie komme ich in einer Rule an OPENHAB_CONF?
Verfasst: 5. Dez 2019 16:29
von peter-pan
Sorry, ich meinte diese
Webseite.
Also ich habe diesen Import in eine Rule eingebaut:
Code: Alles auswählen
import java.lang.getenv
rule " Spielereien mit Syntax"
when
Item DummySpielereien changed to ON
then
{
val max = 10
var i = 0
while (i < max) {
logInfo("Spielereien", "Hi there")
i = i + 1
}
}
logInfo("Spielereien", "Ende")
end
Als Ergebnis sagt mir der Logger:
Code: Alles auswählen
2019-12-05 16:20:50.329 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model '_spielereien.rules'
Wenn ich das mit deinem Import mache:
Code: Alles auswählen
import java.lang.System
rule " Spielereien mit Syntax"
when
Item DummySpielereien changed to ON
then
{
val max = 10
var i = 0
while (i < max) {
logInfo("Spielereien", "Hi there")
i = i + 1
}
}
logInfo("Spielereien", "Ende")
end
Sagt der Logger:
Code: Alles auswählen
2019-12-05 16:20:50.329 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model '_spielereien.rules'
2019-12-05 16:26:22.109 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model '_spielereien.rules' has errors, therefore ignoring it: [2,8]: no viable alternative at input 'System'
Wie gesagt, ich habe den Import einfach vor die Regel gesetzt.