[gelöst] MQTT_GENERIC_BRIDGE: Ausführen eines "Set" in Abhängigkeit eines Wertes

Begonnen von RomanB, 10 Februar 2023, 12:53:58

Vorheriges Thema - Nächstes Thema

RomanB

Hallo,

ich möchte einen Rollladen steuern, dessen Commands über ein MQTT-Topic kommen.
In meinem Fall ist das: mqttGenericBridge/set/Rollladen/command
Der Wert kann nun die Ausprägungen "down", "up" oder "stop" annehmen.

Leider gibt es für diese Vorgänge in meinem Device drei commands:
set Rollladen down
set Rollladen up
set Rollladen stop

Ich verzweifle gerade dieses Mapping in der MQTT_GENERIC_BRIDGE zu realisieren.
Dies muss ja durch das mqttSubscribe-Attribut in meinem "Rollladen" geschehen.
Die Doku sagt mir folgendes: "Ist die Rückgabe ein Hash (nur für 'topic' und 'stopic'), dann werden seine Schlüsselwerte als Readingsnamen bzw. 'set'-Parameter verwendet, die zu setzenden Werte sind entsprechend den Werten aus dem Hash."

Ich habe nun folgendes probiert:
command:expression={
  if ($value eq "up") {
    "up"=>"up"
  } elsif ($value eq "down") {
    "down"=>"down"
  } elsif ($value eq "stop") {
    "stop"=>"stop"
  } else {
   "stop"=>"stop"
  }
}


Aber das funktioniert nicht. Auch wenn ich ein return vor die einzelnen Hashes packe, führt dies nicht zum Erfolg. Kann mir jemand mit der Syntax weiterhelfen?

In der Log bekomme ich folgenden Fehler:
MQTT_GENERIC_BRIDGE: [mqttGenericBridge] setUpdate: error in set command: Unknown argument command, choose one of dawn:noArg dawnAutomatic:on,off down:noArg dusk:noArg duskAutomatic:on,off getStatus:noArg manualMode:on,off position:slider,0,1,100 rainAutomatic:on,off rainDirection:up,down rainMode:on,off remotePair:noArg remoteUnpair:noArg reset:settings,full reversal:on,off stop:noArg sunAutomatic:on,off sunMode:on,off sunPosition:slider,0,1,100 timeAutomatic:on,off toggle:noArg up:noArg ventilatingMode:on,off ventilatingPosition:slider,0,1,100 windAutomatic:on,off windDirection:up,down windMode:on,off attrTemplate:?,speechcontrol_general_naming_master_template

Ich habe auch mal die Source-Codes in der 10_MQTT_GENERIC_BRIDGE.pm geändert um besser zu loggen. Der retrun value, welcher eval() ausspruckt ist. immer nur der übergebene Inhalt, also "down", "up" oder "stop", jedoch kein Hash.

Beta-User

Wie üblich: etwas vollständigere Infos hätten es schon sein dürfen...

vermutlich suchst du sowas wie attr DEVICE mqttSubscribe state:stopic={'mqttGenericBridge/set/Rollladen/command'}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

RomanB

Danke für die Antwort.
Mir ist das selbst aufgefallen und ich habe noch ein paar Infos ergänzt. Was fehlt denn noch?

attr DEVICE mqttSubscribe state:stopic={'mqttGenericBridge/set/Rollladen/command'}
Verstehe ich so, dass bei einer Nachricht im Topic folgendes aufgerufen wird:
set DEVICE state $commandValue
Ich möchte jedoch das "state" dynamisch in Abgängigkeit von $commandValue aufrufen.
Also z.B.
"set Rollladen up", wenn über mqttGenericBridge/set/Rollladen/command der Wert "up" reinkommt.
Kommt über das selbe Topic "down", muss stattdessen
"set Rollladen down" aufgerufen werden.

Anders ausgedrückt: Der empfangene Wert soll nicht der Parameter des set-Befehls werden (also nicht etwas wie "set Rollladen position 78", wenn ich als Wert 78 bekomme), sondern bestimmen, welcher set-Befehl aufgerufen wird.

Beta-User

Magst du es einfach ausprobieren?

...oder einfach die commandref etwas genauer anschauen:
ZitatWhen using 'stopic', the 'set' command is executed as 'set <dev> <reading> <value>'. For something like 'set <dev> <value>'  'state' should be used as reading name
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

RomanB


Beta-User

Na ja, die Hervorhebung täte vielleicht auch der commandref gut; aus den Beispielen kann man das fast besser ablesen.

(Ich wußte halt, wonach man suchen muss (und schreibe sowas in der Regel ja auch nicht "einfach so" hin ;) )).

[gelöst]?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

RomanB