Patch für mehrere Probleme mit Topics und Payload

Begonnen von hexenmeister, 26 März 2018, 23:01:59

Vorheriges Thema - Nächstes Thema

hexenmeister

Eher nicht, hier sind wir mit dem Thema falsch. Am besten einen neuen Thread eröffnen. Ich hätte auch schon mal eine Idee, wie man das halbwegs generisch implementieren könnte, wäre voraussichtlich nicht mal besonders aufwendig. Das wäre aber definitiv einen neue Baustelle. Und davon habe ich gerade genug. Zuerst möchte ich meine GENERIC_BRIDGE endlich mal fertigstellen.

Ich schlage vor, Du erstellst eien neuen Thread, dort könnte ich meine Vorschlag beschreiben. Dient zunächst als Merker, dann irgendwann als Testthread für die Implementierung.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

SabineT

Das autoSubscribeReadings von Topics mit Leerzeichen dürfte noch nicht richtig funktionieren.

Folgende Topics werden empfangen (mit mosquitto_sub abgefragt):
iobroker/rpi2/0/memory/memory total 927.22
iobroker/rpi2/0/memory/memory free 98.38
iobroker/rpi2/0/memory/memory available 164.58


autoSubscribeReadings hab ich so gesetzt:
attr ioBroker_RPI autoSubscribeReadings iobroker/rpi2/0/memory/+

die RAW definition vom device im FHEM schaut danach so aus:
defmod ioBroker_RPI MQTT_DEVICE mqttserver
attr ioBroker_RPI IODev mqttserver
attr ioBroker_RPI autoSubscribeReadings iobroker/rpi2/0/memory/+
attr ioBroker_RPI stateFormat transmission-state
attr ioBroker_RPI subscribeReading_memory available iobroker/rpi2/0/memory/memory available

setstate ioBroker_RPI incoming publish received
setstate ioBroker_RPI 2018-04-08 07:31:00 memory available 164.58
setstate ioBroker_RPI 2018-04-08 07:31:00 memory free 98.38
setstate ioBroker_RPI 2018-04-08 07:31:00 memory total 927.22
setstate ioBroker_RPI 2018-04-08 07:31:00 transmission-state incoming publish received


Es werden also 3 Readings angelegt, allerdings mit Leerzeichen im Namen, die dazugehörigen subscribeReading Attribute sind aber nicht vorhanden bzw. falsch! Daher werden danach die Readings auch nicht upgedated.

Wenn ich die subscribeReading selber anlege und die Leerzeichen bei den Namen durch z.B. _ ersetzte und die topics in Hochkomma tuts aber richtig:
attr ioBroker_RPI subscribeReading_memory_available 'iobroker/rpi2/0/memory/memory available'
attr ioBroker_RPI subscribeReading_memory_free 'iobroker/rpi2/0/memory/memory free'
attr ioBroker_RPI subscribeReading_memory_total 'iobroker/rpi2/0/memory/memory total'


lg, Sabine

hexenmeister

Stimmt, mit Leerzeichen hat autoSubscribe tatsächlich Probleme.
Da FHEM die Werte schon einzeln zerlegt an die Attr-Routine übergibt, ist das nicht ganz einfach zu umgehen. ParseParams wird meines Wissens nicht für AttrFn unterstützt, man müsste höchstens alle Werte wieder zusammen werfen und neu zerlegen. Alles mit einem nicht ganz unaufwendigen Umbau (und vor allem Test) verbunden.
Ich nutze selbst autoSubscribe nicht daher überlasse ich die Implementierung gern jemanden anderen ;)

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

SabineT

Wenn man's weis ist das zumindest für mich kein Problem. Ich hab einfach die subscribeReading_* Attribute für dieses Device einzeln angelegt. Wollte nur darauf hinweisen und eventuell hilft es ja anderen, die in die gleiche Falle tappen zu wissen, dass autoSubscribe bei Leerzeichen in Topics halt nicht verwendet werden sollte.

Wäre aber vielleicht sinnvoll, in der Comandref darauf hinzuweisen (auch, dass das man dann die Topics in ' ' setzen sollte).

BTW:

lg, Sabine

hexenmeister

Alles richtig, Hinweise sind immer gut :)
Ich würde es mir schon annehmen, aber es sind gerade so viele unfertige Baustellen hier...
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

SabineT

Zitat von: hexenmeister am 08 April 2018, 17:15:49
Alles richtig, Hinweise sind immer gut :)
Ich würde es mir schon annehmen, aber es sind gerade so viele unfertige Baustellen hier...
Kein Problem. Behalte es halt im Hinterkopf, dass du das mal bei Gelegenheit in die Comandref mit aufnimmst.
Die unfertigen Baustellen sind auf jeden Fall wichtiger.
1ch weis aus eigener Erfahrung, Doku ist  oft nicht am letzten Stand, speziell wenn man mehrere Sachen gleichzeitig bearbeiten muss.

Danke jedenfalls für deine Arbeit!

lg, Sabine

hexenmeister

Ein kleines Fix für Log-Warnung, falls kein last-wlll definiert ist, außerdem Problem mit der Reihenfolge der Definition in fhem.cfg sollte behoben sein (Problem, wenn MQTT_DEVICE oder MQTT_BRIDGE vor dem IODev (also MQTT) definiert sind).

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

Änderungen:
Automatische Anlage des 'stateFormat'-Attributes falls nicht vorhanden entfernt.
Hinweis in die Dokumentation aufgenommen, dass bei Topics mit Leerzeichen mit 'autoSubscribeReadings' nicht funktionieren.

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

Und noch ein kleiner Fix bei der Verarbeitung von Topic-Matching (Betrifft $-Zeichen).

Es habes sich schon einige Änderunge angesammeln, laufen bei mir stabil, Beschwerden gab es hier auch anscheinen nicht  :)
@Stephan, magst Du diese in die RePo aufnehmen?

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisler

@hexenmeister kann ich machen.  :)

Grüße
Stephan

hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Master_Nick

#26
Also ich kann was feststellen, ich bin mir nur unklar, ob die Herkunft hier liegt oder in der Generic Bridge..

War jetzt eine Woche unterwegs aber Sonntag 22.04. ging das nocht: Ich konnte über MQTT Temperaturvorgaben an FHEM geben und FHEM gab es ans Thermostat weiter - nun bleibt der letzte Schritt aus obwohl das Reading geändert wrid.

https://forum.fhem.de/index.php/topic,81418.msg797984.html#msg797984
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)


hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Scotch

Hallo Hexenmeister,

kannst du mir bitte an einem kurzen Beispiel erklären, wie ich einen JSON String von FHEM zu einem Device per MQTT übertrage.
Gruß Scotch