[GELÖST] EXEC-Binding: Parameter übergeben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

[GELÖST] EXEC-Binding: Parameter übergeben

Beitrag von nw378 »

Hallo,

die Befehle, die über das exec Binding ausgeführt werden, müssen ja 1:1 so auch in der whitelist stehen, also bspw.

Code: Alles auswählen

Thing exec:command:Heizung_AUS      "Viessmann Betriebswahl 'AUS'" [command="vclient -h 192.168.178.60:3002 -c setBetriebsartTo0"]
Jetzt möchte ich gerne einen variablen Parameter übergeben, bspw. ein Temp.delta. Der Befehl dafür sieht so aus:

Code: Alles auswählen

vclient -h 192.168.178.60:3002 -c 'setNiveauM2 2'
(inkl. Hochkommata).

Statt dem Wert "2" möchte ich gerne einen Item-Wert einfügen.

Meine zwei Fragen:

* wie muss das entsprechende Thing aussehen?
* was mache ich mit der whitelist?
von udo1toni » 28. Nov 2022 17:56
Eventuell musst Du die Hochkommas escapen, also \'
Das Item muss mit dem input Channel gekoppelt sein.
Gehe zur vollständigen Antwort
Zuletzt geändert von nw378 am 29. Nov 2022 13:52, insgesamt 1-mal geändert.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: EXEC-Binding: Parameter übergeben

Beitrag von udo1toni »

Ja, das ist nicht sehr prominent beschrieben, steht aber dennoch in der Doku. Als Platzhalter für den variablen Teil gibst Du %2$s an, was dem aktuellen Inhalt des Input Channels entspricht. %1 enthält aktuelle Zeit und Datum, man kann also z.B. mit %1$tY-%1$tm-%1$td das Datum mit übergeben (im Beispiel dann im Format 2022-11-28), das kann hilfreich sein, wenn man z.B. Dateinamen kreieren will, die eindeutig sein sollen.

Die whitelist enthält immer exakt das angegebene Kommando, also auch mit dem Platzhalter. Du kopierst einfach die Zeile aus der Konfiguration und fügst sie in die whitelist ein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: EXEC-Binding: Parameter übergeben

Beitrag von nw378 »

Hallo Udo,

und wie immer danke für die schnelle Hilfe!
Wenn man es weiß, kann man das Vorgehen in die Doku hereinlesen. ;-)

Leider funktioniert es noch nicht (ganz). Folgendes habe ich gemacht:

.Things

Code: Alles auswählen

Thing exec:command:Heizung_Niveau                                  [command="vclient -h 192.168.178.60:3002 -c 'setNiveauM2 %2$s'"]
.items

Code: Alles auswählen

Number NiveauM2        "Niveau [%s K]" {channel="exec:command:Heizung_Niveau"}
.whitelist

Code: Alles auswählen

vclient -h 192.168.178.60:3002 -c 'setNiveauM2 %2$s'
mittels setpoint änder ich den item-Wert. im Logfile wird es korrekt angezeigt. Leider wird's nicht ans Gerät übermittelt.
Ich vermute die Hochkommata als Fehler? Ohne geht es leider nicht...
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: EXEC-Binding: Parameter übergeben

Beitrag von udo1toni »

Eventuell musst Du die Hochkommas escapen, also \'
Das Item muss mit dem input Channel gekoppelt sein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: [GELÖST] EXEC-Binding: Parameter übergeben

Beitrag von nw378 »

danke, jetzt klappt's!

Es war ein Dreiklang an Änderungen nötig:

1.: dass "den Input zu koppeln" bedeutet. den Item-Wert an den Parameter %2$s zu übermitteln, hatte ich nicht auf dem Schirm.
Ich hatte stattdessen gehofft, dass bei Änderung des Items (mittels Setpoint) automatisch der Befehl gesendet würde.

2.: Escapen \'

3. müssen input und Ausführen des Befehls zwingend in zwei verschiedene rules (ich hatte es zunächst in einer versucht).

So geht's:

Code: Alles auswählen

String Niveau_txt                       {channel="exec:command:Heizung_Niveau:input"}
Switch Niveau_aendern                   {channel="exec:command:Heizung_Niveau:run", autoupdate="false"}
String Niveau_Out                       {channel="exec:command:Heizung_Niveau:output"}

Code: Alles auswählen

rule "Heizung: Niveauänderung iOS App"
when Item NiveauM2 changed
 then 
    Niveau_txt.sendCommand(NiveauM2.state.toString)
end

rule "Heizung: Niveauänderung senden"
  when Item Niveau_txt received command then 
    Niveau_aendern.sendCommand(ON)  
end 

Code: Alles auswählen

Thing exec:command:Heizung_Niveau                                  [command="vclient -h 192.168.178.60:3002 -c \"setNiveauM2 %2$s\""]
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: [GELÖST] EXEC-Binding: Parameter übergeben

Beitrag von udo1toni »

Nein, Du brauchst nur eine Rule.

Streng genommen brauchst Du gar keine Rule :)

Punkt eins: Du musst im exec Thing lediglich autorun auf aktiv setzen, damit wird der Befehl automatisch ausgeführt, sobald der Input Channel einen Wert zugewiesen bekommt.

Punkt zwei: Da Du den unveränderten Wert aus dem Item NiveauM2 übernehmen willst, reicht es, einen Link vom Input Channel zum Item NiveauM2 anzulegen und in diesem Link das Profile auf follow zu setzen.

Fortan wird jede Änderung im Item NiveauM2 sofort als Befehl an den Input Channel weitergeleitet, der wiederum wegen autorun den hinterlegten Befehl ausführt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: [GELÖST] EXEC-Binding: Parameter übergeben

Beitrag von nw378 »

So hatte ich es auch angedacht. Die Lösung mit zwei rules habe ich aus der Doku. Wie gesagt, beide Befehle in einer funktionierte - wieso auch immer - nicht.

"profile" kannte ich noch nicht.

So siehts jetzt aus:

Code: Alles auswählen

Number NiveauM2       "Niveau [%.1f]" {channel="exec:command:Heizung_Niveau:input" [profile="follow"]}

Code: Alles auswählen

Thing exec:command:Heizung_Niveau     [command="vclient -h 192.168.178.60:3002 -c \"setNiveauM2 %2$s\"", autorun=true]
So klappt's leider nicht. Und es liegt wohl daran, dass das item eine Number ist. Die Doku sagt:
Attention: Linking input to any other item type than String will result in erroneous behavior. If needed, please use a rule to convert your item's state to a string. Also note that only commands (e.g. sendCommand) to the input channel are recognized, updating the item's state will not work (e.g. postUpdate).
Also muss doch zumindest eine Regel her, die aus der Zahl einen String macht. Damit läuft's dann aber.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: [GELÖST] EXEC-Binding: Parameter übergeben

Beitrag von udo1toni »

Das sollte aber nicht so sein. das Profile "follow" sorgt dafür, dass des Status als Command gewertet wird. openHAB sollte eigentlich automatisch nach String wandeln... Nun ja... eine Rule ist besser als zwei Rules ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten