wert von var in rule mit sendCommand

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Mattes
Beiträge: 25
Registriert: 23. Mär 2020 13:37
Answers: 0

wert von var in rule mit sendCommand

Beitrag von Mattes »

Hallo zusammen,

ich kriege gerade in meiner rule zur Ansteuerung eines Shelly Dimmers die Übergabe eines Wertes als Variable nicht hin :(
Angebunden via MQTT (das soll auch so bleiben)

Die Ansteuerung An/Aus funktioniert..

rule "Ein"
when
Item Test1 received command ON
then
Shelly13cmd.sendCommand("on")
end


ebenso das Aussschalten. Probleme tun sich bei der Übertragung des Helligkeitswert auf.. konstante Werte lassen sich als string übertragen, der Dimmer reagiert auch.
Wie bekomme ich nun in dem string eine variable eingebunden? Hier die rule dazu mit der Konstanten..

rule "Value"
when
Item Test3 received command ON
then
Shelly13Value.sendCommand("{brightness: 99}")
end


Also konkret: wie ersetze ich den Wert (hier 99) durch eine Variable??

schon mal Dank im voraus für eure Anregungen
Gruss
Mattes

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

Re: wert von var in rule mit sendCommand

Beitrag von udo1toni »

Warum steuerst Du den Shelly so kompliziert? Du könntest einfach entsprechende Channel anlegen, über die Du dann die Helligkeit direkt steuerst, nicht als String, sondern als Number.

Du kannst natürlich auch einen String so zusammensetzen, dass er passt, so z.B.:

Code: Alles auswählen

var myNumber = 99
val myString = "{brightness: "+ myNumber.toString +"}"
Shelly13Value.sendCommand(myString)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Mattes
Beiträge: 25
Registriert: 23. Mär 2020 13:37
Answers: 0

Re: wert von var in rule mit sendCommand

Beitrag von Mattes »

Hallo Toni,

danke für die Antwort... werde ich direkt mal ausprobieren.
Warum so kompliziert? ich habe für die brightness keinen anderen Weg gefunden um den ShellyDimmer zu verstellen, habe alles mögliche per MQTT ausprobiert - es funzt aber ausschlieslich diese syntax. Zum verstellen will ich ja später ein Signal vom Schalter nutzen um die var in +/- zu verändern. Also keine direkte Eingabe per Wert, Slider etc...
Aber ich denke genau das habe ich gesucht - einen String aus mehreren Teilen zusammen setzen.
Danke und Gruss
Mattes

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

Re: wert von var in rule mit sendCommand

Beitrag von udo1toni »

Der Punkt ist, Du kannst einen Dimmer Channel anlegen, in dem Du das commandTopic setzt und eine outgoing Transformation definieren. Da wird dann die Zahl direkt in das Payload eingebaut. Wie Du den Dimmer ansteuerst, ob nun über einen Slider oder über Setpoint, spielt keine Rolle.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Mattes
Beiträge: 25
Registriert: 23. Mär 2020 13:37
Answers: 0

Re: wert von var in rule mit sendCommand

Beitrag von Mattes »

Hallo Toni,

ich habe mal versucht deinen Vorschlag umzusetzen...

var myNumber = 99
val myString = "{brightness: "+ myNumber.toString +"}"

rule "Value"
when
Item Test3 received command ON
then
Shelly13Value.sendCommand(myString)
end


leider klappt es nicht :( im log steht folgender Eintrag:

2021-02-09 11:48:19.803 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'Value.rules'
2021-02-09 11:48:26.083 [WARN ] [me.internal.engine.RuleContextHelper] - Variable 'myString' on rule file 'Value.rules' cannot be initialized with value '<XBinaryOperationImplCustom> + <XStringLiteralImpl>': An error occurred during the script execution: Could not invoke method: java.lang.Integer.toString() on instance: myNumber (Type=NumberItem, State=NULL, Label=myNumber, Category=null)
2021-02-09 11:48:26.101 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Value': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null


hast du noch eine Idee wie ich den Wert mit dem string an den Shelly Dimmer senden kann?

Danke....

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

Re: wert von var in rule mit sendCommand

Beitrag von udo1toni »

Du kannst doch nicht ernsthaft eine Konstante global definieren und erwarten, dass die Konstante dann innerhalb einer Rule dynamisch geändert wird?
Bitte verwende immer die Code-Tags, nicht irgendwelche Farben.

Konkret muss Deine Rule so aussehen:

Code: Alles auswählen

rule "Value"
when
    Item Test3 received command ON
then
    var myNumber = 99
    val myString = "{brightness: "+ myNumber.toString +"}"
    Shelly13Value.sendCommand(myString)
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten