Upgrade auf Mosqitto 2.0.11 Probleme mit MQTT und MQTT_GENERIC_BRIDGE

Begonnen von elo, 17 November 2023, 10:06:00

Vorheriges Thema - Nächstes Thema

elo

Guten Morgen,
ich habe meine alte mosquitto Installation von 1.x auf 2.0.11 geupgraded. Vorerst auch ohne Probleme.
Innerhalb von 24h treten allerdings Probleme mit dem fhem MQTT und/oder MQTT_GENERIC_BRIDGE auf und zwar bekomme ich seitens Mosqutto diesen Fehler:

Client 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 disconnected due to protocol error.

Login fhem:
2023-11-17T02:01:52: New client connected from 192.168.xxx.xxx:60904 as 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (p1, c1, k60).

Die Zeilen vor dem Fehler sehen wie folgt aus:

2023-11-17T08:00:54: Received PUBLISH from 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (d0, q1, r0, m65535, 'fhem/pv/PV89_SMAEM', ... (56 bytes))
2023-11-17T08:00:54: Sending PUBACK to 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (m65535, rc0)
2023-11-17T08:00:54: Client 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 disconnected due to protocol error.
2023-11-17T08:00:55: New client connected from 192.168.169.27:34152 as 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (p1, c1, k60).
...
2023-11-17T08:00:55: Received PUBLISH from 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (d1, q1, r0, m8, 'fhem/pv/PV89_SMAEM', ... (62 bytes))
2023-11-17T08:00:55: Sending PUBACK to 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (m8, rc0)
2023-11-17T08:00:55: Client 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 disconnected due to protocol error.
2023-11-17T08:00:55: New client connected from 192.168.169.27:34156 as 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (p1, c1, k60).

Das geht dann nur noch so, produziert viel Last auf fhem pi.
Restart mosquitto ändert nichts.
Restart fhem löst das Problem bis es innerhalb 24h wieder auftritt.

Was mich zusätzlich merkwürdig stimmt ist ein Client ID Wechsel nach dem ersten Protokollfehler:
2023-11-17T02:00:49: Client 65565217-f33f-969e-80ff-d5cd15239fed3ad0 disconnected due to protocol error....
2023-11-17T02:01:52: New connection from 192.168.169.27:60904 on port 1883.
2023-11-17T02:01:52: New client connected from 192.168.169.27:60904 as 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (p1, c1, k60).
2023-11-17T02:01:52: No will message specified.
2023-11-17T02:01:52: Sending CONNACK to 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75 (0, 0)
2023-11-17T02:01:52: Received PINGREQ from 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75
2023-11-17T02:01:52: Sending PINGRESP to 6556c98a-f33f-969e-1ee6-7f7b281ff97f6f75

Zu dieser Zeit restarte ich fhem. (Das mache ich da ansonsten irgendwann der Speicher/RAM nach einer Woche Betrieb out of Memory ist. )
1 2 * * * root /etc/init.d/fhem stop; sleep 30; /etc/init.d/fhem start

Im fhem schiebe ich viele Informationen aus den Modulen 76_SMAInverter.pm:v2.23.6-s28031/2023-10-08 und 77_SMAEM.pm:v4.3.1-s25136/2021-10-28
per MQTT_Publish ins Mosquitto. Ein paar Tasmota Steckdosen sind über fhem schaltbar und ein paar Homematic Infos wandern ebenfalls ins Mosquitto.


Teile der fhem.cfg:

attr global userattr cmdIcon devStateIcon devStateIcon:textField-long devStateStyle icon mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long sortby webCmd webCmdLabel:textField-long widgetOverride

define MQTTBroker MQTT 192.168.xxx.xxx:1883
attr MQTTBroker alias MQTTBroker
attr MQTTBroker icon mqtt
attr MQTTBroker room MQTT

define mqttGenericBridge MQTT_GENERIC_BRIDGE
setuuid mqttGenericBridge 5e299aaf-f33f-969e-884f-f7c3404edbdf003a
attr mqttGenericBridge IODev MQTTBroker
attr mqttGenericBridge alias mqttGenericBridge
attr mqttGenericBridge room MQTT
attr mqttGenericBridge stateFormat dev: device-count in: incoming-count out: outgoing-count

define SchaltDose1 MQTT_DEVICE
setuuid SchaltDose1 5df8f090-f33f-969e-b9c0-ac77237558e52c25
attr SchaltDose1 IODev MQTTBroker
attr SchaltDose1 alias LampeEsszimmerFensterbank
attr SchaltDose1 devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
attr SchaltDose1 group Lampen
attr SchaltDose1 icon hue_filled_br30
attr SchaltDose1 publishSet ON OFF cmnd/A4CF64/POWER
attr SchaltDose1 room MQTT,Wohnzimmer
attr SchaltDose1 subscribeReading_Licht stat/A4CF64/POWER
attr SchaltDose1 subscribeReading_Sensor tele/A4CF64/SENSOR
attr SchaltDose1 subscribeReading_Status tele/A4CF64/STATE
attr SchaltDose1 webCmd ON:OFF

Fhem Version:
2023.11.17 10:07:50 0: Featurelevel: 6.2
2023.11.17 10:07:50 0: Server started with 110 defined entities (fhem.pl:28126/2023-11-05 perl:5.028001 os:linux user:fhem pid:4348)
Was kann ich noch an Informationen liefern?
MQTT scheint nicht mehr state of art zu sein, MQTT_CLIENT2 wäre sinnvoller?

--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

rudolfkoenig

ZitatMQTT scheint nicht mehr state of art zu sein, MQTT_CLIENT2 wäre sinnvoller?
MQTT ist die aeltere Implementation, und verwendet externe MQTT-Bibliotheken.

MQTT2 ist eine Version ohne externe Bibliotheken, mit der Zielsetzung das Einbinden von MQTT Geraeten einfach zu gestalten. Wobei MQTT2_CLIENT (fuer die externen Broker) ein Nachzuegler ist, und komplizierter zu bedienen als die urspruengliche Loesung mit MQTT2_SERVER.

elo

Ich habe testhalber Mosqitto auf 2.0.15 geupgradet, leider ohne Erfolg.
Ein einfacher Austausch gegen MQTT2_CLIENT scheint nicht so einfach möglich zu sein, fhem startet nicht mehr.

alt:
define MQTTBroker MQTT 192.168.xxx.xxx:1883

neu:
define MQTTBroker MQTT2_CLIENT 192.168.xxx.xxx:1883


Was muss ich machen?
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

rudolfkoenig

ZitatWas muss ich machen?
Alle MQTT Geräte neu einrichten.
Die Clients für MQTT2_CLIENT (oder MQTT2_SERVER) sind nicht die MQTT_DEVICE Instanzen, sondern MQTT2_DEVICE.

MQTT2 ist mit Absicht nicht kompatibel zu MQTT2, damit es fuer Anfänger einfacher ist.

betateilchen

Wenn ich mir anschaue, dass da per cron noch mit init.d gearbeitet wird, um FHEM zu stoppen und zu starten, sollte man vielleicht darüber nachdenken, die gesamte FHEM Installation auf einen aktuellen Versionsstand zu bringen.

Zitat von: rudolfkoenig am 21 November 2023, 12:33:15MQTT2 ist mit Absicht nicht kompatibel zu MQTT2, damit es fuer Anfänger einfacher ist.

You made my day...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

elo

Warum neu einrichten?

Kann ich nicht einfach aus "define SchaltDose1 MQTT_DEVICE" ein "define SchaltDose1 MQTT2_DEVICE" machen?

Kann ich den MQTT_GENERIC_BRIDGE so lassen, bis auf dass sein IODev der neue MQTT2_CLIENT wird?
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

betateilchen

Zitat von: elo am 21 November 2023, 12:59:08Kann ich nicht einfach aus "define SchaltDose1 MQTT_DEVICE" ein "define SchaltDose1 MQTT2_DEVICE" machen?

Kannst Du schon so machen. Aber Du musst halt auch die Attribute für publish und subscribe entsprechend anpassen, da diese eine andere Syntax verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

elo

Ich habe einen MQTT2_CLIENT hinzugefügt, der läuft.
Ich habe die MQTT_GENERIC_BRIDGE auf den neuen CLIENT zeigen lassen, die MQTT_PUBLISH aus den SMA Modulen werden übermittelt, läuft.
Ich finde keine Beispiele wie ich publish und subscribe ändern kann/soll und das was ich finde erklärt es mir nicht.

attr SchaltDose1 publishSet ON OFF cmnd/A4CF64/POWER

attr SchaltDose1 subscribeReading_Licht stat/A4CF64/POWER
attr SchaltDose1 subscribeReading_Sensor tele/A4CF64/SENSOR
attr SchaltDose1 subscribeReading_Status tele/A4CF64/STATE

Ich brauche bitte Eure Hilfe!

--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

betateilchen

welchen device type hat denn SchaltDose1?

Zeig doch mal ein vollständiges list von SchaltDose1, das Ganze bitte in code-tags für bessere Lesbarkeit.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

elo

Internals:
   FUUID      5df8f090-f33f-969e-b9c0-ac77237558e52c25
   IODev      MQTTBroker
   NAME       SchaltDose1
   NR         64
   STATE      on
   TYPE       MQTT_DEVICE
   eventCount 444
   READINGS:
     2023-11-21 14:03:32   IODev           MQTTBroker
     2023-11-21 14:11:43   Licht           ON
     2023-11-21 15:52:07   Sensor          {"Time":"2023-11-21T15:52:07","ENERGY":{"TotalStartTime":"2019-11-27T18:07:45","Total":44.806,"Yesterday":0.065,"Today":0.017,"Period":0,"Power":7,"ApparentPower":13,"ReactivePower":12,"Factor":0.49,"Voltage":234,"Current":0.057}}
     2023-11-21 15:52:07   Status          {"Time":"2023-11-21T15:52:07","Uptime":"6T04:09:16","UptimeSec":533356,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":12,"POWER":"ON","Wifi":{"AP":1,"SSId":"xxx","BSSId":"xxxx","Channel":2,"Mode":"11n","RSSI":88,"Signal":-56,"LinkCount":1,"Downtime":"0T00:00:05"}}
     2023-11-21 14:11:43   state           on
     2023-11-21 15:52:07   transmission-state incoming publish received
   message_ids:
   publishSets:
     :
       topic      cmnd/A4CF64/POWER
       values:
         ON
         OFF
   sets:
     OFF       
     ON         
   subscribe:
     stat/A4CF64/POWER
     tele/A4CF64/SENSOR
     tele/A4CF64/STATE
   subscribeExpr:
     ^stat\/A4CF64\/POWER$
     ^tele\/A4CF64\/SENSOR$
     ^tele\/A4CF64\/STATE$
   subscribeQos:
     stat/A4CF64/POWER 0
     tele/A4CF64/SENSOR 0
     tele/A4CF64/STATE 0
   subscribeReadings:
     stat/A4CF64/POWER:
       cmd       
       name       Licht
     tele/A4CF64/SENSOR:
       cmd       
       name       Sensor
     tele/A4CF64/STATE:
       cmd       
       name       Status
Attributes:
   IODev      MQTTBroker
   alias      LampeEsszimmerFensterbank
   devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
   group      Lampen
   icon       hue_filled_br30
   publishSet ON OFF cmnd/A4CF64/POWER
   room       MQTT,Wohnzimmer
   subscribeReading_Licht stat/A4CF64/POWER
   subscribeReading_Sensor tele/A4CF64/SENSOR
   subscribeReading_Status tele/A4CF64/STATE
   webCmd     ON:OFF
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

elo

--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

Beta-User

Zitat von: elo am 24 November 2023, 09:30:37Habe ich dass so richtig gemacht?
Im Prinzip schon....

Der Reihe nach: Der wesentliche Unterschied bei mosquitto 1.x nach 2.x ist der, dass 2.x Zugangsdaten haben will, man also entweder diese auch bei jedem Client eingeben muss, oder das feature ausschalten könnte....

Ansonsten sieht dein Device danach aus, als wäre es ein Tasmota-geflashter ESP. Dafür kennt MQTT2_DEVICE eine ganze Reihe attrTemplate.
Es gibt ein paar Threads zum Umstieg von MQTT-"alt" auf MQTT2, die sollten über die Sufu zu finden sein, oder auch über das Wiki.

Das Problem: Du kannst vermutlich nicht "auf einen Rutsch" umstellen, weil du sonst einen kaum durchschaubaren Datensalat erzeugst, besser ist es, jedes Device einzeln anzufassen und erst mal auf einen MQTT2_SERVER umzuziehen...
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