[Gelöst] Semikolon in MQTT Message

Begonnen von tobox, 17 Februar 2020, 11:24:53

Vorheriges Thema - Nächstes Thema

tobox

Liebes Forum,

ich habe ein ganz einfaches Problem und finde einfach nicht die Lösung. Ich nutze schon ewig FHEM und kommte trotzdem nicht weiter. Ich muss eine MQTT-Message schicken, die ein Semikolon enthält. Hier mein MQTT_DEVICE:

define Sonoff_RF_2 MQTT_DEVICE
...
attr Sonoff_RF_2 publishSet_Key7 cmnd/sonoff-rf-2/Backlog
...


Hier die Anwendung:

define SSD_Elro_neu_12_B_di DOIF ([SSD_Elro_neu_12_B:"on"]) (set Sonoff_RF_2 Key7 "RfRaw AA B0 21 03 08 0140 03AC 2648 01010101011001100110011001010110011001100101011002 55 ;; RfRaw 0")


Das Problem:

* die Anführungszeichen werden mittgeschickt
* der Teil hinter dem Semikolon wird nicht mitgeschickt

Wenn ich mit mosquitto_pub arbeite, und "RfRaw AA B0 21 03 08 0140 03AC 2648 01010101011001100110011001010110011001100101011002 55 ;; RfRaw 0" and die Variable "cmnd/sonoff-rf-2/Backlog" schicke, funktioniert alles korrekt. Ich habe es mit FHEM aber nicht hinbekommen, diesen Text zu verschicken. Ohne die Anführungszeichen wird zumindest der erste Teil verschickt, das geht schonmal. Aber dann fliegt der RfRaw 0 Teil ganz aus der Config raus. Ich bin Ratlos. Habe schon Double Quotes, Single Quotes, einfache Semikolons, doppelte Semikolons, vierfache Semikolons, und einige Kombinationen durchprobiert.

Wer kann helfen?


tobox

#1
Hier scheint schon jemand anderes an die Limits des MQTT_DEVICE gestoßen zu sein:

https://forum.fhem.de/index.php?topic=81174.0

Entweder die FHEM-Architektur oder MQTT_DEVICE scheinen einfach nicht für beliebige Strings ausgelegt zu sein, da ist wohl etwas zu viel Logik im Spiel um einfach blind irgendwelche Texte zu verschicken :-(

Wäre schön, wenn da jemand eine Idee oder einen Workaround wüsste.

rudolfkoenig

ZitatEntweder die FHEM-Architektur oder MQTT_DEVICE scheinen einfach nicht für beliebige Strings ausgelegt zu sein
Bei FHEM-Architektur muss ich protestieren.
Das " mitgeschickt wird, haette ich auch erwartet, set ist schliesslich ein FHEM Befehl, und da hat " keine Bedeutung.
DOIF kenne ich nicht genau genug, vmtl. wird ; als Befehlstrenner interpretiert.
Sicher weiss man aber, wenn man im richtigen Forumsbereich nachfragt.


Beta-User

Zur FHEM-Architektur hat Rudi was gesagt, eventuell muß man eben etwas tricksen, ich kann nur mangels DOIF-Kenntnissen nicht sicher sagen, ob auf der Ebene oder auf Ebene der MQTT-Module.

Es könnte mit den "klassischen Modulen" gehen, wenn du das publish nicht über das MQTT_DEVICE machst, sondern direkt über das IO (evtl. müssen die ";" escaped werden).

Alternativer Workaround:
Jedenfalls ist die MQTT2_.*-Familie in der Lage, so ziemlich alles zu versenden, Beispiele für Backlog-Befehle findest du in der mqtt2.template file: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template
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

tobox

Zitat von: rudolfkoenig am 17 Februar 2020, 16:45:23
Bei FHEM-Architektur muss ich protestieren.
Das " mitgeschickt wird, haette ich auch erwartet, set ist schliesslich ein FHEM Befehl, und da hat " keine Bedeutung.
DOIF kenne ich nicht genau genug, vmtl. wird ; als Befehlstrenner interpretiert.
Sicher weiss man aber, wenn man im richtigen Forumsbereich nachfragt.

Tatsächlich! Es scheint eher ein DOIF-Problem zu sein. Wenn ich im Eingabefeld von FHEM folgendes eingebe:

set Sonoff_RF_2 Key7 RfRaw AA B0 21 03 08 0140 03AC 2648 01010101011001100110011001010110011001100101011002 55 ;; RfRaw 0

dann sehe ich im MQTT-Monitor die richtigen Daten!

cmnd/sonoff-rf-2/Backlog RfRaw AA B0 21 03 08 0140 03AC 2648 01010101011001100110011001010110011001100101011002 55 ; RfRaw 0


Mal sehen, ob ich das DOIF nicht doch überzeugen kann, das richtige zu tun.

Danke schonmal.

hexenmeister

Statt MQTT_DEVICE kannst du auch MQTT_GENERIC_BRIDGE nehmen. Geht auch mit MQTT2.

tobox

Ich glaube, damit geht es jetzt!!! Man beachte die 4 Semikolons hintereinander.

define SSD_Elro_neu_12_B_di DOIF ([SSD_Elro_neu_12_B:"on"]) ( { fhem('set Sonoff_RF_2 Key7 RfRaw AA B0 21 03 08 0140 03AC 2648 01010101011001100110011001010110011001100101011002 55 ;;;; RfRaw 0');; } )