[gelöst] publishSet_24_1_on Kommata quoten in fhem

Begonnen von fhem@supergut, 23 November 2020, 12:57:47

Vorheriges Thema - Nächstes Thema

fhem@supergut

Moin,

ich möchte per publishSet folgenden MQTT Befehl absetzen:

mosquitto_pub -t "OpenMqttGw/buero/commands/MQTTtoPilight" -m '{"message":"{\"systemcode\":12,\"unitcode\":22,\"off\":1}","protocol":"elro_800_switch"}' -u freak -P 'aXXXXXXXXXXXX6' -p 1882

Die Kommata trennen aber die Befehle im publishSet siehe Bild. Wie quote ich hier Kommata? Danke.

Bis denne

defmod buero_OpenMqttGw_mqtt2pilight MQTT_DEVICE
attr buero_OpenMqttGw_mqtt2pilight IODev myBroker1882
attr buero_OpenMqttGw_mqtt2pilight publishSet_24_1_on '{"message":"{\"systemcode\":24,\"unitcode\":1,\"off\":1}","protocol":"elro_800_switch"}' OpenMqttGw/buero/commands/MQTTtoPilight



Beta-User

Puh, eine wirkliche Lösung habe ich für das Problem nicht, JSON-encoded payload zu generieren war für mich damals mit ein Grund, direkt auf den MQTT2-Zug aufzuspringen.

Vielleicht legst du dir für das Thema eine MQTT2_CLIENT-Verbindung zu deinem Broker und versuchst es mal mit MQTT2_DEVICE? Da sollte das kein issue sein.

Ansonsten würde ich innerhalb der einfachen Quotes auch annehmen, dass man auf das escapen der doppelten Quotes verzichten kann; das wird aber wohl für das Komma nichts helfen, und ob an der Stelle Perl stehen dürfte, ist aus der cref nicht abzulesen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fhem@supergut

#2
Ok. Ich habe also nun ein MQTT2 Device. Wie publishe ich denn da?

Zitatattr buero_OpenMqttGw_mqtt2pilight setList 24_1_on OpenMqttGw/buero/commands/MQTTtoPilight {"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"}

Dette klappt nicht.

defmod buero_OpenMqttGw_mqtt2pilight MQTT2_DEVICE
attr buero_OpenMqttGw_mqtt2pilight autocreate 1
attr buero_OpenMqttGw_mqtt2pilight bridgeRegexp OpenMqttGw/buero/BTtoMQTT/([0-9A-Z]+):.* "oMQTTgw_BT"\
  OpenMqttGw/buero/433toMQTT:.* "oMQTTgw_433"\
  OpenMqttGw/buero/IRtoMQTT:.* "oMQTTgw_IR"\
  OpenMqttGw/buero/CLIMAtoMQTT/([a-zA-Z0-9]+):.* "buero_$1"
attr buero_OpenMqttGw_mqtt2pilight devStateIcon online:10px-kreis-gruen offline.*:10px-kreis-rot
attr buero_OpenMqttGw_mqtt2pilight icon mqtt
attr buero_OpenMqttGw_mqtt2pilight model OpenMQTTGateway_MCU
attr buero_OpenMqttGw_mqtt2pilight readingList OpenMqttGw/buero/LWT:.* LWT\
  OpenMqttGw/buero/version:.* version\
  OpenMqttGw/buero/SYStoMQTT:.* { json2nameValue($EVENT,'Sys_')}\
  homeassistant/[^/]*sensor/[^/]+/config:.* { $EVENT =~ m,buero, ? json2nameValue($EVENT,"HASS_") : undef }
attr buero_OpenMqttGw_mqtt2pilight setList 24_1_on OpenMqttGw/buero/commands/MQTTtoPilight {"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"}
attr buero_OpenMqttGw_mqtt2pilight stateFormat <a href="http://Sys_ip" target="_blank">\
LWT\
</a>Version: version
attr buero_OpenMqttGw_mqtt2pilight webCmd 24_1_on

setstate buero_OpenMqttGw_mqtt2pilight <a href="http://192.168.178.251" target="_blank">\
online\
</a>Version: version_tag
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:14:37 LWT online
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_SSID 8XXXXXX8
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_freemem 145176
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_interval 55555
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_ip 192.168.178.251
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_lowpowermode 0
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_mac 30:AE:A4:23:2E:E4
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_1 BME280
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_2 HTU21
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_3 IR
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_4 RF
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_5 RF2
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_6 Pilight
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_7 BT
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_modules_8 DHT
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_rssi -65
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_scanbcnct 10
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_uptime 79466
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_version version_tag
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:13:04 Sys_wifiprt 2
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:14:30 state 24_1_on
setstate buero_OpenMqttGw_mqtt2pilight 2020-11-23 14:14:37 version version_tag



Beta-User

Vermutlich brauchst du die "qq"-Variante:
defmod buero_OpenMqttGw_mqtt2pilight MQTT2_DEVICE
attr buero_OpenMqttGw_mqtt2pilight IODev m2server
attr buero_OpenMqttGw_mqtt2pilight autocreate 1
attr buero_OpenMqttGw_mqtt2pilight bridgeRegexp OpenMqttGw/buero/BTtoMQTT/([0-9A-Z]+):.* "oMQTTgw_BT"\
  OpenMqttGw/buero/433toMQTT:.* "oMQTTgw_433"\
  OpenMqttGw/buero/IRtoMQTT:.* "oMQTTgw_IR"\
  OpenMqttGw/buero/CLIMAtoMQTT/([a-zA-Z0-9]+):.* "buero_$1"
attr buero_OpenMqttGw_mqtt2pilight devStateIcon online:10px-kreis-gruen offline.*:10px-kreis-rot
attr buero_OpenMqttGw_mqtt2pilight icon mqtt
attr buero_OpenMqttGw_mqtt2pilight model OpenMQTTGateway_MCU
attr buero_OpenMqttGw_mqtt2pilight readingList OpenMqttGw/buero/LWT:.* LWT\
  OpenMqttGw/buero/version:.* version\
  OpenMqttGw/buero/SYStoMQTT:.* { json2nameValue($EVENT,'Sys_')}\
  homeassistant/[^/]*sensor/[^/]+/config:.* { $EVENT =~ m,buero, ? json2nameValue($EVENT,"HASS_") : undef }
attr buero_OpenMqttGw_mqtt2pilight setList 24_1_on:noArg OpenMqttGw/buero/commands/MQTTtoPilight '{"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"}'\
24_1_on2:noArg {qq(OpenMqttGw/buero/commands/MQTTtoPilight {"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"})}
attr buero_OpenMqttGw_mqtt2pilight stateFormat <a href="http://Sys_ip" target="_blank">\
LWT\
</a>Version: version
attr buero_OpenMqttGw_mqtt2pilight webCmd 24_1_on


Tipp noch für das weitere Vorgehen:
Wenn du "pure" "on" und "off" hinbekommst, ist das für SetExtensions nützlich, auch wenn du dann ggf.  ein paar mehr MQTT2_DEVICE-Instanzen brauchst...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fhem@supergut

attr MQTT2_buero_bme setList 24_1_on2:noArg {qq(OpenMqttGw/buero/commands/MQTTtoPilight {"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"})}

Einwandfrei. Danke für die schnelle Hilfe. Und gesund bleiben!

set MQTT2Client publish OpenMqttGw/buero/commands/MQTTtoPilight  {"message":"{"systemcode":24,"unitcode":1,"on":1}","protocol":"elro_800_switch"}

Und ein Publish ist auch ohne Device direkt über den MQTT2_Client möglich.

PS:
Aber einen hab ich noch, dafür muss ich aber ein neues Thema eröffnen, denke ich? Wie lösche ich Readings in Devices älter als z.B. 30 Tage? Also in allen Devices gleichzeitig. Ohne Klick klick klick klick............

rudolfkoenig

Zitat{"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"}
Alles in {} wird als perl-Code interpretiert. D.h. entweder packt man alles ein:
{ '{"message":"{"systemcode":12,"unitcode":22,"on":1}","protocol":"elro_800_switch"}' }
oder man konvertiert es aus perl:
{ toJSON({message=>{systemcode=>12,unitcode=>22,on=>1},protocol=>"elro_800_switch"}) }
Letzteres ist dann interessant, wenn man Variablen ersetzen will, da sowas mit der ersten Methode unschoen ist.