Topic mit Leerzeichen oder Doppelpunkt funktioniert nicht

Begonnen von John, 29 Dezember 2017, 00:25:19

Vorheriges Thema - Nächstes Thema

John

ich möchte folgendes Kommando absetzen:

set MyBroker publish  hm/set/HM-LC-Bl1PBU-FM OEQ0294000:1/LEVEL 1

Das klappt leider nicht, da sich im Topic ("hm/set/HM-LC-Bl1PBU-FM OEQ0294000:1/LEVEL") ein Leerzeichen befindet.

Gibt es hierzu eine Lösung ?
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

hexenmeister

Wird nicht klappen. Beim publish wird die Eingabe ja bereits zerlegt geliefert. Ein Teil wird zum Topic, der Rest wieder per join und als Value gesendet.
Warum muss der Topic genau so heißen?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

John

Am Aufbau der Topics kann ich nicht wirklich was ändern.

Ich verwende in der CCU2 das Addon HM2MQTT, das genau diese Art von Topics generiert.

https://github.com/owagner/hm2mqtt

Subscribe funktioniert tadellos, nur beim Publishen kommt es zu den beschriebenen Problemen.

Ein Topic mit einem Leerzeichen vom MQTT-Standard verboten ?

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

hexenmeister

Bis auf einen kleinen Rest (mehrefache Leerzeichen nacheinander werden zu einem), müsste 'parseParams' (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#parseParams) die Lösung sein. Dann könnte man mit ' oder " Zeichen arbeiten. Was MQTT-Standard zu den Leerzeichen sagt, weiß ich jedoch nicht.
Jetzt muss man nur implementieren, testen, 'nen Patch erstellen und den Maintainer um die Übername bitten.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

John

Danke für den Hinweis.

Was der Standard zum Aufbau von Topics sagt:


ZitatTopic name
A UTF-encoded string.
This must not contain Topic wildcard characters.
When received by a client that subscribed using wildcard characters, this string will
be the absolute topic specified by the originating publisher and not  the subscription string used by the client.
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

#5
Auch ein Doppelpunkt im Topic macht Probleme.
Habe daher den Titel des Threads geändert.

Dieser wird als Separator in den key/value-parametern wie "qos" verwendet.

Das Problem betrifft mindestens auch das Modul MQTT_DEVICE.

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

hexenmeister

Mist. Damit wird eine abwärtskompatibele Lösung schwierig  >:(
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

John

Ich habe nun einige Anpassungen bei den Modulen im Anhang vorgenommen:

* Topics können nun in Hochkommata gesetzt werden, so daß Leerzeichen und Doppelpunkt nicht als Separator interpretiert werden
* diese Maßnahmen sind nur beim den "set Publish" Kommandos berücksichtigt, beim Subscriben gab es ohnehin keine Probleme

funktionierendes Beispiel für MQTT_DEVICE mit Doppelpunkt und Leerzeichen im Topic

attr EG.HW.HM.ROLL publishSet_LEVEL 0 1 'hm/set/HM-LC-Bl1PBU-FM OEQ0294212:1/LEVEL'


Das MQTT-Modul kann  nun mit folgendem Befehl umgehen:


set MyBroker publish 'hm/set/HM-LC-Bl1PBU-FM OEQ0294212:1/LEVEL' 0.7


Vielleicht mag der eine oder andere die Änderungen noch gegen seine Installation testen.

In etwa einer Woche werde ich dem Maintainer den Änderungsvorschlag unterbreiten.

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP


hexenmeister

Ähhhm... Darf ich fragen, warum die Methode 'parseParams' in die 00_MQTT.pm reinkopiert wurde anstatt sie aus fhem.pl zu benutzen? :o
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisler

parseParams  fhem.pl
my ($key, $value) = split( '=', $param, 2 );
parseParams 00_MQTT.pm
my ( $key, $value ) = split( ':', $param, 2 );

Grüße
Stephan

hexenmeister

Stimmt, danke. Irgendwie trotzdem suboptimal. Schade, dass die Originalmethode nicht parametrisierbar ist. :(
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

Definitiv suboptimal. Habe nach dem Update auf meinem Entwicklung-FHEM mich nicht schlecht gewundert, dass nichts mehr geht... Tja, in meinem MQTT_GENERIC_BRIDGE-Modul nutze ich auch Methode parseParams (aus fhem.pl) und importiere Methoden aus den Packages main und MQTT. Dort wird jetzt eine Methode mit dem selben Namen definiert und auch exportiert. Hat natürlich mein Modul auch diese neue 'gefunden' und es hat nichts mehr gepasst :o
Ich wäre zumindest für einen neuen Namen. Ich kann auch gerne bei Gelegenheit einen Patch erstellen.
Habe meine Problem jetzt durch Eingabe von Package gelöst.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisler

doof.  :( Quickfix finde ich nicht so toll dann lieber ein Patch der auch auf MQTT_GENERIC_BRIDGE abgestimmt ist.

Grüße
Stephan

hexenmeister

Ja, muss man schauen, wie man das am saubersten löst. Eine bahnbrechende Idee habe ich noch nicht.  :-\
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy