Modul-Vorstellung: MQTT_GENERIC_BRIDGE

Begonnen von hexenmeister, 31 August 2018, 20:53:56

Vorheriges Thema - Nächstes Thema

ergerd

Hallo aisberg,

ja, "stopic" verwende ich auch. Zusätzlich hat ein Schalter hat bei mir auch immer ein Publish:


defmod wz_schrank FS20 af5f 05
attr wz_schrank userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
attr wz_schrank DbLogExclude .*
attr wz_schrank IODev CUNO
attr wz_schrank alexaName schrank
attr wz_schrank alexaRoom alexa
attr wz_schrank alias schrank
attr wz_schrank genericDeviceType switch
attr wz_schrank group _Steckdose_
attr wz_schrank model fs20st
attr wz_schrank mqttPublish *:topic={"/SmartHome/$device/$reading"}
attr wz_schrank mqttSubscribe state:stopic={"/SmartHome/$device/set"}
attr wz_schrank room 01_wohnzimmer,alexa


Grüße
Rainer
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, C-Control II, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

aisberg

@SamNitro
was so ein kleines "s" für set doch ausmacht - perfekt!
Vielen Dank!!

hexenmeister

topic / stopic / atopic... wieso habe ich denn nur so fleißig die Texte für Commandref geschrieben  ??? ;)
Übrigens, es können auch 'verständlichere' Namen verwendet werden:
topic  = readings-topic
stopic = set-topic
atopic = attr-topic
(Diesbezüglich muss ich die Doku noch anpassen).
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

Zitat von: ergerd am 16 September 2018, 19:01:35

defmod tempGefrierschrank dummy
attr tempGefrierschrank userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
attr tempGefrierschrank genericDeviceType thermometer
attr tempGefrierschrank mqttSubscribe state:topic={"/Esp1wire@14211345/28.ff9b3b811402.f1/Temperature"}


Offensichtlich gibt es eine Unschärfe wenn ein Ampersand im Topic verwendet wird. Kann ich das selbst korrigieren ohne meine Esp's neu flashen  zu müssen?

Moin!
Du verwendest {} im Topic. Das ist ein Hinweis für das Modul, das Topic kein Text, sondern eine Perl-Expression ist. Daher kommt auch das Problem. Man könnte das Zeichen Maskieren (mit \), aber in Deinem Fall gibt es da nichts zu interpretieren. Entferne die Klammern und auch die Anführungzeichen.

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

ergerd

Danke hexenmeister!

Du machst deinem Namen alle Ehre :-)

Ich liebe dieses Modul!

Grüße
Rainer
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, C-Control II, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

Billy

#50
@Hexenmeister
Habe mir heute deine neueste Version $Id: 10_MQTT_GENERIC_BRIDGE.pm 17363 2018-09-17 12:58:39Z hexenmeister $
eingespielt.
Vorab, läuft hervorragend, die Ansteuerung meiner Sonoff klappt. :)

Ich musste allerdings die userattr zum Device von Hand anlegen. Habe also
mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
einfach in userattr des Device reinkopiert.
Vermutlich liegt das aber an mir, da ich die global userattr gelöscht hatte.
Das also nur am Rande.
Ich vermute, dass das bei einer kompletten Neuanlage funktioniert oder habe ich da was übersehen?

Vielen Dank für deine Arbeit, jetzt ist das ziemlich rund.

Gruß Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Billy

Was ich jetzt bezüglich userattr nachstellen konnte sieht so aus.
Wenn ich die Bridge z.B. mit
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt myTest1 myTest2
definiere

wird nur beim ersten Device das userattr angelegt.
userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long

mit defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt myTest2
kann ich dann auch für das Device myTest2 das userattr   anlegen.
Ist das so gewollt?
Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

hexenmeister

Das soll natürlich nicht sein. Ich sehe mir das an.
Workaround bis dahin: gar keine Geräte angeben (dann wird im global definiert), oder eben per Hand erstellen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Billy

Zitat von: hexenmeister am 19 September 2018, 19:38:55
Das soll natürlich nicht sein. Ich sehe mir das an.
Workaround bis dahin: gar keine Geräte angeben (dann wird im global definiert), oder eben per Hand erstellen.

Ich für mich bevorzuge das Erstellen per Hand ab dem 2ten Device im userattr.
Dann habe ich mehr Übersicht.
Ansonsten wie schon erwähnt bin ich mit der Funktionalität sehr zufrieden. :)
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

hexenmeister

#54
Die userattr funktionieren wieder, wie sie sollen. :)

Außerdem sind in morgigen Update folgende Änderungen enthalten:

- Topics-Ausgabe (subscribe in devinfo) jetzt alphabetisch sortiert
- Trennung der zu ueberwachenden Geraete ist jetzt mit Kommas,  Leezeichen, Kommas mit Leerzeichen  oder einer Mischung davon moeglich.
- Unterstuetzung (fast) beliebiger variablen in defaults / global defaults (und nicht nur $base). Ansonsten ist die Verwendung wie bei $base.  z.B. hugo wird zum $hugo in Topics/Expression
- Neue Option: resendOnConnect für mgttPublish Bewirkt, dass wenn keine mqtt-Connection besteht, die zu sendende Nachrichten in einer Warteschlange gespeichet werden. Wird die Verbindung aufgebaut, werden die Nachrichten verschickt.
Moegliche Optionen:
  -- none  - alle verwerfen,
  -- last  - immer nur die letzte Nachricht speichern,
  -- first - immer nur die erste Nachricht speichern,  danach folgende verwerfen,
  -- all   - alle speichern,  allerdings existiert eine Obergrenze von 100, wird es mehr, werden aelteste ueberzaelige Nachrichten verworfen.
Beispiel: attr genericBridge globalPublish *:resendOnConnect=last
- zusätzlich zu 'topic' und 'stopic' gibt es jetzt 'atopic' - damit können Inhalte von gesetztenm Attributen gesendet und auch enpfangen werden.
- anstatt topic, stopic, atopic können jetzt auch etwas sprechendere Bezeichner verwendet werden: reading-topic, set-topic und attr-topic
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hopgeq

Bei mir funktioniert das Modul super. Sehr viel angenehmer als die alte MQTT_BRIDGE! :-)
Eine Frage zur Verwendung von Wildcards bei mqttSubscribe.

Kann ich mit einer Zeile alle set-Befehle eines Devices via MQTT verfügbar machen? Bsp. ein als Bilderrahmen fungierendes AMAD-Device ist bei mir derzeit wie folgt konfiguriert:

attr AMAD_Kueche mqttSubscribe state:stopic={"/fhem/AMAD_Kueche/set"}\
bluetooth:stopic={"/fhem/AMAD_Kueche/bluetooth/set"}\
screen:stopic={"/fhem/AMAD_Kueche/screen/set"}\
volume:stopic={"/fhem/AMAD_Kueche/volume/set"}\
volumeNotification:stopic={"/fhem/AMAD_Kueche/volumeNotification/set"}


Kann ich die unteren vier Zeilen ersetzen durch sowas in der Art von

attr AMAD_Kueche mqttSubscribe *:stopic={"/fhem/AMAD_Kueche/$irgendwas/set"}\


oder besser noch


attr AMAD_Kueche mqttSubscribe *:stopic={"/fhem/AMAD_Kueche/$irgendwas/set"}\
*:atopic={"/fhem/AMAD_Kueche/$irgendwas/aset"}


Geht sowas bereits mit dem bestehenden Modul? Ich hab es mit $reading versucht aber das hat nicht geklappt.



Billy

Zitat von: hexenmeister am 22 September 2018, 23:34:14
Die userattr funktionieren wieder, wie sie sollen. :)


Kann ich bestätigen. Danke! :)

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

hexenmeister

Zitat von: hopgeq am 23 September 2018, 22:22:20

attr AMAD_Kueche mqttSubscribe *:stopic={"/fhem/AMAD_Kueche/$irgendwas/set"}\
*:atopic={"/fhem/AMAD_Kueche/$irgendwas/aset"}


Geht sowas bereits mit dem bestehenden Modul? Ich hab es mit $reading versucht aber das hat nicht geklappt.

Sollte eigentlich.
Folgendes gerade ausprobiert:
*:topic={"/XTEST/$reading/ttt"}
Dann auf '/XTEST/mynew/ttt' gesendet. Reading wurde anlgelegt.
auch mit:
*:atopic={"/XTEST/$reading/aaa"} und senden an '/XTEST/group/aaa' funktioniert.
Das Device muss natürlich einen entsprechenden Attribut überhaupt zulassen.

Welche Version setzt Du ein?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hopgeq

#58
Jetzt funktioniert es bei mir auch. Nach Update auf neuste Version. Wunderbar!

Die Beispiele könnten vielleicht mit in die Doku für mqttSubscribe? Also


höre auf beliebigen set-Befehl mit Parameter, z.B. /fhem/MeinDevice/volume/set 10

attr MeinDevice mqttSubscribe *:stopic={"/fhem/MeinDevice/$reading/set"}


höre auf beliebigen set-Befehl ohne Parameter, z.B. /fhem/MeinDevice/set statusRequest

attr MeinDevice mqttSubscribe state:stopic={"/fhem/MeinDevice/set"}


höre auf beliebigen attr-Befehl, z.B. /fhem/MeinDevice/room/attr Bad  (vielleicht nicht wirklich klug)

attr MeinDevice mqttSubscribe *:atopic={"/fhem/MeinDevice/$reading/attr"}


höre auf beliebigen setreading-Befehl, z.B. /fhem/MeinDevice/currentMedia/setreading DVD

attr MeinDevice mqttSubscribe *:topic={"/fhem/MeinDevice/$reading/setreading"}

Joe9

Zunächst vielen Dank für das neue Modul, welches ich als sehr praktisch einschätze.

Leider habe ich ein Problem bei der Definition des Moduls mit den zu nutzenden Geräten [devspec]

Ich nutze structure für die Zusammenfassung von mehreren Geräten, z.B.  stat_eg.

1. Wenn ich alle Geräte [devspec,devspec,...] definierte und später etwas ergänze, werden die Attribute mqttPublish in allen Geräten gelöscht und ich muss sie neu angeben.

2. Wenn ich die Geräteangaben bei der Definition von MQTT_GENERIC_BRIDGE weglasse, funktioniert es zwar, aber es werden die Attribute wie z.B. mqttPublish mit auf die Elternelemente von structure vererbt. Das will ich nicht.

3. Wenn ich als workaround nur ein Gerät angebe und die anderen Geräte über das manuelle Hinzufügen von userattr konfiguriere, funktioniert es zwar, aber bei einem Neustart sind die Attribute (mqttPublish) wieder entfernt.

Hab ich etwas übersehen?