Verloren im MQTT Dschungel - Geräte schalten

Begonnen von skratter, 28 März 2021, 00:27:28

Vorheriges Thema - Nächstes Thema

skratter

Hallo liebe FHEM Gemeinde,
nachdem ich im Haus allerhand Enocean Geräte habe und es geschafft habe die Schalter und Aktoren gängig zu machen, wollte ich nun die Schalter mit anderen Geräten verbinden.

Neben FHEM betreibe ich noch eine Home Assistant und Homey Installation, dabei hat eine "Verdrahtung" über MQTT aus meiner Sicht am meisten Sinn.

In Homey eingerichtet Geräte bekomme ich ich ohne Probleme nach FHEM und HA. Über HA kann ich diese auch ohne Probleme schalten, da Homey eine HA Integration besitzt. Wenn ich das gleiche über FHEM Versuche, klappt das irgendwie leider nicht.

Setze ich die  publishs auf dem Device entsprechend meines Homeys, dann kommt eine Endlosschleife zustande, die Fhem abstürzen läst.
Mach ich es mit einem eigenen Topic, schaltet das Gerät nicht, da ich es erst noch in einem der anderen Systeme übersetzen müsste.

Habe ich hier einen Denkfehler? Irgendwie dachte ich, dass es einfacher wird.

Long Story Short: Wie kann ich automatisch erzeugte MQTT Geräte über FHEM steuern?

Später mal:
Letztlich möchte ich im nächsten Schritt mit meinen Wandschaltern bspw. eine HUE steuern. Dabei ist der Schalter in FHEM und die HUE in Homey eingerichtet.

So sieht mein Device gegenwärtig aus und ist über die Bridge mit meinem mosquitto Server verbunden.
Attributes
IODev mqtt_io

mqttPublish *:topic={"mqttFhem/$device/$name"}

readingList
homey/esstisch/onoff:.* onoff
homey/esstisch/onoff/\x24name:.* _name
homey/esstisch/onoff/\x24retained:.* _retained
homey/esstisch/onoff/\x24settable:.* _settable
homey/esstisch/onoff/\x24datatype:.* _datatype
homey/esstisch/dim:.* dim
homey/esstisch/dim/\x24name:.* _name
homey/esstisch/dim/\x24retained:.* _retained
homey/esstisch/dim/\x24settable:.* _settable
homey/esstisch/dim/\x24unit:.* _unit
homey/esstisch/dim/\x24datatype:.* _datatype
homey/esstisch/dim/\x24format:.* _format
homey/esstisch/light-mode:.* light-mode
homey/esstisch/light-mode/\x24name:.* _name
homey/esstisch/light-mode/\x24retained:.* _retained
homey/esstisch/light-mode/\x24settable:.* _settable
homey/esstisch/light-mode/\x24datatype:.* _datatype
homey/esstisch/light-mode/\x24format:.* _format
homey/esstisch/\x24type:.* _type
homey/esstisch/\x24name:.* _name
homey/esstisch/\x24properties:.* _properties
homey/esstisch/state:.* state
homey/esstisch/onoff/set:.* set
homey/esstisch/dim/set:.* set

room MQTT2_DEVICE

setList
on homey/esstisch/onoff true
off homey/esstisch/onoff false


VG
Daniel

kadettilac89

du hast schon MQTT2 DEvices, zumindest dem Auszug nach ... in diesen gibt es  "set xxxx attrTemplate". Damit wird ein weiteres Device angelegt in dem dann, abhängig vom Template, schon Aktionen vorhanden sind. Diese kannst dann schalten, oder Readings auswerten. Ohne großen Konfigurationsaufwand.

schau dir hierzu mal das Wiki an, das ist mehr Info

https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#attrTemplate
https://wiki.fhem.de/wiki/MQTT2_DEVICE#attrTemplate

skratter

Hi,
vielen Dank für den Hinweis.
Das schaue ich mir noch mal genauer an.
Was mache ich, wenn es für meine Geräte kein Template gibt?
Bspw. Philips Hue oder andere die nicht in der Liste sind.

VG
Daniel

kadettilac89


Ich würde dann ein template verwenden dass dem Gerät an ähnlichsten ist und dann die Abweichung konfigurieren. Hue ist verbreitet, da findest dann sicher auch was im Forum


Kein passendes attrTemplate vorhanden?
Exisitert (noch) kein passendes attrTemplate, ist zu empfehlen, zunächst das "tasmota_basic" anzuwenden. Dieses führt einige Basiskonfigurationen durch, die für FHEM hilfreich sind, z.B. wird die firmware so eingestellt, dass Schaltzustände in Kleinschreibung übermittelt werden, statt der defaults "ON" bzw. "OFF".

Allerdings stellt dieses das autocreate an dem MQTT2_DEVICE auf 0, was dann nicht optimal ist, wenn man weitere Readings aus dem Gerät erwartet, etwa, weil zusätzliche Sensoren vorhanden sind. In diesem Fall empfiehlt es sich, das autocreate-Attribut an dem MQTT2_DEVICE zu löschen, damit alle weiteren Informationen verarbeitet werden und ggf. im jsonMap-Attribut nur die Angabe "POWER1:state" zu belassen.

Beta-User

Vielleicht erklärst du erst mal, was wo eigentlich "nativ" vorhanden ist, und was wo dann "nur" als MQTT-Entity existiert....?

Und wenn man Daten von woanders empfängt, ist ein "Zwischengerät" mit bridgeRegepx und ignoreRegexp dringend zu empfehlen, siehe Wiki zu MQTT2_CLIENT.

Ansonsten gibt es einen recht aktuellen Thread rund um attrTemplate bei MQTT_GENERIC_BRIDGE (auch wenn da vieles noch fehlt), der hilft ggf. weiter?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

skratter

Aber klar gerne doch.

letztlich versuche ich alles über den Homey abzubilden. An diesen lerne ich alle Geräte an, die er letztlich unterstützt.
Die ganzen Geräte sollen dann zum Home Assistant übertragen werden, der letztlich nur als UI dienen soll, da mir das FHEM UI nicht wirklich zusagt (Stand 2019).

Da keines der Systeme EnOcean unterstützt bzw. nicht wirklich, kommt FHEM in diesem Bereich zum Einsatz. In dem Zusammenhang lerne ich bspw. die Schalter ein um bspw. auf deren Statusänderungen zu reagieren. Des Weiteren Nutze ich das USB300 um meine Aktoren zu schalten, in dem ich es als Schalter agieren lasse.
Dazu lerne ich die verschiedenen Adressen des TCM per PCT-14 ins FAM14 ein, da alle Aktoren über dieses geschaltet werden. Das klappt auch erstaunlich gut.

Damit alle drei Systeme miteinander interagieren können, habe ich ein mosquitto aufgebaut, der als zentraler MQTT Server agiert.
Im FHEM läuft die Bridge neben dem Client.

Meine Verständnisprobleme, in denen ich mich langsam zurechtfinde ist die Art und Weise wie ich die verschiedenen Geräte mit ihren Status bspw. ins FHEM bekomme um dort auch direkt zu schalten und nicht nur den Status bzw. die Änderungen des Schalters per MQTT weitergebe. Genauso möchte ich Befehle aus dem Homey heraus per MQTT senden, so dass bspw. der EnOcean Schalter schaltet. Quasi ein Subscribe, welches dann ein Set auslöst.

Da MQTT doch recht komplex sein kann und irgendwie jedes System seine Eigenheiten mitbringt,  ist das gar nicht so leicht alles zu fassen.

Aktuelle Wissenlücken in FHEM:
- Auf MQTT Befehl hin Schalter schalten
- MQTT Geräte sauber einbinden
- Statusänderungen an schaltern per MQTT senden


PS: Technisch habe ich alles über Rancher Kubernetes Container gelöst, so dass ein ausreichend starker Rechner FHEM, moquitto und HA nebeneinander laufen lässt. Klappt sehr gut.

skratter

Hi,
hab's jetzt soweit ich es benötige hinbekommen. Mal sehen wo es mich mal noch hinführt. :)