exec, http, mqtt oder ganz was anderes?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

exec, http, mqtt oder ganz was anderes?

Beitrag von Quautiputzli »

Hallo
Ich nutze OH3 auf einem Raspberry4. Außerdem habe ich noch einen anderen Raspberry auf dem der Volkszähler läuft. Auf diesem Raspie läuft außerdem noch battsett (https://github.com/jandrassy/battsett), um die Batterieladung über den Fronius Wechselrichter zu steuern.

Dieses battsett möchte ich nun gerne auch über openHab "ansteuern". Möglich wäre es die Kommandos an den anderen Raspie zu schicken, oder auch das battsett-script direkt auf dem openHAB-Raspie auszuführen. Auf Kommandozeile habe ich es dort schon probiert, es funktionert dort genau so. Dazu muss ich z.B. folgenden "Befehl" absenden:
java -jar battsett.jar 192.168.2.109 in 55
oder
java -jar battsett.jar 192.168.2.109 i 55 0
Man sieht, der Teil nach der IP ist variabel, und kann aus 2 oder 3 Stellen bestehen.
Als Antwort bekommt man dann z.B. sowas:

Code: Alles auswählen

Charge limit 55% is disabled
Discharge limit 0% is disabled
Minimum reserve 0% of the nominal maximum storage
Mit http habe ich derzeit schon etwas ähnliches laufen. Dort schicke ich einen "Aufruf" an ein *.php auf dem anderen Raspie, der dann ein python-script ausführt um GPIOs anzusteuern. So ähnlich könnte man es nun auch machen. Schön wäre auch, wenn die Antwort zurückgeliefert werden würde.

Oder ist es mit mqtt besser? Oder mit exec, wenn man das script auf dem openhab-raspie laufen lässt? Kann man mit exec den variablen Teil darstellen, oder müsste man dann mehrere Things anlegen je nachdem was man senden möchte?
Servus

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

Re: exec, http, mqtt oder ganz was anderes?

Beitrag von udo1toni »

Du kannst über exec sowohl einen Parameter senden, als auch die Antwort entgegennehmen. Dazu sind die Channel input und output da.
Die beiden Channel sind String Channel. Der Input besteht einfach aus den gewünschten Teilen (unterscheidet sich das tatsächlich auch in dem Parameter, der unmittelbar auf die IP folgt? i und in?). Das exec Thing wird auf autorun konfiguriert, das bedeutet, sobald der input Channel ein Update erhält, wird ein run ausgeführt. Es muss ein Platzhalter im Befehlsaufruf mit angegeben werden, der wird dann mit dem String gefüllt. Dabei werden keine Anführungszeichen ergänzt, das heißt, wenn der übergebene String Leerzeichen enthält, werden aus dem einen String mehrere Parameter.
Sobald das Script fertig ist, wird der output Channel die Ausgabe enthalten, ebenfalls als String.

Für das Setzen der Werte musst Du Dir noch eine kleine Rule basteln, welche den benötigten String entsprechend den Vorgaben zusammensetzt.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: exec, http, mqtt oder ganz was anderes?

Beitrag von Quautiputzli »

Hi und Danke für die Info
Der Aufruf kann folgendermaßen aussehen:

- nur zum Abfragen
java -jar battsett.jar 192.168.2.109
setzen laden auf 55%
java -jar battsett.jar 192.168.2.109 i 55 1

dabei kann man i oder in bzw o oder out benutzen, 55 ist der Prozentwert, 1 oder enabble bzw. 0 oder disable
und dazwischen muss eben ein Leerzeichen sein.

Ich werde es mal mit dem exec-Binding versuchen. Das mit dem Leerzeichen und den mehrere Parametern ist mir noch nicht ganz klar. Muss ich dass dann so machen:

Code: Alles auswählen

java -jar battsett.jar 192.168.2.109 %1$d %2$d %3$d
So in der Richtung habe ich es ja auch den den Color Lampen (nur mit Komma dazwischen).

Edit:
Und wie heißt der Pfad, wenn ich das battsett im "samba-Ordner" unter scripts ablege? Wobei, wenn ich es in der Kommandozeile ausführe muss ich keinen Pfad angeben, das funktioniert wohl von überall.
Servus

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

exec, http, mqtt oder ganz was anderes?

Beitrag von udo1toni »

Exec kann exakt einen Parameter übergeben, und das ist ein String. Ich bin gerade zu faul, in der Doku nachzuschauen ;)

Aber wie gesagt kannst Du den String ja vorher mit einer Rule zusammensetzen, der müsste vom ausgeführten Befehl dann auch als mehrere Parameter erkannt werden, wenn Du die Leerzeichen mit einbaust.

Der Pfad lautet /etc/openhab/scripts (openHAB3) bzw. /etc/openhab2/scripts (openHAB2). Befehle, die per exec ausgeführt werden sollen, müssen in der whitelist eingetragen werden. Die exakte Schreibweise ist essenziell.


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

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: exec, http, mqtt oder ganz was anderes?

Beitrag von Quautiputzli »

Also vorweg, es hat geklappt. Die Einrichtung ging recht einfach und schnell.
Ich habe folgende Konfiguration:

Code: Alles auswählen

UID: exec:command:battsett
label: Battsett
thingTypeUID: exec:command
configuration:
  transform: REGEX((.*))
  interval: 0
  autorun: true
  command: java -jar /etc/openhab/scripts/battsett.jar 192.168.2.109 %2$s
  timeout: 15
Ich habe Testweise den String aus einer Rule herausgesendet mit

Code: Alles auswählen

Battsett_Eingabewert.sendCommand("i 100 0")
passt.

Ich habe dann sogar bei dem Item Battsett_Eingabewert in den Metadaten command options hinzugefügt:

Code: Alles auswählen

Options
r 0=r 0
r 10=r 10
Damit lässt sich das in der UI auswählen.
Bild_2021-05-20_063104.png
Und wie man sieht kommt auch die Antwort zurück.

Danke für die Unterstützung
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Servus

Antworten