mqtt publish mit retain senden

Begonnen von Spartacus, 05 Dezember 2023, 22:56:40

Vorheriges Thema - Nächstes Thema

Spartacus

Moin zusammen,

ich benutze fhem aktuell als enocean gateway um meinen alten Eltako FTS14 Devices pr mqtt in Homassistant zu benutzen. Die HA Unterstützung für enocean ist da nicht so prickelnd!

Hauptsächlich geht es mir um Sensoren, die über ein FTS14EM angebunden sind. Allerdings habe ich nach einem Neustanrt von HA immer das Problem, dass die Sensoren den Zusatnd "unknown" annehmen. Fhem zeigt hier brav den "released" bzw. "pressed" - Status an.

Die Überlegung ist, das retain Flag bei diesen Sensoren zu setzten, damit HA immer den letzten Zustand geliefert bekommt und meine Automations einen definierten Zustand haben. Ist das in diesem fall die Gängige Praxis oder wie löst man so etwas? Welche NAchteile hätte das Retain-Flag?

Aktuell sieht die Konfiguration des Devices so aus:
defmod EG.ss.TK.Haustuer EnOcean FFA2BD81
attr EG.ss.TK.Haustuer userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
attr EG.ss.TK.Haustuer IODev TCM310
attr EG.ss.TK.Haustuer alias Reedkontakt Haustür
attr EG.ss.TK.Haustuer comment Eltako FTS14-EM Kanal 1
attr EG.ss.TK.Haustuer event-on-change-reading buttons
attr EG.ss.TK.Haustuer group FTS14-EM Keller
attr EG.ss.TK.Haustuer manufID 00D
attr EG.ss.TK.Haustuer model FT55
attr EG.ss.TK.Haustuer mqttForward all
attr EG.ss.TK.Haustuer mqttPublish buttons:topic={"$base/$device/buttons"}
attr EG.ss.TK.Haustuer room 98-Geräte -> EnOcean,HASS
attr EG.ss.TK.Haustuer subType switch

setstate EG.ss.TK.Haustuer released
setstate EG.ss.TK.Haustuer 2023-11-28 22:01:37 .lastChannel A
setstate EG.ss.TK.Haustuer 2023-12-01 16:36:37 IODev TCM310
setstate EG.ss.TK.Haustuer 2023-12-05 22:41:13 buttons released
setstate EG.ss.TK.Haustuer 2023-11-28 22:01:37 channelA A0
setstate EG.ss.TK.Haustuer 2023-12-05 22:41:06 channelB B0
setstate EG.ss.TK.Haustuer 2023-12-05 22:41:13 state released
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

rudolfkoenig

ZitatWelche NAchteile hätte das Retain-Flag?
In diesem Fall: dass die gespeicherten Werte nicht mit der Wirklichkeit uebereinstimmen, z.Bsp. weil FHEM oder der MQTT-Server nicht aktiv war.

Generell kann es auch zu Problemen fuehren, wenn man die retain Topics Zeitstempel oder Zufallszahl beinhalten, weil dann die gespeicherte und zu verarbeitende Menge ohne Grenze waechst.

Ich wuerde in diesem Fall aber auch auf das retain Flag setzen, und darauf achten, dass FHEM nicht die gleichen Topics abonniert.

Spartacus

Hallo,

fhem published und HA abonniert. Von daher setze ich doch das retain bei fhem, so wie hier, oder?

attr EG.ss.TK.Haustuer mqttPublish buttons:topic={"$base/$device/buttons"} buttons:retain=1
ZitatIch wuerde in diesem Fall aber auch auf das retain Flag setzen, und darauf achten, dass FHEM nicht die gleichen Topics abonniert.
wie ist das zu verstehen, über en Zeitstempel?
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

Anderer Ansatz:
Kann sich Dein HA nicht nach einem Neustart bei FHEM "melden" (oder FHEM den Neustart von HA irgendwie erkennen), damit Du in FHEM mit einem notify reagieren und die DANN aktuellen Werte per publish verschicken kannst?

So habe ich das bei mir mit den Heizungsreglern auf ESP32 Basis gelöst: sobald das "connected" topic in FHEM ankommt, schickt FHEM ein publish mit der zuletzt eingestellten Solltemperatur.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

sehr cool! Auf diese Idee, bin ich noch nicht gekommen! Muss ich mir mal ansehen! Das wäre ne sehr elegante Lösung! Danke für diesen guten Tipp! Dann könnte ich den enocean Kram tatsächlich weiter verwenden
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

robind

Hi,

ich habe mehr oder weniger das gleiche Problem. Wie hast du das am Ende gelöst @Spartacus? Ich weiß leider nicht genau wie ich in fhem ein script oder ähnliches schreiben könnte, welches auf eine mqtt Nachricht wartet und dann die aktuellen Werte noch einmal verschickt. Würde mich über einen Tipp hier freuen.

Vielen Dank im Voraus!

betateilchen

Zitat von: robind am 30 März 2025, 14:29:27Ich weiß leider nicht genau wie ich in fhem ein script oder ähnliches schreiben könnte, welches auf eine mqtt Nachricht wartet und dann die aktuellen Werte noch einmal verschickt.

Das nennt sich "notify" und gehört zu den absoluten Basics von FHEM. Es ist in der commandref ausführlich beschrieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

...nur dass das Konzept m.E. bzgl. Homeassistant nicht optimal ist, https://forum.fhem.de/index.php?msg=1337224...
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

betateilchen

Und m.E. ist es immer die bessere Lösung, einen Wert "bei Bedarf" bzw. "auf Anforderung" nochmal zu publishen anstatt ihn per retain mit unabsehbaren Folgen zu verhunzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Schon. Oder halt auf der Gegenseite verhindern, dass man dort mit Totalamnestie startet....
Ein pauschales publish ohne Prüfung auf Aktualität (und Effekt auf der Gegenseite) ist jedenfalls auch nicht wirklich zu empfehlen.

Just my 2 ct.
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

betateilchen

Zitat von: Beta-User link=msg=1338254 date=1743340276Totalamnestie

YMMD  ;D
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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

robind

Vielen Dank für die schnelle Antwort.
Ich würde es jetzt doch erst einmal mit dem retain probieren, konnte aber in der Doku nichts dazu finden wie ich das setze. Mein aktueller Befehl für mqttPublish lautet aktuell wie folgt:

mqttPublish temperature|state|valveposition|mode|rferror:topic={"fhem_max_state/$device/$name"}

Kann ich den einfach wie folgt umschreiben um bei allen Werten das retain flag zu setzen?

mqttPublish temperature|state|valveposition|mode|rferror:topic={"fhem_max_state/$device/$name"}:retain=1

Vielen Dank im Voraus.

betateilchen

Zitat von: robind am 30 März 2025, 17:17:32Ich würde es jetzt doch erst einmal mit dem retain probieren, konnte aber in der Doku nichts dazu finden wie ich das setze.

Dann hast Du nicht richtig geschaut. In der commandref zu MQTT_GENERIC_BRIDGE sind in der Attributbeschreibung zu mqttPublish sogar Beispiele mit retain aufgeführt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!