Modul-Diskussion/Hilfe: MQTT_GENERIC_BRIDGE

Begonnen von Master_Nick, 11 Oktober 2018, 17:23:24

Vorheriges Thema - Nächstes Thema

Master_Nick

Moin,

aus meiner Sicht wäre es einfacher die Devices auf ein und das selbe Topic zu subscriben, als mehrfach das gleiche ins MQTT zu publishen.
Oder spricht da was gegen?
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

jostereo

Zitat von: jostereo am 06 Februar 2019, 12:33:10
Habe mal eine Frage zu dem Modul.

Bin gerade dabei den Einsatz des Moduls zu testen.

In dem Zuge mache ich mir auch schon länger Gedanken über meine "MQTT - Topic - Struktur".

Ich würde gerne einige Readings über das Modul in mehr als ein Topic Publishen.
Ist das möglich?

Wenn ich 2 Einträge für ein Reading mache nimmt das Modul den letzten Eintrag.

Ist es überhaupt vorgesehen, dass man ein Reading (mehrere) in mehrere Topics published?


Beispiel:

Gewünscht wäre das reading "temperature" in die beiden unten genannte Topics zu publishen.

temperature:topic={"fhem/lacrosse/$device/$reading"} temperature:topic={"smarthome/buero/$reading"}


Danke und Gruß,

jostereo


Ohh sorry muss mich da korrigieren.

Die Frage wurde schonmal gestellt und auch von Hexenmeister bereits beantwortet:

https://forum.fhem.de/index.php/topic,91642.msg858587.html#msg858587


Es wurde zwar noch keine endgültige Erfolgsmeldung gegeben.
Gehe aber mal davon aus, dass es mit dem Tipp gehen sollte.

Ich teste das heute Abend mal.

Gruß,

jostereo

hexenmeister

Zitat von: jostereo am 06 Februar 2019, 13:35:03
Gehe aber mal davon aus, dass es mit dem Tipp gehen sollte.
Ich hab's damals getestet ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

jostereo

Zitat von: hexenmeister am 06 Februar 2019, 20:44:28
Ich hab's damals getestet ;)

@Hexenmeister

Habs jetzt gerade auch getestet.

Mir ist dabei aufgefallen das es mit "festen" Topics (wie du im Beispiel hattest) super funktioniert.

Allerdings scheint es nicht mit den "Ersetzungsvariablen" zu funktioniern.

Beispiel:

humidity:expression={"fhem/lacrosse/temp/humidity"=>$message, "smarthome/lacrosse/temp/humidity"=>$message}
Funktioniert


humidity:expression={"fhem/lacrosse/$device/$reading"=>$message, "smarthome/lacrosse/$device/$reading"=>$message}
Funktioniert nicht.


Ist das so gewollt oder mache ich da noch einen Fehler?

Gruß,

jostereo

hexenmeister

Teste bitte noch mal morgen nach dem Update.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

jostereo

Zitat von: hexenmeister am 09 Februar 2019, 23:21:09
Teste bitte noch mal morgen nach dem Update.

Hi Hexenmeister,

die Anpassung durch das Update von dir heute funktioniert.

Die Variablen werden sauber ersetzt.

Vielen Dank für die schnelle Anpassung.

frankreed

Hallo,

blöde Frage, aber bei mir steht als STATE immer nur "???". Kein "Initialized" oder "Open" oder ähnliches.
An was liegt das bzw. wie kann ich es ändern?
Danke für die Antwort.

Grüße Frank

hexenmeister

Die Bridge nutzt den STATE nicht von alleine. Daher bleibt das undefiniert. Wenn man was anderes dort haben will, verwendet man dafür vorgesehene FHEM-Mittel.

attr <bridge-name> stateFormat Mickey Mouse

oder eben

attr <bridge-name> stateFormat dev: device-count in: incoming-count out: outgoing-count
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

frankreed


ROLE

Hallo zusammen,

ich versuche nun seit längerem Velux Rollläden und Fenster über das KLF und MQTT an mein Loxone System anzubinden. Dazu habe ich entsprechend einer Anleitung eine MQTT_GENERIC_BRIDGE definiert und diese konfiguriert, sodass sie mir alle Readings der 2 Fenster und 2 Rollläden liefert. Ich kann nun auch schon die aktuelle Position aller 4 Dinger in meinem Loxone System sehen.

Hier das Listing meiner MQTT_GENERIC_BRIDGE Definition:

Internals:
   FUUID      5c66fde9-f33f-148c-0155-86d01b75ecd2f71e
   IODev      lb_mosquitto
   NAME       mqttGeneric
   NR         30
   NTFY_ORDER 50-mqttGeneric
   STATE      ???
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    .*
   prefix     mqtt
   READINGS:
     2019-02-15 21:52:41   device-count    0
     2019-02-15 21:49:27   incoming-count  0
     2019-02-15 21:52:13   outgoing-count  53
     2019-02-15 21:52:41   transmission-state unsubscription acknowledged
     2019-02-15 21:49:27   updated-reading-count 0
     2019-02-15 21:49:27   updated-set-count 0
   devices:
     :global:
       :defaults:
         pub:qos    0
         pub:retain 1
         sub:qos    2
         sub:retain 1
       :publish:
         *:
           mode       R
           topic      {"Terrasse/$device/$reading"}
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
   message_ids:
   subscribe:
   subscribeExpr:
   subscribeQos:
Attributes:
   IODev      lb_mosquitto
   globalDefaults sub:qos=2 pub:qos=0 retain=1
   globalPublish *:topic={"Terrasse/$device/$reading"}


Ebenso ein Listing als Beispiel für einen Rollladen:

Internals:
   CHANGED   
   DEF        192.168.0.147:51200 0
   DeviceName 192.168.0.147:51200
   FUUID      5c66f796-f33f-148c-8c18-0e90a51d5efc8bfd
   IODev      Velux
   LASTInputDev Velux
   MSGCNT     5
   NAME       Velux_0
   NR         21
   NodeID     0
   STATE      0 stop
   TYPE       KLF200Node
   Velux_MSGCNT 5
   Velux_TIME 2019-02-15 21:52:10
   READINGS:
     2019-02-15 21:52:10   MP              51173
     2019-02-15 21:52:10   MPtarget        51200
     2019-02-15 18:32:06   actuatorAddress 6cab30
     2019-02-15 18:32:06   backboneReferenceNumber 781c66
     2019-02-15 18:33:17   buildNumber     16
     2019-02-15 18:51:53   execution       stop
     2019-02-15 18:32:06   ioManufacturer  VELUX
     2019-02-15 18:51:12   lastCommandOriginator SAAC
     2019-02-15 18:51:12   lastControl     FHEM
     2019-02-15 18:51:53   lastMasterExecutionAddress abc5b1
     2019-02-15 18:51:53   lastRunStatus   EXECUTION COMPLETED
     2019-02-15 18:51:53   lastStatusReply COMMAND COMPLETED OK
     2019-02-15 18:33:17   model           VELUX SML Roller Shutter
     2019-02-15 18:33:17   name            Rollladen rechts
     2019-02-15 18:32:06   nodeTypeSubType Roller Shutter
     2019-02-15 18:33:17   nodeVariation   NOT SET
     2019-02-15 18:51:53   operatingState  Done
     2019-02-15 18:51:53   pct             0
     2019-02-15 18:33:17   powerMode       ALWAYS ALIVE
     2019-02-15 18:33:17   productCode     SML
     2019-02-15 18:33:17   productGroup    1
     2019-02-15 18:33:17   productType     1
     2019-02-15 18:33:17   production      2017 week 33
     2019-02-15 18:51:53   remaining       0
     2019-02-15 18:33:17   serial          86 12820 90 17 33 887
     2019-02-15 21:52:10   sessionID       18
     2019-02-15 18:51:53   sessionInformationCode 20000500
     2019-02-15 21:52:10   sessionStatusOwner USER
     2019-02-15 18:51:53   state           off
     2019-02-15 18:51:12   target          0
     2019-02-15 18:51:12   targetArrival   2019-02-15 18:51:52
     2019-02-15 18:33:17   velocity        Supported
Attributes:
   alias      Rollladen rechts
   devStateIcon .*up:fts_shutter_up:toggle .*down:fts_shutter_down:toggle \d.stop:fts_window_2w:toggle 1\d.stop:fts_shutter_10:toggle 2\d.stop:fts_shutter_20:toggle 3\d.stop:fts_shutter_30:toggle 4\d.stop:fts_shutter_40:toggle 5\d.stop:fts_shutter_50:toggle 6\d.stop:fts_shutter_60:toggle 7\d.stop:fts_shutter_70:toggle 8\d.stop:fts_shutter_80:toggle 9\d.stop:fts_shutter_90:toggle 100.stop:fts_shutter_100:toggle
   room       Terrasse
   stateFormat pct execution
   webCmd     pct


Was ich jetzt aber nicht schaffe ist, der umgekehrte Weg. Ich möchte also auf dem Loxone System den Prozentwert eingeben der angefahren werden soll und das Ding fährt dann dort hin. Ich weiß nicht wie das Subscribe genau funktioniert und wie ich den Befehl eingeben muss. Ein globales Subscribe analog dem globalen Reading gibt es ja nicht.

Das Topic (also aktuell das Reading) für die Prozentausgabe lautet Terrasse/Velux_0/pct. Ich nehme also an, dass man dann auf dieses Topic auch ein set ausführen muss. In FHEM heißt es set Velux_0 pct xxx wobei xxx für den Prozentwert steht.
List für den Mosquitto
Internals:
   DEF        192.168.0.146:1883
   DeviceName 192.168.0.146:1883
   FD         4
   FUUID      5c66fddf-f33f-148c-5e9d-99f6a72f1f9a10c0
   NAME       lb_mosquitto
   NOTIFYDEV  global
   NR         29
   NTFY_ORDER 50-lb_mosquitto
   PARTIAL   
   STATE      opened
   TYPE       MQTT
   buf       
   msgid      6
   ping_received 1
   timeout    60
   READINGS:
     2019-02-15 22:01:28   connection      active
     2019-02-15 21:49:28   state           opened
   messages:
Attributes:


Laufen tut das ganze über auf einem Loxberry wo der MQTT Gateway läuft.

Bitte kann mir da jemand einen Tipp geben bevor ich gänzlich verzweifle.

Danke!


hexenmeister

ZitatEin globales Subscribe analog dem globalen Reading gibt es ja nicht.
Ich bereue mittlerweile, globalPublish eingebaut zu haben. Das war eher zum Testen und dazu gedacht, alles per MQTT raus zu pusten. Ist im Allgemeinen KEINE gute Idee.
Mit globalSubscribe wäre es dann schon grenzwertig und wird es in dieser Form nicht geben.
Beide Wege sollen an einzelnen Devices jeweils einzeln per 'mqttPublish' und 'mqttSubscribe' definiert werden.
Syntax ist in Commandref beschrieben.

Du brauchst in den Geräten etwas in der Art:

attr <name> mqttSubscribe pct:stopic=Terrasse/Velux_0/pct/set
attr <name> mqttPublish pct:topic=Terrasse/Velux_0/pct/state


Publish und Subscribe auf das selbe Topic würde ich nicht tun.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Grml

#221
Hi zusammen,
ich arbeite mich gerade langsam an das Thema MQTT ran. Aktuell probiere ich mit diesem Modul mir eine Struktur aufzubauen bzw. das Thema "Learning By Doing" zu verstehen.

Ich habe in FHEM nun ein Device, dass mehrere Readings hat, die alle mit der Bezeichnung "level" beginnen und dann durchnummeriert sind (level0, level1, level2 etc.). Ich würde nun gerne alle diese Readings per RegEx abfangen. Aber das scheint nicht zu gehen - oder ich mache es einfach falsch. Was sehr gut sein kann ;-)

Wenn ich als Attribut
level0:topic={"$base/$name"}
setze bekomme ich natürlich das Reading in MQTT.fx, dass ich zum testen verwende, angezeigt sobald sich der Status ändert. Gut soweit.

Wenn ich aber
level.*:topic={"$base/$name"}
setze (um alle Readings die mit "level" beginnen zu bekommen) passiert nichts, es kommt kein Wert bei Änderung in MQTT.fx.

Kann das Modul kein RegEx oder mache ich nur etwas falsch? Und wenn ja, was?

Danke!

hexenmeister

Nein, RegEx wird an dieser Stelle nicht unterstützt (sonst stünde das ja in commandref, gell? ;) )
Probiere mal mit
attr <dev> mqttSubscribe *:topic={"$base/$reading"}
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

ROLE

Zitat von: hexenmeister am 15 Februar 2019, 22:31:12
Ich bereue mittlerweile, globalPublish eingebaut zu haben. Das war eher zum Testen und dazu gedacht, alles per MQTT raus zu pusten. Ist im Allgemeinen KEINE gute Idee.
Mit globalSubscribe wäre es dann schon grenzwertig und wird es in dieser Form nicht geben.
Beide Wege sollen an einzelnen Devices jeweils einzeln per 'mqttPublish' und 'mqttSubscribe' definiert werden.
Syntax ist in Commandref beschrieben.

Du brauchst in den Geräten etwas in der Art:

attr <name> mqttSubscribe pct:stopic=Terrasse/Velux_0/pct/set
attr <name> mqttPublish pct:topic=Terrasse/Velux_0/pct/state


Danke so hat das funktioniert. Kann jetzt endlich über die MQTT meine Velux Rollläden und Fenster ansprechen.

Top Support!

Publish und Subscribe auf das selbe Topic würde ich nicht tun.

throbin

Hi,

kann man in der expression auch bspw. eigene Perl-Funktionen aufrufen?
Etwa so:
callFunction:topic={"$base/callFunction/set"} callFunction:expression={MyFunction($NAME,$value)}