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?
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.
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?
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.
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...
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?
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.
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!
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.
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
Habe ich dass so richtig gemacht?
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...