NEWS
Korrekte Verwendung des MQTT Adapters
-
Hallo zusammen,
ich hab eine fast schon verzweifelte Frage in die Runde. Ich habe bisher den mqtt-client Adapter verwendet und der hat seine Sache aus meiner Sicht gut gemacht. Nun hab ich einige Steckdosen, die sich dank tasmota auch regelmäßig beim mosquitto melden und ihren Senf dazu geben und ich deren Infos gerne im IOBroker auswerten möchte.Schlau wie ich war (dache ich) ersetze ich den mqtt-client durch den mqtt Adapter. In dem Zuge wollte ich auch gleich die Informationen aus dem hmip und aus dem tr-064 Adapter Richtung mosquitto pushen.
Meine Konfiguration sieht jetzt wie folgt aus:
Subscribe Pattern: #
Maske zum Bekanntgeben eigener States: tr-064.0., zigbee., hmip.* (enden alle auf .*, aber das filtert der Editor gerade raus)
Eigene States beim Verbinden publizieren: ja
Client ID: blamqtt Adapter Version: 2.4.0
Ich starte den den mqtt Adapter und er behauptet steif und fest das er keine Verbindung mit Gerät oder Dienst hat. Im mosquitto-Log sehe ich aber, das iobroker sich connected hat, der Test im Adapter ist auch erfolgreich.. WTF? Lösche ich die mosquitto DB und bin schnell genug, verbinde sich der mqtt Adapter auch erfolgreich und ist grün. WTF WTF
Wenn ich mich mit dem MQTT Explorer auf den mosquitto verbinde, sehe ich die States von den Tasmota Geräten, sowie die zigbee Devices. hmip und tr-064 vermisse ich schmerzlich.
Die mqtt ReadMe ist mir leider keine große Hilfe, wer kann mir helfen und mir sagen, wo ich beim denken falsch abgebogen bin?
Gruß Mirko
-
@miwolf Es macht einfach Sinn einen Präfix für Deinen Export zu geben, wenn Import und Export gleich sind - dann würde der Adapter in einer Endlosschliefe landen.
Ich nutze 2 verschiedene Instanzen des MQTT-Adapters und exportiere iobroker Instanzen unter einem eigenen Präfix - das funktioniert grundsätzlich. Leider bekommt der MQTT ADapter als Client oft Probleme wegen dem admin5 - aber das ist ein anderes Thema.
So also mal mein Konfig.
mqtt.1 subscribed alles - aber exportiert nichts:
mqtt.2. exportiert bestimmte Infos aus dem tr-064.0, aber unter einem Präfix - ich habe es iobroker genannt
Die Trennung in 2 Instanzen wichtig - da beim Export andere Einstellungen in meinen Augen notwendig sind (gerade wenn Du Zustände schicken willst) - als wenn Du nur in FrontEnd zum Publishen und Lesen der gesendeten Infos siehst. Das Problem ist dass man oft eine falsche Vorstellung von mqtt hat.
Der mqtt Explorer sieht die ganzen aktuellen im mosquitto befindlichen Infos - aber mqtt bzw. mosquitto hält keine Infos vor (ausser retain) - die Infos im mqtt-Adapter bei subscriben von # enthält somit auch die ganze Historie kann aber deshalb gut - auch zur ggf. publishen verwenden.Also mein mqtt.1 Instanz ist quasi ein Abbild aller Nachrichten durch subscribe von # und publisbhed, wenn in dieser Instanz Änderungen stattfinden.
mqtt.2 veröffentlicht meine Devices im tr-064.0.devices unter iobroker - enthält aber selbst keine mosquitto Infos. Grund sind wie gesagt unterschiedliche mqtt Einstellungen.Unter den Objekten sieht es dann so aus:
Du siehst unter iobroker topic den tr-064.0 Ast im mqtt.1 - aber nichts unter mqtt.2 der diese Informationen in den mosquitto schickt.
Im mqtt-Explorer wirst Du aber immer nur Änderungen sehen - weil mosquitto oder ein mqtt-Datenbank keine permanente Datenbank für states ist.
Wie Du siehst habe ich auch unterschiedliche mqtt-Client ID verwendet - um im mosquitto Log zu unterscheiden von welcher Instanz was kommt.
-
@miwolf sagte in Korrekte Verwendung des MQTT Adapters:
hmip und tr-064 vermisse ich schmerzlich.
Wie gesagt - die siehst Du im Explorer auch nicht, wenn nicht gerade etwas publiziert wird. Mosquitto oder ein Mqtt-Broker ist keine Datenbank und der Explorer zeigt nur Nachrichten an, die er empfängt, wenn mqtt Nachrichten eintreffen. - Ich hoffe Du verstehst es - Du kannst also gar nicht sicher sein, dass die Informationen nicht da sind. Und um aktuelle Informationen zu senden muss ACK-True aktiviert sein.
In der Regel sind die Zustände in Deinem iobroker alle mit ACK-True und würden nie geschickt werden. Damit der Adapter aber nicht nur am SEnden der Zustände ist - empfiehlt es sich den 1. Haken ebenfalls zu machen. Normalerweise weißt eine Instanz nur Zustände auf - da ACK-false zur Steuerung der Hardware genutzt wird.
Zigbee und Tasmota siehst Du im mqtt-Explorer nur - weil diese zyklisch unter bestimmten topics infos veröffentlichen. Wenn sie das nicht täten würdest Du es im mqtt-Explorer auch nicht sehen.
Ich habe gerade mal meinen 0_userdata.0 auf veröffentlicht - funktioniert sofort - ich kann Dir nur raten das Level von INfo auf warn umstellst da dieser mqtt-Adapter jedes published topic in das Log schreibt und das ist dann im Nu voll.
Ausserdem scheint entweder der mqtt-Adapter oder der admin5 Probleme zu haben mit der topic Tiefe:
2021-12-02 03:14:39.774 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Maximum.Uni... 2021-12-02 03:14:39.798 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Maximum.Uni... 2021-12-02 03:14:39.799 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Maximum.Val... 2021-12-02 03:14:39.807 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Minimum.Uni... 2021-12-02 03:14:39.820 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Minimum.Uni... 2021-12-02 03:14:39.830 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperature.Minimum.Val... 2021-12-02 03:14:39.855 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Maximu... 2021-12-02 03:14:39.862 - warn: mqtt.1 (31728) [undefined] Topic name is too long: iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Maximum.UnitT... 2021-12-02 03:14:39.924 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Maximu... 2021-12-02 03:14:39.931 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Minimu... 2021-12-02 03:14:39.945 - warn: mqtt.1 (31728) [undefined] Topic name is too long: iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Minimum.UnitT... 2021-12-02 03:14:39.994 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.0.RealFeelTemperatureShade.Minimu... 2021-12-02 03:14:41.380 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.Day.WindGust.Direction.Localize... 2021-12-02 03:14:41.531 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.DegreeDaySummary.Cooling.UnitTy... 2021-12-02 03:14:41.559 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.DegreeDaySummary.Heating.UnitTy... 2021-12-02 03:14:41.754 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.Night.Evapotranspiration.UnitTy... 2021-12-02 03:14:42.436 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.Night.WindGust.Direction.Degree... 2021-12-02 03:14:42.446 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.Night.WindGust.Direction.Englis... 2021-12-02 03:14:42.458 - warn: mqtt.1 (31728) [undefined] Topic name is too long: mqtt.1.iobroker.0_userdata.0.accuWeather.home.daily.DailyForecasts.1.Night.WindGust.Direction.Locali.
Auch sonst spuckt der Admin5 Warnungen und Fehlermeldungen in Mengen, so dass Du alle Topics nachbearbeiten musst. Also eher weiter unten in der Hierarchie veröffentlichen. Leider hat man den admin5 überhaupt nicht mit mqtt getestet.
Letzlich bringst Du Deinen ganzen iobroker momentan zum Erliegen wenn Du über iobroker topics im großen Stil veröffentlichst. - Also hier eher sparsam vorgehen.
auch wenn es prinzipiell funktioniert:
siehe mqtt-Explorer.
Und nicht nachmachen - mit den userdata - alle meine Werte waren weg. (Konnte sie jedoch wiederherstellen. )
-
@MiWolf @mickym Also warum so kompliziert?
Ich hab einen Mosquitto installiert und den MQTT-Adapter als Client an diesem
Bei sieht das so aus:
Und wenn ich was an den Broker senden will nutze ich eben den mqtt.0 Pfad. Die Tasmota-Geräte sind dort mit den üblichen Datenpunkten, stat und tele für die Auswertung und cmnd wenn die etwas tun sollen
Die Maske zum Bekanntgeben eigener States ... Ich nutze MQTT auch in eigenen Programmen (z.B. ESP8266), die sehe Datenpunkte tauchen dann ja automatisch im ioBroker mqtt.0 auf und ich kann diese nutzen.
Zusätzliche Datenpunkte, z.B. für Tasmota Display-Ansteuerung unter MQTT, lege ich einfach von Hand an (meist beim testen im MQTT-Explorer)
-
@bananajoe Das war aber nicht die Fragestellung - erwill einfach alle Infos einer Instanz (z.Bsp. des tr-064 Adapters) aus dem iobroker (nicht mqtt) im mosquitto haben. Also das was Tasmota macht, soll der iobroker für nicht mqtt-sprechende Geräte an den mqtt-Broker publishen.
-
@mickym Stimmt, dann ist deine 2 Instanzen-Lösung mit unterschiedlichen Einstellungen der beste Weg
-
EIne andere Möglichkeit ist, wenn man mosquitto nicht flooden will, für jeden State der in Mosquitto ankommen soll, einen Alias anzulegen. z.B. unter einem Folder alias_0.0.mqtt-publish. Und dann alles, was da drunter liegt publishen.
-
@ostfrieseunterwegs sagte in Korrekte Verwendung des MQTT Adapters:
für jeden State der in Mosquitto ankommen soll, einen Alias anzulegen. z.B. unter einem Folder alias_0.0.mqtt-publish. Und dann alles, was da drunter liegt publishen.
dann kann man es ja doch direkt mit dem client machen und jeden Datenpunkt einzeln konfigurieren
-
@homoran
Wahrscheinlich Geschmackssache. Wie schön, dass ioB so viele verschiedene Möglichkeiten bietet.