[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE

Begonnen von betateilchen, 10 August 2018, 18:01:33

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Danke fuer den Hinweis, habs jetzt wieder eingebaut.
Kam mit dem "Show Neighbor Map" Patch rein.

mark79

#211
Zitat von: rudolfkoenig am 20 August 2018, 19:05:15
Zur Klarstellung: das ist kein direktes Problem in den hier behandelten MQTT2* Modulen, es entsteht, wenn FHEM mit sich selbst ueber das MQTT Protokoll unterhaelt.

Das Problem habe ich nun auch. Über Nacht ist mein Fhem abgeschmiert und wenn ich es starte, schmiert er mit genau dieser Fehlermeldung ab.
Also im Log ist es das letzte was dort auftaucht.

decode_string: insufficient data at /usr/local/share/perl/5.24.1/Net/MQTT/Message/Publish.pm line 36.


Ich habe jetzt schon die neuen MQTT devices aus der fhem.cfg per Hand gelöscht, aber trotzdem startet es nicht.
Auch habe ich die Fhem Module auf den neusten Stand geupdaet.

Hat jemand eine Idee, wie ich den Fehler behoben bekomme?

EDIT: wenn ich den Ordner /usr/local/share/perl/5.24.1/Net/MQTT/ umbenenne, dann startet Fhem korrekt. Nur dann werden die MQTT Module nicht mehr geladen:
configfile: Cannot load module MQTT
Cannot load module MQTT_DEVICE
...
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

rudolfkoenig

ZitatIch habe jetzt schon die neuen MQTT devices aus der fhem.cfg per Hand gelöscht, aber trotzdem startet es nicht.
...
EDIT: wenn ich den Ordner /usr/local/share/perl/5.24.1/Net/MQTT/ umbenenne, dann startet Fhem korrekt. Nur dann werden die MQTT Module nicht mehr geladen:
Ich sehe da einen gewissen Widerspruch.

Ich meine, das ist kein MQTT2 Problem, und sollte dem MQTT Maintainer gemeldet werden, sinnvollerweise mit einem passenden Betreff.

mark79

Zitat von: rudolfkoenig am 22 Dezember 2018, 12:50:45
Ich sehe da einen gewissen Widerspruch.

Ich meine, das ist kein MQTT2 Problem, und sollte dem MQTT Maintainer gemeldet werden, sinnvollerweise mit einem passenden Betreff.

Ich wusste erst nicht, welches Modul schuld daran ist und da die Fehlermeldung hier schon mal aufgetaucht ist, habe ich es hier rein gepackt.

Ich glaube ich stell dann mal auf mqtt2_client um. Hast du ein Tipp, wie ich alle Geräte migrieren kann?
Würde es nicht gehen, wenn man die vorhandenen einfach in MQTT2_CLIENT umschreibt?

### WZ_TV ###
define WZ_TV_Sonoff MQTT_DEVICE
attr WZ_TV_Sonoff DbLogExclude .*
attr WZ_TV_Sonoff IODev myBroker
attr WZ_TV_Sonoff devStateIcon ON:FS20.on OFF:FS20.off
attr WZ_TV_Sonoff icon ge_wht_steckdose
attr WZ_TV_Sonoff publishSet ON OFF cmnd/4ch/POWER1
attr WZ_TV_Sonoff room Geräte
attr WZ_TV_Sonoff stateFormat state
attr WZ_TV_Sonoff subscribeReading_state stat/4ch/POWER1
attr WZ_TV_Sonoff webCmd ON:OFF

Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

rudolfkoenig

ZitatWürde es nicht gehen, wenn man die vorhandenen einfach in MQTT2_CLIENT umschreibt?
Die beiden Module unterstuetzen unterschiedliche Attribtue, z.Bsp. muss publishSet nach setList und subscribeReading_state nach readingList und stateFormat gewandelt werden. Da du einen externen MQTT-Server verwendest, ist autocreate begrenzt.

Ich wuerde erst eine Instanz ueber FHEMWEB komplett konvertieren und testen, und danach die anderen in fhem.cfg mit einem Editor umbauen.

osr

Zitat von: rudolfkoenig am 22 Dezember 2018, 14:08:17
Die beiden Module unterstuetzen unterschiedliche Attribtue, z.Bsp. muss publishSet nach setList und subscribeReading_state nach readingList und stateFormat gewandelt werden. Da du einen externen MQTT-Server verwendest, ist autocreate begrenzt.

Ich wuerde erst eine Instanz ueber FHEMWEB komplett konvertieren und testen, und danach die anderen in fhem.cfg mit einem Editor umbauen.

Ja es geht definitiv nicht ohne einige Handarbeit. Ich habe das so gemacht, dass ich MQTT2_Server auf einem anderen Port installiert habe und bei einem Tasmota-Gerät den Port ebenfalls abgeändert habe. Dann habe ich mich mit der unterschiedlichen Handhabung vertraut gemacht. Danach habe ich mosquitto deaktiviert, den Port vom MQTT2_Server umgestellt, so dass sich die Geräte mit dem MQTT2_Server verbinden. Durch autocreate wurden die Geräte dann angelegt. Ich habe dann die Einstellungen vom alten MQTT Gerät in das neu angelegt MQTT2_DEVICE übernommen und doifs angepasst, dann das alte Gerät gelöscht. Zum Glück hatte ich da noch nicht so viele Geräte online.

mark79

Danke euch erstmal für die Tipps, aber ich habe das Problem nun doch gefunden und kann den Umzug noch etwas verschieben. :)

Schuld war meine eigene Schussligkeit...  ::) ich hatte vor ein paar Tagen versucht, ein mqtt bridge zur amazon aws cloud herstzustellen und da habe ich wohl den falschen lxc Container mit Fhem erwischt und in das reguläre mosquitto server Verzeichniss die bridge.conf mit reinkopiert.
Dann hat wohl der systemctl den mosquitto Dienst anscheinend über Nacht neu geladen und ihn dadurch stillgelegt.

Das ist mir vorhin aufgefallen, da ich mit mosquitto_sub auch nicht mehr auf meinen mosquitto Server drauf kam.

Ich habe die bridge.conf nun gelöscht und jetzt ist der Fhem Fehler auch verschwunden.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Omega

Ich habe einen CC2531-Router, der aber momentan nicht im Einsatz ist (disabled per attr).
Bei jedem shutdown restart (die mache ich aktuell häufig   :) ) bekomme ich in diesem Device 2 - bereits vorhandene - Readings spendiert und das Änderungsflag wird gesetzt.

Das Device:
define mq2.cc2531.Router MQTT2_DEVICE zigbee_0x00124b0018ed2581
attr mq2.cc2531.Router IODev MQTT2_FHEM_Server
attr mq2.cc2531.Router disable 1
attr mq2.cc2531.Router readingList zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }\
zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr mq2.cc2531.Router room MQTT

setstate mq2.cc2531.Router false
setstate mq2.cc2531.Router 2018-12-24 09:47:00 associatedWith MQTT2_zigbee_pi
setstate mq2.cc2531.Router 2018-12-18 11:59:37 linkquality 55
setstate mq2.cc2531.Router 2018-12-18 11:59:37 state false


Auszug aus dem Log:
2018.12.24 09:46:47 3 : CUL_HM set Az.Jalousie_rechts statusRequest
2018-12-24 09:46:47 Global global ATTR mq2.cc2531.Router readingList zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }
2018.12.24 09:46:49 3 : CUL_HM set Kueche.Jalousie statusRequest
...
2018.12.24 09:47:00 3 : CUL_HM set RM_Kellerflur_Heizung statusRequest
2018-12-24 09:47:00 Global global ATTR mq2.cc2531.Router readingList zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '') } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) } zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT, '', $JSONMAP) }


Das ist jetzt bestimmt nicht wichtig - nur irgendwo scheint im Ablauf etwas nicht zu passen.

LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

john30

Ich hätte einen change request für FHEM/10_MQTT2_DEVICE.pm (rev 18056) Zeile 171, um auch JSON erkennen zu können, in welchem Zeilenumbrüche zwischen Elementen enthalten ist.
Dazu müsste die o.g. Zeile m.E. von
if($value =~ m/^{.*}$/) {
auf
if($value =~ m/^{.*}$/s) {
geändert werden.
author of ebusd

rudolfkoenig

Danke fuer den Hinweis, habs eingebaut.

john30

author of ebusd

m0urs

Ich habe gerade mal versucht, Owntracks für iOS (https://owntracks.org/) mit MQTT2 Server zu verbinden. Beim Verbindungsaufbau kommt folgende Fehlermeldung in FHEM:

2019.01.29 08:03:28 4: Connection accepted from MQTT2_192.168.1.36_64508
2019.01.29 08:03:28 5: CONNECT: (0)(6)MQIsdp(3)(204)(0)<(0)(14)mqtttestdevice(0)(25)owntracks/mqtt/testdevice(0)"{"tst":"1548745369","_type":"lwt"}(0)(4)mqtt_user(0)(20)mqtt_password
2019.01.29 08:03:28 2: MQTT2_192.168.1.36_64508 wants unclean session, disconnecting

In der App erscheint die folgende Meldung:

MQTT CONNACK: unacceptable protocol version { NSLocalizedDescription = "MQTT CONNACK: unacceptable protocol version";

Ich habe Protokoll-Version 3 und 4 in der App ausprobiert.

Kann mir bitte jemand auf die Sprünge helfen? Danke!



Mitch

mit heutigem Update kommt folgende Fehlermeldung:
ERROR: >< returned by the MQTT_GENERIC_BRIDGE ParseFn is invalid, notify the module maintainer
FHEM im Proxmox Container

rudolfkoenig

@Mitch: kannst du bitte ein "attr global verbose 5" Log hinzufuegen, oder einen Weg nennen, wie ich das nachstellen kann?

@m0urs: Ich will kein "unclean sesssion" unterstuetzen. Aber nachdem ich die RFC nochmal genauer gelesen habe, meine ich, dass man das nicht als Fehler meldet, sondern als "ich habe kein Session, aber connect ist OK". Habe das Modul geaendert (morgen ab 8 per update verfuegbar), bitte um Feedback.

Mitch

Zitat von: rudolfkoenig am 30 Januar 2019, 21:20:16
@Mitch: kannst du bitte ein "attr global verbose 5" Log hinzufuegen, oder einen Weg nennen, wie ich das nachstellen kann?

Hier mal ein Ausschnitt des Fehlers:
2019.01.30 21:26:28 1: ERROR: >< returned by the MQTT_GENERIC_BRIDGE ParseFn is invalid, notify the module maintainer
2019.01.30 21:26:28 5: End notify loop for MQTT2_DVES_E895AC
2019.01.30 21:26:28 5: End notify loop for Verbrauch
2019.01.30 21:26:28 5: Starting notify loop for Verbrauch, 1 event(s), first is MQTT2_DVES_E895AC.SENSOR_ENERGY_Power: <html><div style="width:500px; text-align:center; border: 1px solid #ccc; background:-webkit-linear-gradient(left, red 0%, rgba(0,0,0,0) 0%)">0 Watt</div></html>
2019.01.30 21:26:28 5: Starting notify loop for MQTT2_DVES_E895AC, 3 event(s), first is SENSOR_Time: 2019-01-30T21:26:29
2019.01.30 21:26:28 1: ERROR: >< returned by the MQTT_GENERIC_BRIDGE ParseFn is invalid, notify the module maintainer
2019.01.30 21:26:28 5: End notify loop for MQTT2_DVES_E895AC
2019.01.30 21:26:28 5: createNotifyHash
2019.01.30 21:26:28 5: Starting notify loop for MQTT2_DVES_E895AC, 4 event(s), first is STATE_Wifi_RSSI: 86
FHEM im Proxmox Container