FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: hexenmeister am 31 August 2018, 20:53:56

Titel: Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 31 August 2018, 20:53:56
Guten Abend allerseits,

schon vor langer Zeit aus einer Idee geboren, entwickelt, gemeinsam diskutiert und getestet (https://forum.fhem.de/index.php/topic,81418.0.html) und jetzt endlich als ausreichend stabil zu bezeichnen.
Hier ist ein Modul, das die Integration von MQTT-Geräteschaften in FHEM vereinfacht (heute in das offizielle Verzeichnis übernommen, ab morgen per Update verfügbar).
Der Grundgedanke dabei ist auf die zusätzlichen MQTT-DEVICE/BRIDGE Module möglichst zu verzichten und die beliebigen FHEM-Geräte direkt um die MQTT-Fähigkeiten zu erweitern. Die GenericBridge muss nur einmal definiert werden, dabei bekommen andere Geräte ein paar zusätzlichen Attribute, mit deren Hilfe alle Readings des jeweiligen Gerätes per MQTT versendet bzw. vom MQTT-Server gespeist werden können.


Hier ist die Beschreibung aus dem Commandref incl. ein Paar Beispiele:


MQTT_GENERIC_BRIDGE

Dieses Modul ist eine MQTT-Bridge, die gleichzeitig mehrere FHEM-Devices erfasst und deren Readings per MQTT weiter gibt bzw. aus den eintreffenden MQTT-Nachrichten befuellt oder diese als 'set'-Befehl an dem konfigurierten FHEM-Geraet ausfuert.
Es wird ein MQTT-Geraet als IODev benoetigt.

Die (minimale) Konfiguration der Bridge selbst ist grundsaetzlich sehr einfach.

Definition:

Im einfachsten Fall reichen schon zwei Zeilen:

defmod mqttGeneric MQTT_GENERIC_BRIDGE [prefix] [devspec]
attr mqttGeneric IODev


Alle Parameter im Define sind optional.

Der erste ist ein Prefix fuer die Steuerattribute, worueber die zu ueberwachende Geraete (s.u.) konfiguriert werden. Defaultwert ist 'mqtt'. Wird dieser z.B. als 'hugo' redefiniert, heissen die Steuerungsattribute entsprechend hugoPublish etc.

Der zweite Parameter ('devspec') erlaubt die Menge der zu ueberwachenden Geraeten zu begrenzen (sonst werden einfach alle ueberwacht, was jedoch Performance kosten kann). s.a. devspec

get:
- version
Zeigt Modulversion an.

- devlist [<name (regex)>]
Liefert Liste der Namen der von dieser Bridge ueberwachten Geraete deren Namen zu dem optionalen regulaerem Ausdruck entsprechen. Fehlt der Ausdruck, werden alle Geraete aufgelistet.

- devinfo [<name (regex)>]
Gibt eine Liste der ueberwachten Geraete aus, deren Namen zu dem optionalen regulaerem Ausdruck entsprechen. Fehlt der Ausdruck, werden alle Geraete aufgelistet. Zusätzlich werden bei 'publish' und 'subscribe' verwendete Topics angezeigt incl. der entsprechenden Readinsnamen.

readings:

- device-count
Anzahl der ueberwachten Geraete

- incoming-count
Anzahl eingehenden Nachrichten

- outgoing-count
Anzahl ausgehende Nachrichten

- updated-reading-count
Anzahl der gesetzten Readings

- updated-set-count
Anzahl der abgesetzten 'set' Befehle

- transmission-state
letze Uebertragunsart

Attribute:

folgende Attribute werden unterstuetzt:

- IODev
Dieses Attribut ist obligatorisch und muss den Namen einer funktionierenden MQTT-Modulinstanz enthalten. Modul MQTT2_SERVER wird nicht unterstuetzt.

- disable
Wert 1 deaktiviert die Bridge

Beispiel:
attr <dev> disable 1

- globalDefaults
Definiert Defaults. Diese greifen in dem Fall, wenn in dem jeweiligen Geraet definierte Werte nicht zutreffen. s.a. mqttDefaults.

- globalAlias
Definiert Alias. Diese greifen in dem Fall, wenn in dem jeweiligen Geraet definierte Werte nicht zutreffen. s.a. mqttAlias.

- globalPublish
Definiert Topics/Flags fuer die Uebertragung per MQTT. Diese werden angewendet, falls in dem jeweiligen Geraet definierte Werte nicht greifen oder nicht vorhanden sind. s.a. mqttPublish.

Fuer die ueberwachten Geraete wird eine Liste der moeglichen Attribute automatisch um mehrere weitere Eintraege ergaenzt. Sie fangen alle mit vorher in der Bridge definiertem Prefix an. Ueber diese Attribute wird die eigentliche MQTT-Anbindung konfiguriert.
Defaultmaessig werden folgende Attributnamen verwendet: mqttDefaults, mqttAlias, mqttPublish, mqttSubscribe.
Die Bedeutung dieser Attribute wird im Folgenden erklaert.

- mqttDefaults
Hier wird eine Liste der "key=value"-Paare erwartet. Folgende Keys sind dabei moeglich:
  -- 'qos'
  definiert ein Defaultwert fuer MQTT-Paramter 'Quality of Service'.
  -- 'retain'
  erlaubt MQTT-Nachrichten als 'retained messages' zu markieren.
  -- 'base'
  wird als Variable ($base) bei der Konfiguration von konkreten Topics zur Verfuegung gestellt. Sie kann entweder Text oder eine Perl-Expression enthalten. Perl-Expression muss in geschweifte Klammern eingeschlossen werden. In einer Expression koennen folgende Variablen verwendet werden: $reading = Original-Readingname, $device = Devicename und $name = Readingalias (s. mqttAlias. Ist kein Alias definiert, ist $name=$reading).

Alle diese Werte koennen durch vorangestelle Prefixe ('pub:' oder 'sub') in ihrer Gueltigkeit auf nur Senden bzw. nur Empfangen begrenzt werden (soweit sinnvoll). Werte fuer 'qos' und 'retain' werden nur verwendet, wenn keine explizite Angaben darueber fuer ein konkretes Topic gemacht worden sind.

  Beispiel:
attr <dev> mqttDefaults base={"/TEST/$device"} pub:qos=0 sub:qos=2 retain=0

  - mqttAlias
  Dieses Attribut ermoeglicht Readings unter einem anderen Namen auf MQTT-Topic zu mappen. Eigentlich nur sinnvoll, wenn Topicdefinitionen Perl-Expressions mit entsprechenden Variablen sind. Auch hier werden 'pub:' und 'sub:' Prefixe unterstuetzt (fuer 'subscribe' gilt das Mapping quasi umgekehrt).
  Alias fuer subscribe ist derzeit nicht implementiert!

  Beispiel:
attr <dev> mqttAlias pub:temperature=temp

  - mqttPublish
  Hier werden konkrette Topics definiet und den Readings zugeordnet (Format: <reading>:topic=<topic>). Weiterhin koennen diese einzeln mit 'qos'- und 'retain'-Flags versehen werden.
  Topics koennen auch als Perl-Expression mit Variablen definiert werden ($reading, $device, $name, $base).
  Werte fuer mehrere Readings koennen auch gemeinsam gleichzeitig definiert werden, indem sie, mittels '|' getrennt, zusammen angegeben werden.
  Wird anstatt eines Readingsnamen ein '*' verwendet, gilt diese Definition fuer alle Readings, fuer die keine explizite Angaben gemacht wurden.
  Es koennen auch Expressions (reading:expression=...) definiert werden.
  Die Expressions koenne sinnvollerweise entweder Variablen ($value, $topic, $qos, $retain, $message) veraendern, oder einen Wert != undef zurrueckgeben.
  Der Rueckhgabe wert wird als neue Nachricht-Value verwendet, die Aenderung der Variablen hat dabei jedoch Vorrang.
  Ist der Rueckgabewert undef, dann wird das Setzen/Ausfuehren unterbunden.
  Ist die Rueckgabe ein Hash (nur 'topic' und 'stopic'), werden seine Schluesselwerte als Topic verwendet, die Inhalte der Nachrichten sind entsprechend die Werte aus dem Hash.
Option 'resendOnConnect' erlaubt eine Speicherung der Nachrichten, wenn keine Verbindung zu dem MQTT-Server besteht. Die zu sendende Nachrichten in einer Warteschlange gespeichet. Wird die Verbindung aufgebaut, werden die Nachrichten in der ursprungichen Reihenfolge verschickt.
    Moegliche Werte:
    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.

  Beispiele:
attr <dev> mqttPublish temperature:topic={"$base/$name"} temperature:qos=1 temperature:retain=0 *:topic={"$base/$name"} humidity:topic=/TEST/Feuchte
attr <dev> mqttPublish temperature|humidity:topic={"$base/$name"} temperature|humidity:qos=1 temperature|humidity:retain=0
attr <dev> mqttPublish *:topic={"$base/$name"} *:qos=2 *:retain=0
attr <dev> mqttPublish *:topic={"$base/$name"} reading:expression={"message: $value"}
attr <dev> mqttPublish *:topic={"$base/$name"} reading:expression={$value="message: $value"}
attr <dev> mqttPublish *:topic={"$base/$name"} reading:expression={"/TEST/Topic1"=>"$message", "/TEST/Topic2"=>"message: $message"}


  - mqttSubscribe
  Dieses Attribut konfiguriert das Empfangen der MQTT-Nachrichten und die entsprechenden Reaktionen darauf.
  Die Konfiguration ist aehnlich der fuer das 'mqttPublish'-Attribut. Es koennen Topics fuer das Setzen von Readings ('topic') und Aufrufe von 'set'-Befehl an dem Geraet ('stopic') definiert werden.
  Mit Hilfe von zusaetzlichen auszufuehrenden Perl-Expressions ('expression') kann das Ergebnis vor dem Setzen/Ausfueren noch beeinflusst werden.
  In der Expression sind folgende Variablen verfügbar: $device, $reading, $message (initial gleich $value). Die Expression kann dabei entweder Variable $value veraendern, oder einen Wert != undef zurueckgeben. Redefinition der Variable hat Vorrang. Ist der Rueckgabewert undef, dann wird das Setzen/Ausfuehren unterbunden (es sei denn, $value hat einen neuen Wert).
  Ist die Rueckgabe ein Hash (nur fuer 'topic' und 'stopic'), dann werden seine Schluesselwerte als Readingsnamen bzw. 'set'-Parameter verwendet, die zu setzenden Werte sind entsprechend die Werte aus dem Hash.
  Weiterhin kann das Attribut 'qos' angegeben werden ('retain' macht dagegen keinen Sinn).
  In der Topic-Definition koennen MQTT-Wildcards (+ und #) verwendet werden.
  Falls der Reading-Name mit einem '*'-Zeichen am Anfang definiert wird, gilt dieser als 'Platzhalter'. Der tatsaechliche Name der Reading (und ggf. des Geraetes) wird dabei durch Variablen aus dem Topic definiert ($device (nur fuer globale Definition in der Bridge), $reading, $name). Im Topic wirken diese Variablen als Wildcards, macht natuerlich nur Sinn, wenn Reading-Name auch nicht fest definiert ist (also faengt mit '*' an).
  Die Variable $name wird im Unterschied zu $reading ggf. ueber die in 'mqttAlias' definierten Aliases beeinflusst. Auch Verwendung von $base ist erlaubt.
  Bei Verwendung von 'stopic' wird das 'set'-Befehl als 'set <dev> <reading> <value>' ausgefuert. Fuer ein 'set <dev> <value>' soll als Reading-Name 'state' verwendet werden.

  Beispiele:
attr <dev> mqttSubscribe temperature:topic=/TEST/temperature test:qos=0 *:topic={"/TEST/$reading/value"}
attr <dev> mqttSubscribe desired-temperature:stopic={"/TEST/temperature/set"}
attr <dev> mqttSubscribe state:stopic={"/TEST/light/set"} state:expression={...}
attr <dev> mqttSubscribe state:stopic={"/TEST/light/set"} state:expression={$value="x"}
attr <dev> mqttSubscribe state:stopic={"/TEST/light/set"} state:expression={"R1"=>$value, "R2"=>"Val: $value", "R3"=>"x"}


  - mqttDisable
        Wird dieses Attribut in einem Geraet gesetzt, wird dieses Geraet vom Versand bzw. Empfang der Readingswerten ausgeschlossen.

Beispiele:

        Bridge fuer alle moeglichen Geraete mit dem Standardprefix:
defmod mqttGeneric MQTT_GENERIC_BRIDGE
attr mqttGeneric IODev mqtt


        Bridge mit dem Prefix 'mqtt' fuer drei bestimmte Geraete:
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt sensor1,sensor2,sensor3
attr mqttGeneric IODev mqtt


        Bridge fuer alle Geraete in einem bestimmten Raum:
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=Wohnzimmer
attr mqttGeneric IODev mqtt


        Einfachste Konfiguration eines Temperatursensors:
defmod sensor XXX
attr sensor mqttPublish temperature:topic=/haus/sensor/temperature


        Alle Readings eines Sensors (mit ihren Namen wie sie sind) per MQTT versenden:
defmod sensor XXX
attr sensor mqttPublish *:topic={"/sensor/$reading"}


        Topicsdefinition mit Auslagerung von dem gemeinsamen Teilnamen in 'base'-Variable:
defmod sensor XXX
attr sensor mqttDefaults base={"/$device/$reading"}
attr sensor mqttPublish *:topic={$base}


        Topicsdefinition nur fuer bestimmte Readings mit deren gleichzeitigen Umbennenung (Alias):
defmod sensor XXX
attr sensor mqttAlias temperature=temp humidity=hum
attr sensor mqttDefaults base={"/$device/$name"}
attr sensor mqttPublish temperature:topic={$base} humidity:topic={$base}


        Beispiel fuer eine zentralle Konfiguration in der Bridge fuer alle Devices, die Reading 'temperature' besitzen:
defmod mqttGeneric MQTT_GENERIC_BRIDGE
attr mqttGeneric IODev mqtt
attr mqttGeneric defaults sub:qos=2 pub:qos=0 retain=0
attr mqttGeneric publish temperature:topic={"/haus/$device/$reading"}


        Beispiel fuer eine zentralle Konfiguration in der Bridge fuer alle Devices
        (wegen einer schlechten Übersicht und einer unnoetig grossen Menge eher nicht zu empfehlen):
defmod mqttGeneric MQTT_GENERIC_BRIDGE
attr mqttGeneric IODev mqtt
attr mqttGeneric defaults sub:qos=2 pub:qos=0 retain=0
attr mqttGeneric publish *:topic={"/haus/$device/$reading"}


        Beispiel für Zerlegung einer JSON-Kodierten Nachricht in EInzelreadings.
        Sendet man jetzt z.B. folgende JSON: {"jtest1":"jval1","jtest2":"jval2"} dann werden zwei Readings (jtest1 und jtest2) entsprechend angelegt/aktualisiert.
xyz:topic=/TEST/json xyz:expression={json2nameValue($message)}

Einschraenkungen:
- Wenn mehrere Readings das selbe Topic abonieren, sind dabei keine unterschiedlichen QOS moeglich.
- Wird in so einem Fall QOS ungleich 0 benoetigt, sollte dieser entweder fuer alle Readings gleich einzeln definiert werden, oder allgemeinguetltig ueber Defaults. Ansonsten wird beim Erstellen von Abonements der erst gefundene Wert verwendet.
- Abonements werden nur erneuert, wenn sich das Topic aendert, QOS-Flag-Aenderung alleine wirkt sich daher erst nach einem Neustart aus.
- Nicht kompatibel mit neuen Modulen MQTT2_SERVER / MQTT2_DEVICE (Schleife über MQTT2_SERVER->MQTT->MQTT_GENERIC_BRIDGE ist vermutlich möglich, jedoch nicht sinnvoll, da ineffizient)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 31 August 2018, 20:56:23
Danke :)

(zum mitlesen)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 01 September 2018, 10:55:16
Zitat von: hexenmeister am 31 August 2018, 20:53:56
Der Grundgedanke dabei ist auf die zusätzlichen MQTT-DEVICE/BRIDGE Module möglichst zu verzichten und die beliebigen FHEM-Geräte direkt um die MQTT-Fähigkeiten zu erweitern.

Vielen Dank für Deine Mühe.

ZitatLimitations:

If several readings subscribe to the same topic, no different QOS are possible.
If QOS is not equal to 0, it should either be defined individually for all readings, or generally over defaults.
Otherwise, the first found value is used when creating a subscription.
Subscriptions are renewed only when the topic is changed, so changing the QOS flag onnly will only work after a restart of FHEM.

Habe ich richtig verstanden, dass die bisherigen MQTT-DEVICE/BRIDGE Module diese Einschränkung nicht haben?

Gruß Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 September 2018, 11:02:46
Eher doch. Bei dem Nr. 1.  bin ich mir nicht sicher, dass es dort funktioniert, die 2. ist keine wirkliche Einshränkung, muss man ggf. nur beachten, ist jedoch spezifisch für GenericBridge. Die 3. gilt für alte Module meines Wissens genauso.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 01 September 2018, 11:57:13
Hatte ich schon fast vermutet, dass die Einschränkung auch für die alten Module gilt.
Die Frage ist nun: Braucht man die alten Module noch, oder ist mit deiner Weiterentwicklung alles erschlagen?
Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 September 2018, 12:05:47
Die Frage kann nur jeder für sich beantworten ;D
Das neue Modul macht praktisch dsas gleiche, nur anders (und aus meiner sicht etwas einfacher und bequemer).
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 01 September 2018, 13:09:52
Zitat von: hexenmeister am 01 September 2018, 12:05:47

Das neue Modul macht praktisch das gleiche, nur anders (und aus meiner sicht etwas einfacher und bequemer).
Das deckt sich mit meinen Erfahrungen mit Deinem Modul.  :)
Ich wollte das von dir als Fachmann bestätigt haben damit es Neueinsteiger einfacher haben.

Hilfreich wäre in der Commandref der Satz: dieses Modul vereinigt die Funktionalität der
Mqtt-Device und Mqtt-Bridge Module.

Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 September 2018, 13:58:29
Danke für die Idee, trage ich nach. :)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: gitarero am 01 September 2018, 18:26:39
Hey,
danke für das Modul.
Leider habe ich einen Bug entdeckt.
Das Modul scheint ein Problem mit ":" im Publish-Payload zu haben.

Ich habe ein "at" für einen Wecker. Da wollte ich das Reading "state" publishen. Im Falle von "inactive" klappt das auch. Im Fall von "Next: 08:15" nicht.
Durch das Attribut:
*:topic={"zuHause/System/Wecker/$reading"}
habe ich in MQTT.fx rausgefunden, dass in Falle von "Next: 08:15" das Topic "Next" ist und nicht wie erwartet "state".

Genauso verhält es sich mit einem Dummy, der eine Zeit für die Laufzeit des Weckers beinhaltet.
Wenn ich den Dummy auf "Test" setze, kommt das ganze mit dem (End-)Topic "state" an. Besitzt der Dummy aber den Wert "02:10:00" heisst das Topic "02" und der Payload ist nur noch ":10:00".

Das gleiche Verhalten scheint bei der MQTT-Bridge vorzuliegen.
Kann man da was gegen tun?

Viele Grüße,
Ingo
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 02 September 2018, 21:11:07
Ich konnte den Fehler nachstellen. Versuche in den nächsten Tage die Ursache finden.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 02 September 2018, 23:17:31
Teste mal bitte die angehängte Version
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: kpl am 03 September 2018, 14:08:16
Hallo Hexenmeister,

mit der Version die Heute im Update verteilt wird werden die readings beim Subscript nicht mehr aktualisiert.
Nach dem einspielen der vorherigen Version Funktioniert es wieder Problemlos.
Anbei eine Beispiel Geräte Definition.

Internals:
   NAME       WS_Buero
   NR         385
   STATE      T: 22.66° H: 50%<br>P: 990.46
   TYPE       dummy
   Helper:
     DBLOG:
       battery:
         NAS1DB:
           TIME       1535975734.04262
           VALUE      2.977
       humidity:
         NAS1DB:
           TIME       1535975720.86372
           VALUE      50
       pressure:
         NAS1DB:
           TIME       1535975734.08432
           VALUE      990.46
       temperature:
         NAS1DB:
           TIME       1535975720.82657
           VALUE      22.66
   READINGS:
     2018-09-03 13:55:34   battery         2.977
     2018-09-03 13:55:34   humidity        50
     2018-09-03 13:55:34   pressure        990.46
     2018-09-03 13:55:33   temperature     22.66
Attributes:
   DbLogExclude state
   event-on-change-reading .*
   genericDeviceType thermometer
   icon       temperature_humidity
   mqttSubscribe *:topic={"Home/Ruuvi/Buero/$reading"}
   room       Büro
   stateFormat T: temperature° H: humidity%<br>P: pressure


Gruß,
Peter
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: gitarero am 03 September 2018, 17:57:36
Hey,

Zitat von: hexenmeister am 02 September 2018, 23:17:31
Teste mal bitte die angehängte Version

Damit funktioniert's, danke!

Viele Grüße,
Ingo
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 03 September 2018, 22:07:09
Zitat von: kpl am 03 September 2018, 14:08:16
mit der Version die Heute im Update verteilt wird werden die readings beim Subscript nicht mehr aktualisiert.
Gesucht->gefunden-gefixt->eingecheckt ;)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 03 September 2018, 22:08:09
Zitat von: gitarero am 03 September 2018, 17:57:36
Damit funktioniert's, danke!

Prima! Eingecheckt.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 04 September 2018, 20:53:35
Habe einen Bug zu berichten?

Habe auf meinem Testsytem die neue Version von gestern eingespielt
$Id: 10_MQTT_GENERIC_BRIDGE.pm 17262 2018-09-03 20:06:15Z hexenmeister $

und folgendes festgestellt:
Sobald ich nach dem : define mqttGeneric MQTT_GENERIC_BRIDGE
das Attribut für IODev setzte stürzt FHEM ab! :-\

Mit der alten Version $Id: 10_MQTT_GENERIC_BRIDGE.pm 17241 2018-08-31 16:37:38Z hexenmeister $
ist das nicht der Fall.

Gruß Billy


Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 04 September 2018, 22:35:31
Zitat von: Billy am 04 September 2018, 20:53:35
Habe einen Bug zu berichten?
Ja. Danke fürs Testen!
Nach dem Update sollte weg sein :)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 10:34:33
Mit der neuen Version habe ich auch Probleme!
FHEM stürzt zwar nicht mehr ab, aber schalten geht nicht mehr.
Habe ein Dummy als Schalter definiert.
define sonoff_8 dummy
attr sonoff_8 eventMap ON:on OFF:off
attr sonoff_8 mqttPublish *:topic=cmnd/sonoff_8/POWER1
attr sonoff_8 webCmd on:off

Mit der alten Version schaltet der Sonoff problemlos,
mit der neuen Version $Id: 10_MQTT_GENERIC_BRIDGE.pm 17274 2018-09-04 20:26:40Z hexenmeister $
geht nichts. Oder habe ich was falsch verstanden?

Gruß Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 05 September 2018, 16:42:59
Sonoff habe ich nicht, kann ich nicht direkt ausprobieren. Dein Beispielcode senden jedoch brav Werte, die ich in mqtt-spy sehen kann (on und off). Was ist jedoch nicht verstehe, ist Dein eventMap Attribut. So tut er gar nichts. Wenn sonoff die ON / OFF inb Großbuchtaben erwatet, dann könnte das die Erklärung sein. In diesem Fall müssen die Angaben "ungedreht" werden.
Probiere mit einem Client wie mqtt-spy, mqtt-fx etc. nachzusehen, ob was wirklich gesendet wird.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 17:37:45
Zitat von: hexenmeister am 05 September 2018, 16:42:59
Probiere mit einem Client wie mqtt-spy, mqtt-fx etc. nachzusehen, ob was wirklich gesendet wird.

Ich teste generell alles mit mqtt-spy!
Fakt ist, dass mit dieser Konfiguration
Internals:
   NAME       sonoff_8
   NR         126
   STATE      off
   TYPE       dummy
   READINGS:
     2018-09-05 17:15:47   Licht           OFF
     2018-09-05 17:18:18   state           ON
Attributes:
   disable    0
   eventMap   ON:on OFF:off
   icon       hue_filled_br30
   mqttPublish state:topic=cmnd/sonoff_8/POWER1
   mqttSubscribe Licht:stopic=stat/sonoff_8/POWER
   readingList Licht
   room       MQTT
   stateFormat Licht
   webCmd     :

mit der Version --> $Id: 10_MQTT_GENERIC_BRIDGE.pm 17241 2018-08-31 16:37:38Z hexenmeister $
alles funktioniert (publish + subscribe) die topics in mqtt-spy erscheinen,
mit der Version $Id: 10_MQTT_GENERIC_BRIDGE.pm 17274 2018-09-04 20:26:40Z hexenmeister $ geht nichts, d.h. weder publish noch subscribe.
Ich sehe also vom publish nichts in mqtt-spy und vom subscribe kommt im Dummy auch nichts an. :-\

Das ist seltsam, da es ja bei Dir geht.

d.h. sobald ich $Id: 10_MQTT_GENERIC_BRIDGE.pm 17274 2018-09-04 20:26:40Z hexenmeister $ aktiviere natürlich shutdown restart
gibt es keine Reaktion mehr. Ich habe das mehrfach getestet.

Sorry: der subscribe Pfad geht!
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 18:23:54
Im Event Monitor sieht das so aus!
Einschalten mit altem Modul
2018-09-05 18:11:48 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: outgoing publish sent
2018-09-05 18:11:48 MQTT_GENERIC_BRIDGE mqttGeneric outgoing-count: 30
2018-09-05 18:11:48 dummy sonoff_8 on
2018-09-05 18:11:48 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: incoming publish received
2018-09-05 18:11:48 MQTT_GENERIC_BRIDGE mqttGeneric incoming-count: 82
2018-09-05 18:11:48 dummy sonoff_8 Licht: on
2018-09-05 18:11:48 MQTT_GENERIC_BRIDGE mqttGeneric updated-set-count: 82

Ausschalten mit altem Modul
2018-09-05 18:11:56 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: outgoing publish sent
2018-09-05 18:11:56 MQTT_GENERIC_BRIDGE mqttGeneric outgoing-count: 31
2018-09-05 18:11:56 dummy sonoff_8 off
2018-09-05 18:11:56 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: incoming publish received
2018-09-05 18:11:56 MQTT_GENERIC_BRIDGE mqttGeneric incoming-count: 83
2018-09-05 18:11:56 dummy sonoff_8 Licht: off
2018-09-05 18:11:56 MQTT_GENERIC_BRIDGE mqttGeneric updated-set-count: 83
2018-09-05 18:11:57 MQTT Broker_BB17 connection: active
#############################################################################################################
Einschalten mit neuem Modul
2018-09-05 18:16:52 dummy sonoff_8 on
d.h. keine Reaktion der Bridge?

Ausschalten mit altem Modul
2018-09-05 18:16:54 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: outgoing publish sent
2018-09-05 18:16:54 MQTT_GENERIC_BRIDGE mqttGeneric outgoing-count: 34
2018-09-05 18:16:54 dummy sonoff_8 off
2018-09-05 18:16:55 MQTT_GENERIC_BRIDGE mqttGeneric transmission-state: incoming publish received
2018-09-05 18:16:55 MQTT_GENERIC_BRIDGE mqttGeneric incoming-count: 88
2018-09-05 18:16:55 dummy sonoff_8 Licht: off
2018-09-05 18:16:55 MQTT_GENERIC_BRIDGE mqttGeneric updated-set-count: 88


Die Frage ist warum geht alt oder habe ich da eine Bug eingebaut den die alte Version schluckt? :-[
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 05 September 2018, 21:20:21
Ein guter Beispiel, warum man den Konfig komplett angeben sollte. Ohne stateFormat (wie Du zuerst beschrieben hast) funktioniert das. Warum das mit nicht geht (eher warum das früher damit ging) - das muss ich noch anschauen.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 21:41:47
Noch was ist mir aufgefallen!
Ist es eigentlich erwünscht, dass alle der MQTT_GENERIC_BRIDGE  zugeordneten Devices im attr global userattr auftauchen?
attr global userattr T5,T7,Schalter_1BEA79,Brunnen_20C4F6,BM_1A8215,HM_69F161,HM_69F136Alias:textField-long T5,T7,Schalter_1BEA79,Brunnen_20C4F6,BM_1A8215,HM_6 usw.

Teilweise mehrfach? :-\

Gruß Billy

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 05 September 2018, 22:12:26
Nein, sollte eigentlich so nicht sein.
Wie ist die Gridge definiert?

Ich weiß mittlerweile warum das mit dem state nicht geht, nur leider keine Lösung. Es ist nicht ohne weiteren in einer Notify-Routine ersichtlich, welche reading sich geändert hat. Normalerweise bekommt man READINGNAME:VALUE. Aber nicht bei state. Dort kommt nur VALUE. In der alten Version habe ich auf den Doppelpunkt geprüft. Das funktioniert aber nicht, wenn in dem Wert ein Doppelpunkt drin ist. Habe noch keine Lösung :/
Da gibt es doch was... :)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 22:24:30
Zitat von: hexenmeister am 05 September 2018, 22:12:26
Nein, sollte eigentlich so nicht sein.
Wie ist die Bridge definiert?
So,
define mqttGeneric MQTT_GENERIC_BRIDGE T5,T7,Schalter_1BEA79,Brunnen_20C4F6,BM_1A8215,HM_69F161,HM_69F136
attr mqttGeneric IODev Broker_BB17
attr mqttGeneric room MQTT
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 05 September 2018, 22:34:05
Natürlich haben schon Tausende vor mir so ein Problem gahabt und natürlich gibt es bereits eine Lösung ;D

Das 'Schaltproblem' checke ich gleich ein, die global-Sache schaue ich mir morgen an.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 05 September 2018, 22:39:40
Danke, gute Nacht
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: inesa394 am 06 September 2018, 09:39:40
Seit dem update auf die neue Version schaltet bei mir nichts mehr
Internals:
   DEF        192.168.178.47
   DeviceName 192.168.178.47:55443
   FD         14
   HOST       192.168.178.47
   ID         192.168.178.47
   NAME       Yeelight_i
   NOTIFYDEV  global
   NR         67
   NTFY_ORDER 50-Yeelight_i
   PARTIAL   
   PORT       55443
   PROTO      1
   STATE      opened
   TYPE       YeeLight
   READINGS:
     2018-09-06 09:27:42   bright          54
     2018-09-06 09:27:42   color_flow      off
     2018-09-06 09:27:42   color_mode      RGB
     2018-09-06 09:27:42   ct              4000
     2018-09-06 09:27:42   flow_params     
     2018-09-06 09:27:42   hue             138
     2018-09-06 09:27:42   music_mode      off
     2018-09-06 09:27:42   name           
     2018-09-06 09:28:19   power           off
     2018-09-06 09:27:42   rgb             ff0000
     2018-09-06 09:27:42   rgb_blue        0
     2018-09-06 09:27:42   rgb_green       0
     2018-09-06 09:27:42   rgb_red         255
     2018-09-06 09:27:42   sat             100
     2018-09-06 09:27:42   sleeptimer      0
     2018-09-06 09:27:31   state           opened
   helper:
     CommandSet on off toggle on-for-timer off-for-timer intervals bright dimup dimdown name default:noArg reopen:noArg statusrequest:noArg hsv hue sat rgb color ct start_cf stop_cf scene circlecolor:noArg blink
     AnsQue:
       {"id":1, "result":["off","54","4000","16711680","138","100","1","0","0","","0",""]}
     ErrQue:
     SendQue:
Attributes:
   devStateIcon {my $power=ReadingsVal($name,"power","off");my $mode=ReadingsVal($name,"color_mode","RGB");if($power eq "off"){Color::devStateIcon($name,"rgb","rgb","power");}else{if($mode eq "RGB"){Color::devStateIcon($name,"rgb","rgb","bright");}elsif($mode eq "color temperature"){Color::devStateIcon($name,"rgb",undef,"bright");}}}
   event-on-change-reading .*
   mqttDefaults base={"Smarthome/licht/$device/$reading"}
   mqttPublish *:topic={$base}
   mqttSubscribe state:stopic=Smarthome/licht/Yeelight_i/set  bright:stopic=Smarthome/licht/Yeelight_i/bright hue:stopic=Smarthome/licht/Yeelight_i/hue rgb:stopic=Smarthome/licht/Yeelight_i/rgb
   room       Licht,YeeLight
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
   webCmd     rgb:bright:ct:rgb ffffff:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off
   widgetOverride bright:colorpicker,BRI,0,1,100 ct:colorpicker,CT,1700,10,6500 rgb:colorpicker,RGB


internals:
   .eventMapCmd on:noArg off:noArg
   IODev      Mosquito
   NAME       mqtt_device_ilicht
   NR         766
   STATE      33
   TYPE       MQTT_DEVICE
   retain     *:1
   .attraggr:
   .attrminint:
   .qos:
     *          0
   .retain:
     *          1
   READINGS:
     2018-09-06 09:27:50   bright          54
     2018-07-26 21:40:33   ct              4930
     2018-09-06 09:27:50   hue             138
     2018-07-26 21:53:33   level           33
     2018-09-06 09:23:03   power           off
     2018-09-06 09:27:50   rgb             ff0000
     2018-09-06 09:29:34   state           on
     2018-07-25 17:46:39   switch          off
     2018-09-06 09:29:34   transmission-state outgoing publish sent
   message_ids:
   publishSets:
     :
       topic      Smarthome/licht/Yeelight_i/set
       values:
         on
         off
     bright:
       topic      Smarthome/licht/Yeelight_i/bright
       values:
         bright:slider,0,1,100
     hsv:
       topic      Smarthome/licht/Yeelight_i/hsv
       values:
     hue:
       topic      Smarthome/licht/Yeelight_i/hue
       values:
     rgb:
       topic      Smarthome/licht/Yeelight_i/rgb
       values:
   sets:
     bright     bright:slider,0,1,100
     hsv       
     hue       
     off       
     on         
     rgb       
   subscribe:
     Smarthome/licht/Yeelight_i/bright
     Smarthome/licht/Yeelight_i/ct
     Smarthome/licht/Yeelight_i/hsv
     Smarthome/licht/Yeelight_i/hue
     Smarthome/licht/Yeelight_i/power
     Smarthome/licht/Yeelight_i/rgb
     Smarthome/licht/Yeelight_i/state
   subscribeExpr:
     ^Smarthome\/licht\/Yeelight_i\/bright$
     ^Smarthome\/licht\/Yeelight_i\/ct$
     ^Smarthome\/licht\/Yeelight_i\/hsv$
     ^Smarthome\/licht\/Yeelight_i\/hue$
     ^Smarthome\/licht\/Yeelight_i\/power$
     ^Smarthome\/licht\/Yeelight_i\/rgb$
     ^Smarthome\/licht\/Yeelight_i\/state$
   subscribeQos:
     Smarthome/licht/Yeelight_i/bright 0
     Smarthome/licht/Yeelight_i/ct 0
     Smarthome/licht/Yeelight_i/hsv 0
     Smarthome/licht/Yeelight_i/hue 0
     Smarthome/licht/Yeelight_i/power 0
     Smarthome/licht/Yeelight_i/rgb 0
     Smarthome/licht/Yeelight_i/state 0
   subscribeReadings:
     Smarthome/licht/Yeelight_i/bright:
       cmd       
       name       bright
     Smarthome/licht/Yeelight_i/ct:
       cmd       
       name       ct
     Smarthome/licht/Yeelight_i/hsv:
       cmd       
       name       hsv
     Smarthome/licht/Yeelight_i/hue:
       cmd       
       name       hue
     Smarthome/licht/Yeelight_i/power:
       cmd       
       name       power
     Smarthome/licht/Yeelight_i/rgb:
       cmd       
       name       rgb
     Smarthome/licht/Yeelight_i/state:
       cmd       
       name       state
Attributes:
   DbLogExclude .*
   IODev      Mosquito
   eventMap   on:on off:off
   icon       mqtt
   publishSet on off Smarthome/licht/Yeelight_i/set
   publishSet_bright bright:slider,0,1,100 Smarthome/licht/Yeelight_i/bright
   publishSet_hsv Smarthome/licht/Yeelight_i/hsv
   publishSet_hue Smarthome/licht/Yeelight_i/hue
   publishSet_rgb Smarthome/licht/Yeelight_i/rgb
   retain     1
   room       Mqtt
   stateFormat level
   subscribeReading_bright Smarthome/licht/Yeelight_i/bright
   subscribeReading_ct Smarthome/licht/Yeelight_i/ct
   subscribeReading_hsv Smarthome/licht/Yeelight_i/hsv
   subscribeReading_hue Smarthome/licht/Yeelight_i/hue
   subscribeReading_power Smarthome/licht/Yeelight_i/power
   subscribeReading_rgb Smarthome/licht/Yeelight_i/rgb
   subscribeReading_state Smarthome/licht/Yeelight_i/state
   webCmd     rgb:bright:ct:rgb ffffff:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off
   widgetOverride bright:colorpicker,BRI,0,1,100 ct:colorpicker,CT,1700,10,6500 rgb:colorpicker,RGB

Wenn ich die alte von Ende Juni zurückspiele funktioniert es wieder

Ines

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 06 September 2018, 10:11:06
Zitat von: inesa394 am 06 September 2018, 09:39:40
Seit dem update auf die neue Version schaltet bei mir nichts mehr
zurückspiele funktioniert es wieder

Ines
Muß ich leider bestätigen, also liegt es nicht nur an meiner Konfiguration. ;)

Übrigens habe ich nicht nur den Nebeneffekt dass die attr global userattr befüllt werden,
in meinem Hauptsystem werden die Helligkeitswerte nicht mehr ge-published mit dem Effekt dass meine Rolladen gestern abend nicht geschlossen wurden.
Werde jetzt mal zuerst  wieder im Hauptsystem auf 10_MQTT_BRIDGE.pm zurückgehen, bis 10_MQTT_GENERIC_BRIDGE.pm auf dem Testsystem stabil läuft.

Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 06 September 2018, 10:54:32
@Ines
Bitte Version der Bridge angeben und auch die entsprechende Konfig.
Ich verstehe nicht ganz, was die zweite Listing damit zu tun hat. Ist doch ein MQTT_DEVICE?

@Billy
Es funktionier also auch mit der Version aus heutigem Update auch nicht? Wie sieht die Konfiguration für deine Helligkeitswerte aus?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 06 September 2018, 11:56:02
Zitat von: hexenmeister am 06 September 2018, 10:54:32
@Billy
Es funktionier also auch mit der Version aus heutigem Update auch nicht? Wie sieht die Konfiguration für deine Helligkeitswerte aus?

Nein, es funktioniert mit der Version aus heutigem Update nicht!

Ich hatte einfach die Bridge auf meinem Produktiv System mit einem Homematic Motion/Helligkeitssensor verbunden und

diese attr aktiviert
attr BM_1A8215 mqttDefaults base={"/$device/$name"}
attr BM_1A8215 mqttPublish attr sensor mqttPublish brightness:topic={$base} motion:topic={$base}


Die Werte wurden dann bis zum gestrigen update auch gesendet.
Habe jetzt aber die MQTT_GENERIC_BRIDGE  auf meinem Produktivstem gelöscht, mein attr global userattr bereinigt und die
10_MQTT_BRIDGE.pm wieder aktiviert. Jetzt sendet der Sensor wieder Helligkeits und Motion Werte über Mqtt an den Brooker.

Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: inesa394 am 07 September 2018, 10:01:28
Das ist meine Bridge
Internals:
   DEF        TYPE=TASMOTA_DEVICE,TYPE=XiaomiSmartHome,TYPE=XiaomiSmartHome_Device,TYPE=YeeLight,TYPE=dummy,TYPE=MilightDevice,TYPE=MilightBridge,TYPE=WifiLight
   IODev      mqtt
   NAME       mqttGeneric
   NR         179
   NTFY_ORDER 50-mqttGeneric
   STATE      outgoing publish sent
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    .*
   prefix     TYPE=TASMOTA_DEVICE,TYPE=XiaomiSmartHome,TYPE=XiaomiSmartHome_Device,TYPE=YeeLight,TYPE=dummy,TYPE=MilightDevice,TYPE=MilightBridge,TYPE=WifiLight
   READINGS:
     2018-09-06 09:27:42   device-count    0
     2018-09-06 09:27:39   incoming-count  0
     2018-09-06 09:27:39   outgoing-count  0
     2018-09-06 09:26:59   transmission-state outgoing publish sent
     2018-09-06 09:27:39   updated-reading-count 0
     2018-09-06 09:27:39   updated-set-count 0
   devices:
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     FHEMWEB    *
     Global     *
     MQTT       transmission-state
     MQTT_BRIDGE transmission-state
     MQTT_DEVICE transmission-state
     MQTT_GENERIC_BRIDGE *
     telnet     *
   message_ids:
   subscribe:
   subscribeExpr:
   subscribeQos:
Attributes:
   IODev      mqtt
   icon       mqtt
   room       MQTT
   stateFormat transmission-state

version 0.9.5
Dann hab ich wohl die funktionweise deines Moduls falsch interpretiert. Wollte über mein lokales lan
like fhem2fhem mein licht schalten mit hilfe deiner Bridge. Dazu habe ich dieses mqtt-device auf meinen
entfernten fhem Server definiert ???. Hat ja irgenwie auch alles funktioniert bis ich dein Modul geupdatet
hatte.Na ja dann muss wohl erst mal bei der kombination Mqtt-Device Mqtt-Bridge bleiben.

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 07 September 2018, 20:52:05
Problem gefunden, Lösung noch nicht.
Nach einem Restart geht nichts. Definiert man die Bridge im laufendem Betrieb, oder disconnected man kurz die MQTT-Instanz mit anschliessendem connect, geht wieder alles. Irgendwo habe ich da ein Problem in der Initialisierung eingebaut. Ich gehe malk auf die Suche...
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 07 September 2018, 21:22:47
Zitat von: hexenmeister am 07 September 2018, 20:52:05
Problem gefunden, Lösung noch nicht.
Ich gehe mal auf die Suche...

Lass dir Zeit. Eine Frage hätte ich noch.
Ich würde wenn es wieder läuft MQTT_GENERIC_BRIDGE nur für die Anbindung bestehender FHEM-Devices
benutzen in Verbindung mit Mqtt-Device für Anbindung externer MQTT Quellen. (Wie Sonoff etc.)
Das müsste doch problemlos gehen?
Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 15 September 2018, 17:37:34
Gibt es hier schon was neues? Rudi plant ein FHEM 5.9 Release.

Da hier eine Version eingecheckt ist die nicht richtig läuft wollte ich mal nachfragen..

Gruß Patrick
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 15 September 2018, 17:59:32
Habe gerade eine Version eingecheckt, die bei mir ganz gut läuft. Kann gern getestet werden ;)
Im Anhang für alle Fälle nochmal.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 16 September 2018, 14:30:58
Bei mir läuft alles 👍
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 16 September 2018, 14:36:23
Sehr gut! Jetzt muss ich nur noch keine Fehler mehr einbauen, bei den Restarbeiten, die ich noch machen will ;D
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: aisberg am 16 September 2018, 16:28:02
funktioniert bei mir leider nicht.
Das habe ich eingegeben (korrigiert):
defmod  mqttGeneric MQTT_GENERIC_BRIDGE mqtt licht_aussen,licht_kueche,licht_terrasse,BewegungT,BewegungV
attr mqttGeneric IODev myBroker


myBroker ist so definiert:
define myBroker MQTT 127.0.0.1:1883
attr myBroker room Kommunikation,MQTT


Wenn ich im mqttGeneric die devinfo oder devlist aufrufe, bekomme ich nur: "no devices found"
Wo ist jetzt mein Denkfehler? Muss das in den Geräten erst noch jeweils aktiviert werden?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: ergerd am 16 September 2018, 16:34:32
Hallo aisberg

hier meine Difiniton bei einem Device:


attr denise_hms100tf mqttPublish *:topic={"/SmartHome/$device/$reading"}


Grüße
Rainer
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: aisberg am 16 September 2018, 16:36:51
ah, dann habe ich es jetzt verstanden, ich stelle das dann bei den jeweiligen Geräten ein!
Teste ich gleich mal.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: aisberg am 16 September 2018, 16:43:10
Ich bin ja voll begeistert!!!! Das funktioniert ja wie am Schnürchen! Perfekt!
Vielen Dank.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: aisberg am 16 September 2018, 18:55:45
eine dumme Anfänger-Frage habe ich nun aber doch noch:
Es war ein Denkfehler von mir, ein Reading meiner Schalter zu ändern, denn dadurch werden die Schalter nicht geschaltet. Ich denke, die Schalter benötigen ein explizites set on oder set off oder alternativ set toogle. Wie mache ich das über MQTT?
Also das hier ist falsch:
attr licht_aussen mqttSubscribe *:topic={"/SmartHome/$device/$reading/value"}
denn dann wird ja nur das Reading geändert, ohne dass sich der Homematic-Schalter wirklich ändert.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: ergerd am 16 September 2018, 19:01:35
Ich habe in kleines Problem:

Mein Dymmy-Device:

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"}


Im Log steht:

2018.09.16 18:42:36 1: PERL WARNING: Possible unintended interpolation of @14211345 in string at (eval 19888) line 1.


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?

Hinweis: Wenn ich das Device als MQTT_DEVICE definiere funktioniert alles klaglos.

Grüße
Rainer
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 16 September 2018, 19:03:09
Zitat von: aisberg am 16 September 2018, 18:55:45
...
attr licht_aussen mqttSubscribe *:topic={"/SmartHome/$device/$reading/value"}
denn dann wird ja nur das Reading geändert, ohne dass sich der Homematic-Schalter wirklich ändert.

versuche mal:
attr licht_aussen mqttSubscribe *:stopic={"/SmartHome/$device/$reading/value"}
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: ergerd am 16 September 2018, 19:08:28
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
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: aisberg am 16 September 2018, 19:17:32
@SamNitro
was so ein kleines "s" für set doch ausmacht - perfekt!
Vielen Dank!!
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 16 September 2018, 19:56:51
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).
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 16 September 2018, 20:03:58
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.

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: ergerd am 16 September 2018, 20:31:30
Danke hexenmeister!

Du machst deinem Namen alle Ehre :-)

Ich liebe dieses Modul!

Grüße
Rainer
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 18 September 2018, 20:02:17
@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
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 19 September 2018, 10:27:16
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
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag 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.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 19 September 2018, 21:12:26
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. :)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 22 September 2018, 23:34:14
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
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hopgeq am 23 September 2018, 22:22:20
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.


Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 24 September 2018, 08:19:19
Zitat von: hexenmeister am 22 September 2018, 23:34:14
Die userattr funktionieren wieder, wie sie sollen. :)


Kann ich bestätigen. Danke! :)

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 24 September 2018, 23:18:31
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?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hopgeq am 25 September 2018, 00:35:12
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"}
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Joe9 am 27 September 2018, 14:33:31
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?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 27 September 2018, 14:47:06
Kann ich bestätigen.
Hätte ich heute auch noch gemeldet.
Beim neuen verknüpfen eines device mit der Bridge sind die attr der anderen devices gelöscht.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 27 September 2018, 22:38:51
Nachvollzogen, gefunden, gefixt. Morgen per Update :)
Die Steuerattribute werden jetzt auch beim entfernen des Gerätes aus der Liste nicht angefast. Nach dem Restart sind sie natürlich dann weg.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 27 September 2018, 22:49:46
Ach ja, in der neuen Version wird es jetzt verhindert, dass die Readings-Änderungen durch Empfang per MQTT sofort weitergepublisht werden. Damit kann publish und subscribe mit derselben Readings verwendet werden, ohne dass es zu Loops kommt.

So kann man dann aus dummies leicht Steuergeräte in einer anderen FHEM-Instanz basteln, so eine Art FHEM2FHEM-Ersatz. Diese sehen aus und verhalten sich dann eben wie auch eigentliche Gerätschaften.

Beispiele:
- Switch:
defmod DG_WZ_Licht_Top dummy
attr DG_WZ_Licht_Top devStateIcon off:light_light_dim_00@gray on:light_light_dim_100@#FF5722 .*:hourglass
attr DG_WZ_Licht_Top eventMap {usr=>{'an'=>'on','aus'=>'off'}}
attr DG_WZ_Licht_Top group Beleuchtung
attr DG_WZ_Licht_Top icon light_ceiling
attr DG_WZ_Licht_Top mqttPublish state:topic=dg/wz/licht/top/set
attr DG_WZ_Licht_Top mqttSubscribe state:topic=dg/wz/licht/top/state
attr DG_WZ_Licht_Top room Wohnzimmer
attr DG_WZ_Licht_Top setList on off
attr DG_WZ_Licht_Top webCmd an:aus


- Dimmer:

defmod DG_WZ_Licht_Hoch dummy
attr DG_WZ_Licht_Hoch devStateIcon off:light_light_dim_00@gray 0:light_light_dim_00@gray dark:light_light_dim_10@#FF5722 \d:light_light_dim_10@#FF5722 1\d:light_light_dim_20@#FF5722 2\d:light_light_dim_30@#FF5722 3\d:light_light_dim_40@#FF5722 4\d:light_light_dim_50@#FF5722 5\d:light_light_dim_60@#FF5722 half:light_light_dim_60@#FF5722 6\d:light_light_dim_70@#FF5722 7\d:light_light_dim_80@#FF5722 bright:light_light_dim_80@#FF5722 8\d:light_light_dim_90@#FF5722 9\d:light_light_dim_100@#FF5722 100:light_light_dim_100@#FF5722 on:light_light_dim_100@#FF5722 .*:hourglass
attr DG_WZ_Licht_Hoch eventMap {dev=>{'on'=>'100','off'=>'0'}, \
usr=>{'an'=>'on','aus'=>'off','dunkel'=>'15','hell'=>'70','halb'=>'50'}}
attr DG_WZ_Licht_Hoch group Beleuchtung
attr DG_WZ_Licht_Hoch icon light_ceiling
attr DG_WZ_Licht_Hoch mqttPublish level:topic=dg/wz/licht/hoch/set\
state:topic=dg/wz/licht/hoch/set
attr DG_WZ_Licht_Hoch mqttSubscribe level:topic=dg/wz/licht/hoch/level\
state:topic=dg/wz/licht/hoch/state
attr DG_WZ_Licht_Hoch readingList level
attr DG_WZ_Licht_Hoch room Wohnzimmer
attr DG_WZ_Licht_Hoch setList on off level:slider,0,1,100
attr DG_WZ_Licht_Hoch sortby 10wz_20
attr DG_WZ_Licht_Hoch stateFormat level
attr DG_WZ_Licht_Hoch webCmd an:hell:halb:dunkel:aus:level
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 27 September 2018, 22:52:58
Zitat von: hopgeq am 25 September 2018, 00:35:12
Die Beispiele könnten vielleicht mit in die Doku für mqttSubscribe? Also
Eher in wiki. Irgendwann wollte ich Zeit suchen, so einen Artikel zu erstellen ;D
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 00:10:08
Zitat von: hexenmeister am 27 September 2018, 22:49:46
Ach ja, in der neuen Version wird es jetzt verhindert, dass die Readings-Änderungen durch Empfang per MQTT sofort weitergepublisht werden. Damit kann publish und subscribe mit derselben Readings verwendet werden, ohne dass es zu Loops kommt.

Bei meinen Lampen funktioniert das auch ganz gut. Aber bei meinem HM_Rolladen nicht.

2018.09.27 23:57:54 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument set_80, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:17 3: CUL_HM set rollo_ez stop
2018.09.27 23:59:17 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument set_stop, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:42 3: CUL_HM set rollo_ez 100
2018.09.27 23:59:42 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument set_100, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:50 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument deviceMsg, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:50 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument level, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:50 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument motor, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.27 23:59:51 3: CUL_HM set rollo_ez pct 100
2018.09.27 23:59:51 3: CUL_HM set rollo_ez on
2018.09.27 23:59:51 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument set_100, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up
2018.09.28 00:07:09 3: CUL_HM set rollo_ez pct 100
2018.09.28 00:07:09 1: MQTT_GENERIC_BRIDGE: setUpdate: error in set command: Unknown argument set_100, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,msgErrors,attack,all deviceRename down fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on:noArg pair:noArg pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg stop:noArg toggle:noArg toggleDir:noArg unpair:noArg up


EDIT:

allerdings lausche ich komplett alles..
attr rollo_ez mqttPublish *:topic={"/$device/$reading"}
attr rollo_ez mqttSubscribe *:stopic={"/$device/$reading"}


Der Befehl geht an /rollo_ez/pct         (0-100)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 28 September 2018, 09:49:43
Zitat von: hexenmeister am 27 September 2018, 22:38:51
Nachvollzogen, gefunden, gefixt. Morgen per Update :)
Die Steuerattribute werden jetzt auch beim entfernen des Gerätes aus der Liste nicht angefast. Nach dem Restart sind sie natürlich dann weg.
passt!
Zitat von: hexenmeister am 27 September 2018, 22:49:46
Ach ja, in der neuen Version wird es jetzt verhindert, dass die Readings-Änderungen durch Empfang per MQTT sofort weitergepublisht werden. Damit kann publish und subscribe mit derselben Readings verwendet werden, ohne dass es zu Loops kommt.

So kann man dann aus dummies leicht Steuergeräte in einer anderen FHEM-Instanz basteln, so eine Art FHEM2FHEM-Ersatz. Diese sehen aus und verhalten sich dann eben wie auch eigentliche Gerätschaften.

Super, bin zwar gerade auf Kreta habe mich aber per VPN auf mein Testsystem eingeloggt und mit Test-Dummies getestet.
Scheint jetzt alles zu laufen. :)
Danke
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 10:10:40
Zitat von: SamNitro am 28 September 2018, 00:10:08
allerdings lausche ich komplett alles..
attr rollo_ez mqttPublish *:topic={"/$device/$reading"}
attr rollo_ez mqttSubscribe *:stopic={"/$device/$reading"}


Der Befehl geht an /rollo_ez/pct         (0-100)

Ich rate dringend davon, das so zu tun. In diesem Fall werden alle Readings gepublisht und dann wieder empfangen und als SET-Befehl abgesetzt. Das kann nicht passen und wird unweigerlich zu Fehlermeldungen (und ggf. auch zum unerwünschten Verhalten) führen. Es gibt ja (vor allem bei HomeMatic) viele Readings und relativ wenig gültige SET-Befehle.

Außerdem ist hier die Richtung anders. Es wird derzeit verhindert, dass _empfangene_ Nachrichten weiter gepublisht werden, jedoch nicht, dass _gesendete_ wieder empfangen werden. Ist auch nicht so einfach zu verhindern, da in diesem Fall der MQTT-Server beteiligt ist. Eine saubere Lösung würde vermutlich auch Änderungen in 00_MQTT-Modul erfordern (ClientID durchreichen, ich weiß gerade nicht, ob die Verwendete Bibliothek das schon kann).
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 10:12:26
Ok dann werde ich es so lassen wie bisher. So läuft ja alles.


Mobil unterwegs!
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 13:04:43
Habe doch noch ein kleines problem.

Für Node-Red benötige ich die Rückmeldung. Entweder bekomme ich ein loop oder keine Rückmeldung.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 15:11:18
Spricht was dagegen, zwei verschiedene Topics dafür zu nehmen?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 17:45:31
jetzt ist überall der wurm drin. Bin im Hausumbau Stress jetzt noch Flitterwochen und jetzt Funktioniert nicht mal mehr der normale Rolladenschalter weil da Rückmeldungen über MQTT kommen die da nicht hin sollen....


Habe versucht 2 topics zu nehmen aber gerade klappt einfach nix mehr. ich versuche auf eine alte version zurück zu kehren
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 19:17:07
Wenn ich noch verstehen würde, was bei Dir nicht klappt...

Habe gerade mit einem HM Rolladenaktor nachgestellt.

Funktionierendes Beispiel mit zwei (eigentlich sogar 3) Topics.

Steuerdummy:
defmod OG_BZ_Rollo dummy
attr OG_BZ_Rollo devStateIcon runter:fts_shutter_100 \d(.\d)*:fts_shutter_100 hoch:fts_shutter_10 100:fts_shutter_10 1\d(.\d)*:fts_shutter_90 2\d(.\d)*:fts_shutter_80 3\d(.\d)*:fts_shutter_70 4\d(.\d)*:fts_shutter_60 5\d(.\d)*:fts_shutter_50 6\d(.\d)*:fts_shutter_40 schatten:fts_shutter_40 7\d(.\d)*:fts_shutter_30 8\d(.\d)*:fts_shutter_20 9\d(.\d)*:fts_shutter_10 nacht:fts_shutter_10
attr OG_BZ_Rollo eventMap {usr=>{'oeffnen'=>'100','schliessen'=>'0','halb'=>'60','schatten'=>'80','dunkel'=>'30'}}
attr OG_BZ_Rollo group Beschattung
attr OG_BZ_Rollo icon fts_shutter
attr OG_BZ_Rollo mqttPublish position:topic=og/bz/rollo/all/set state:topic=og/bz/rollo/all/set
attr OG_BZ_Rollo mqttSubscribe position:topic=og/bz/rollo/all/position state:topic=og/bz/rollo/all/state
attr OG_BZ_Rollo readingList position
attr OG_BZ_Rollo room Badezimmer
attr OG_BZ_Rollo setList position:slider,0,1,100
attr OG_BZ_Rollo stateFormat position
attr OG_BZ_Rollo webCmd oeffnen:schatten:halb:dunkel:schliessen:position


HM-Aktor:

defmod bz_rollo CUL_HM xxxxxx
attr bz_rollo model HM-LC-Bl1PBU-FM
...
attr bz_rollo mqttPublish pct:topic=og/bz/rollo/all/position state:topic=og/bz/rollo/all/state
attr bz_rollo mqttSubscribe pct:stopic=og/bz/rollo/all/set



Die Bridge kann eine Übersicht ausgeben, wo man gut sehen kann, welche Topics verwendet werden:

Aktor:
Zitat
bz_rollo
  publish:
    pct              => og/bz/rollo/all/position (mode: R; qos: 0)
    state            => og/bz/rollo/all/state (mode: R; qos: 0)
  subscribe:
    pct              <= og/bz/rollo/all/set (mode: S)


Dummy:
Zitat
OG_BZ_Rollo
  publish:
    position         => og/bz/rollo/all/set (mode: R; qos: 0)
    state            => og/bz/rollo/all/set (mode: R; qos: 0)
  subscribe:
    position         <= og/bz/rollo/all/position (mode: R)
    state            <= og/bz/rollo/all/state (mode: R)

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 19:31:17
Bei mir ist es die Kommunikation zwischen NodeRed und FHEM

z.B. meine wz_stehlampe

attr wz_stehlampe mqttPublish *:topic={"/out/$device/$reading"}
attr wz_stehlampe mqttSubscribe *:stopic={"/in/$device/$reading"}


[/out/wz_stehlampe/state]--------[Schalter]----------------[/in/wz_stehlampe/state]
                                 [Alexa-Stehlampe]---------[/in/wz_stehlampe/state]


oder so

attr wz_stehlampe mqttPublish *:topic={"/out/$device/$reading"}
attr wz_stehlampe mqttSubscribe state:stopic={"/in/$device/set"}


[/out/wz_stehlampe/state]--------[Schalter]----------------[/in/wz_stehlampe/set]
                                 [Alexa-Stehlampe]---------[/in/wz_stehlampe/set]


Das problem ist NodeRed da lasse ich mir einen Schalter anzeigen: der Zeigt mir logischerweise den status vom Input an



Entweder zeigt er mir nicht den richtigen status an oder er lässt sich nich korrekt schalten
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 19:49:58
Sieht nicht falsch aus. Poste mal die Node-Red Export.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 19:52:47
So ist der alte Stand der mit der alten Version Läuft:

[{"id":"af1a4b9a.2f1ac8","type":"alexa-home","z":"9d8c568.24a8628","devicename":"Stehlampe","inputtrigger":false,"x":410,"y":600,"wires":[["110aabab.12ef8c"]]},{"id":"16968764.a59469","type":"mqtt in","z":"9d8c568.24a8628","name":"","topic":"/out/wz_stehlampe/state","qos":"2","broker":"65613e0a.ef6478","x":130,"y":560,"wires":[["a1339df4.6c78c8"]]},{"id":"110aabab.12ef8c","type":"mqtt out","z":"9d8c568.24a8628","name":"","topic":"/in/wz_stehlampe/state","qos":"","retain":"","broker":"65613e0a.ef6478","x":670,"y":560,"wires":[]},{"id":"a1339df4.6c78c8","type":"ui_switch","z":"9d8c568.24a8628","name":"","label":"Stehlampe","group":"df58a679.8acae","order":1,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":410,"y":560,"wires":[["110aabab.12ef8c"]]},{"id":"65613e0a.ef6478","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""},{"id":"df58a679.8acae","type":"ui_group","z":"","name":"Schalter","tab":"dbb46b72.63ce3","order":2,"disp":true,"width":"6","collapse":false},{"id":"dbb46b72.63ce3","type":"ui_tab","z":"","name":"Home","icon":"dashboard","order":1}]
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 22:08:39
Problem verstanden. Ich lasse mir was einfallen.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 22:11:56
Zitat von: hexenmeister am 28 September 2018, 22:08:39
Problem verstanden. Ich lasse mir was einfallen.

Du bist mega ;)
Hatte schon "angst" es nicht gut genug zu erklären :D


Schade ist das ich kein Test-System habe und bei mir gerade alles sehr gut läuft.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 22:19:14
Habe nicht bedacht, dass zwar an einer Stelle lieber nicht weitergesendet werden soll, an der Aktor-Seite ist jedoch genau das notwendig. Ich überlege nur, wie ich das konfigurierbar machen kann. Automatische Erkennung wird vermutlich nicht einfach.

Testsysteme sind beim Einsatz von Entwicklungsversionen sehr von Vorteil. Ich habe mittlerweile mehrere ;D
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 22:24:30
Zitat von: hexenmeister am 28 September 2018, 22:19:14
Testsysteme sind beim Einsatz von Entwicklungsversionen sehr von Vorteil. Ich habe mittlerweile mehrere ;D

Ja das stimmt, aber wie gesagt momentan habe ich viele andere Sachen im Kopf.. damit das haus FHEM kompatibel ist :D


Kann man hier evtl einen weiteren Topic dafür nehmen? (einer gibt weiter der andere nicht)
atopic
stopic
topic
xytopic
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 28 September 2018, 22:37:20
Ja, so in dem Dreh hatte ich schon gedacht. Es gibt sogar schon ein (undokumentiertes) Subscribe-Topic, der weitertriggert, allerdings nur für topic, nicht für stopic. Derzeit überlege ich, ob es mehr Sinn macht, einen zusätzlichen Flag beim publish einzuführen. So was wie 'attr xyz mqttPublish state:topic=whatever *:forward-on-receive=true'.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: SamNitro am 28 September 2018, 22:44:51
Das musst letztendlich du entscheiden was einfacher ist umzusetzen. Ich weiß nur nicht ob ein zusätzliches Flag zu unübersichtlich wird.

ftopic wäre noch frei  ;D
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: choetzu am 30 September 2018, 22:38:53
Darf man sich kurz einmischen? ;) ich habe mit Mqtt noch keine Berührungspunkte gehabt. Hab mich heute aber eingelesen. Nun möchte ich meine 2 Fhem Instanzen mit deinem Modul nutzen. Ich habe auf meinen beiden Raspi3 bereits mosquitto installiert. In deinem Wiki finde ich zur Verbindung zweier Instanzen kkeine Beschreibung. Hier in deinem thread hast du dies aber erwähnt.


Danke.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 30 September 2018, 23:32:48
Zitat von: SamNitro am 28 September 2018, 22:44:51
Das musst letztendlich du entscheiden was einfacher ist umzusetzen. Ich weiß nur nicht ob ein zusätzliches Flag zu unübersichtlich wird.

ftopic wäre noch frei  ;D

Ich denke, ich weiß mittlerweile, wie ich das machen werde, muss natürlich noch umgesetzt werden. Bis dahin habe ich einen kleinen QuickFix, damit die selbe Version bei Dir und auch für mich funktioniert. :)

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 30 September 2018, 23:36:40
Zitat von: choetzu am 30 September 2018, 22:38:53
Darf man sich kurz einmischen? ;) ich habe mit Mqtt noch keine Berührungspunkte gehabt. Hab mich heute aber eingelesen. Nun möchte ich meine 2 Fhem Instanzen mit deinem Modul nutzen. Ich habe auf meinen beiden Raspi3 bereits mosquitto installiert. In deinem Wiki finde ich zur Verbindung zweier Instanzen kkeine Beschreibung. Hier in deinem thread hast du dies aber erwähnt.


  • muss auf beiden instanzen dein Modul laufen?
  • wenn ja, dann kann nur eine von den beiden das IoDev sein, oder

Danke.

Mosquitto benötigst Du nur einmal. Als IODev brauchst du MQTT an beiden Seiten, jeweils (die gleiche!) IP des mosquitto-Server anzugeben.
Die GenericBridge brauchst Du natürlich auch auf beien Seiten, mit der MQTT-Instanz als IODev.

Jetzt ist die große Frage, was Du unter 'zwei Instanzen verbinden' vorstellst. Automatisch wird da nichts synchrinisiert, Du musst entscheiden, was geschehen soll und entsprechend definieren.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: choetzu am 01 Oktober 2018, 06:37:17
guten Morgen, herzlichen Dank für deine Antwort.

Mein Vorhaben. Genau so wie du will ich meine zwei Instanzen insofern von einander trennen, dass auf dem einen die Aktoren, Sensoren und zu schaltenden Devices sind und auf dem anderem der Rest sowie die Logik. Zudem will ich einige Reading via notify vom einen zum anderen übertragen

Ich will also Befehle und Reading hin und her "schiessen". Für das ist doch MQTT geeignet, oder?

lg c
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Billy am 01 Oktober 2018, 08:24:08
Zitat von: choetzu am 01 Oktober 2018, 06:37:17
Mein Vorhaben. Genau so wie du will ich meine zwei Instanzen insofern von einander trennen, dass auf dem einen die Aktoren, Sensoren und zu schaltenden Devices sind und auf dem anderem der Rest sowie die Logik. Zudem will ich einige Reading via notify vom einen zum anderen übertragen

Ich will also Befehle und Reading hin und her "schiessen". Für das ist doch MQTT geeignet, oder?
lg c

Um Readings oder Befehle via mqtt zu übertragen brauchst du beim Einsatz der MQTT_GENERIC_BRIDGE kein notify!
Und ja 
ZitatIch will also Befehle und Reading hin und her "schiessen".
Dafür ist MQTT geeignet.

Zitat;) ich habe mit Mqtt noch keine Berührungspunkte gehabt.

Ich würde dir empfehlen mit z.B. dem Tool mqtt-spy zu-plotten was da zum Brooker ge-published  wird.

Du kannst z.B auf einer Instanz einen Sensor mit der Bridge verbinden, die gewünschen zu übertragenden Readings (Befehle)
auswählen und erst mal mit mqtt-spy schauen was am Brooker ankommt.
Dann kannst du auf der 2ten Instanz z.B. ein Dummy-Device oder ein bestehendes Device an die Bridge der 2ten Instanz hängen und per subscribe Attribute die Readingswerte (Befehle) dem Device zuordnen.

Steht zwar alles in der commandref aber Versuch macht kluch. ;)

Gruß Billy
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 Oktober 2018, 11:08:43
Ich denke, es wird langsam Zeit, häufige Anwendungsfälle und dazugehötige Config an einer Stelle zu sammeln. Kann später vlt. ins Wiki.
Ich habe schon mal einen neuen Thread angelegt und werde im Laufe des Tages ein Paar Konfigurationsbeispiele dort anlegen: https://forum.fhem.de/index.php/topic,91642.msg841367.html#msg841367
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 01 Oktober 2018, 15:24:33
Moin mal ne Frage zu de HowTo aus der ersten Seite zum Punkte Subscribe und QOS:

attr <dev> mqttSubscribe temperature:topic=/TEST/temperature test:qos=0 *:topic={"/TEST/$reading/value"}
attr <dev> mqttSubscribe desired-temperature:stopic={"/TEST/temperature/set"
}


Ich habe exakt das Beispiel aus der 2. Zeile ;-)
Würde ich nun mit:  desired-temperature:qos=2 das auf QOS 2 setzen?

Beim Beispiel aus der ersten Zeile mit "test:qos=0" ist mir irgendwie unklar woher das "test" kommt.
In der Sammlung konnte ich dazu kein Beispiel finden. :-)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 Oktober 2018, 17:58:10
Ja, damit würdest Du QOS für desired-temperature auf 2 setzen.
Beispiel aus der Zeitle 1 ist leicht irreführend. QOS wird hier auf 0 für Reading namens 'test' gesetzt. Dieser kann per Topic '/TEST/test/value' gesetzt werden, dies ist implizit durch *:topic={"/TEST/$reading/value"} definiert.

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 01 Oktober 2018, 18:43:06
Ah okay  Danke! :-)

Cool dann hab ich es ja bereits korrekt.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: choetzu am 01 Oktober 2018, 19:56:02
herzlichen dank. ich mache grad die ersten Schritte.

Auf Master-Raspi habe ich nun mosquitto, mqtt Modul und Mqtt_generic_bridge modul installiert

gemäss Bally muss ich auf dem RemoteRaspi (also Raspi2) kein mosquitto installieren. Ich gehe aber davon aus, dass ich dort ebenfalls die generic bridge installieren muss mit der IP des Master-Raspi, damit ich auch die attr für die Devices erhalte. ist dies korrekt? Ich habe kein testsystem, deshalb die Frage ;)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 01 Oktober 2018, 20:22:04
Richtig, auf beiden Systemen je ein MQTT Modul (mit der IP von mosquitto) und je eine GenericBrigde.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Phantomato am 07 Oktober 2018, 21:45:21
Hallo,
ich habe das gleiche Problem wie SamNitro und NodeRed. Damit sind wir schon mal 2.

PS: Danke für das tolle Modul.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 07 Oktober 2018, 22:39:09
Meinst Du, dass die Schalter in NoeRED nicht funktionieren? Sollte mit der aktuellen Version richtig laufen. Tut es bei mir auch. Ansonsgten poste mal die relevante Konfiguration.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Phantomato am 08 Oktober 2018, 20:01:56
ja, genau das. Hatte vorher eine wahrscheinlich recht ältere Entwicklungsversion die ich über Fhem "update" aktualisiert habe. Danach haben die Rückmeldungen in Nodered wie von SamNitro beschrieben, nicht mehr funktioniert.
Ist irgendwo eine Konfigurationsleiche übrig geblieben?

version 0.9.9 by hexenmeister
$Id: 10_MQTT_GENERIC_BRIDGE.pm 17444 2018-09-30 21:30:54Z hexenmeister $


define MqttGenericBridge MQTT_GENERIC_BRIDGE
attr MqttGenericBridge IODev MQTTBroker
attr MqttGenericBridge room System


define SzEnableMotionDetection dummy
attr SzEnableMotionDetection devStateIcon on:on:off off:off:on
attr SzEnableMotionDetection genericDeviceType switch
attr SzEnableMotionDetection mqttPublish state:topic={"stat/$device/$reading"}  *:retain=1
attr SzEnableMotionDetection mqttSubscribe state:stopic={"cmnd/$device/$reading"}
attr SzEnableMotionDetection room Schlafzimmer
attr SzEnableMotionDetection webCmd on:off


Auch wenn ich mit MQTT.fx ein "off" oder "on" auf "cmnd/SzEnableMotionDetection/state" publishe erhalte ich auf die topic "stat/SzEnableMotionDetection/state" keine Rückmeldung.

Das hier funktioniert allerdings wie vorgesehen:
define HM_2F66F2 CUL_HM 2F66F2
attr HM_2F66F2 IODev nanoCUL868
attr HM_2F66F2 IOgrp VCCU:nanoCUL868
attr HM_2F66F2 alias LED_Lampe
attr HM_2F66F2 autoReadReg 4_reqStatus
attr HM_2F66F2 expert 2_raw
attr HM_2F66F2 firmware 2.4
attr HM_2F66F2 group Licht
attr HM_2F66F2 model HM-LC-SW1-PL2
attr HM_2F66F2 mqttPublish *:topic={"stat/$device/$reading"} *:retain=1
attr HM_2F66F2 mqttSubscribe *:stopic={"cmnd/$device/$reading"}
attr HM_2F66F2 room Alexa,Licht,Schlafzimmer
attr HM_2F66F2 serialNr LTK0069478
attr HM_2F66F2 subType switch
attr HM_2F66F2 webCmd statusRequest:toggle:on:off
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 08 Oktober 2018, 21:53:54
Hm....ja. Das hier ist das selbe Problem nur andersrum.
Wenn man an zweien Instanzen zwei Geräte verbindet, dürfen nicht beide alle ankommende Nachrichten gleich weiter durchleiten - das führt zu einer Endlosschleife. Daher ist das jetzt so implementiert, dass alle Geräte außer Dummies die Nachrichten weiterleiten können. Dummy eignet sich al 'Schalter', daher solcher Hack. Ich überlege immer noch, wie ich es saubersten einstellbar machen kann.
Bei Dir ist aber Dummy als eine Art Aktor verwendet (falls ich Deine Logik richtig verstanden habe)... Ich habe paar Ideen, fürchte aber mit vielen zusätzlichen Parameter nur den Benutzer zu verwirren :/
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Phantomato am 08 Oktober 2018, 22:12:29
Zitat von: hexenmeister am 08 Oktober 2018, 21:53:54
Bei Dir ist aber Dummy als eine Art Aktor verwendet (falls ich Deine Logik richtig verstanden habe)...

joah.. kommt hin. Mein Dummy dient als Merker und ist an sich ein Aktor. Dieser wird uber mqtt/nodeRed ein und ausgeschaltet. DOIF Schleifen fragen den Zustand ab und werten somit aus ob für den Bewegungsmelder eine Freigabe vorliegt oder nicht.

Vielleicht kann man das als default so lassen aber das alte Verhalten über irgendein Parameter (zb Attribut "mqttDoAllways") auswählbar lassen. Ein Parameter mehr oder weniger kompliziert die Sache nicht viel mehr wenn es gut dokummentiert ist.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 08 Oktober 2018, 22:29:00
Meine Überlegungen bis jetzt:

1. einen neuen "Topic"-Typ einführen. So wie atopic, stopic etc. Finde jedoch nicht wirklich intuitiv.
2. An der Bridge selbst Typen der Geräte angeben, die so oder anders agieren. Ist jedoch nicht flexibel genug.
3. Ein Parameter an der Gerät. So wie Dein Vorschlag.
4. Wie 3. nur für jedes Topic getrennt. Vermutlich oversized.

Bin derzeit eher bei 3.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 11 Oktober 2018, 14:41:36
Frage 1:  Probleme bzw Hilfeanfrage hier oder in nem anderen Thread?

Erledigt -> Hilfe/Probleme etc Thread zum MQTT_GENERIC_BRIDGE Modul: https://forum.fhem.de/index.php/topic,91984.0.html

Frage2: Der folgende Device will auf einmal (es ging vor Tagen noch) nicht mehr auf Befehle von NodeRed auf dem /state/set topic hören:

--> Moved https://forum.fhem.de/index.php/topic,91984.msg844833.html#msg844833

Internals:
   CFGFN     
   NAME       Streifen
   NR         94
   STATE      on
   TYPE       dummy
   READINGS:
     2018-10-11 14:37:58   newstate        on
     2018-10-11 14:37:58   state           on
Attributes:
   alexaName  Streifen
   alexaRoom  Wohnzimmer
   genericDeviceType light
   group      Licht
   homebridgeMapping Brightness=state,cmd=
   icon       light_led_stripe_rgb
   mqttDefaults base={"homeland/haushalt/elektrik/wohnzimmer/$device"} pub:qos=2 sub:qos=2 retain=1
   mqttPublish state:topic={"$base/$name"} state:qos=2 state:retain=1
   mqttSubscribe state:stopic=homeland/haushalt/elektrik/wohnzimmer/Streifen/state/set state:qos=2
   room       Echo,Wohnzimmer
   setList    state:slider,0,1,100 on off
   userattr   mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
   webCmd     state


Jemand eine Idee?  :o
Ich habe noch genau son Teil und da geht alles - unterschied ist nur die homebridge Sache und es ist kein dummy..
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 11 Oktober 2018, 14:49:08
zu 1.: ist mir relativ egal. vlt. wäre sogar ein neuer 'Problem-Thread' angebracht...
zu 2.: Das Device ist ja eigentlich ein Dummy. Was soll dabei geschehen? Nur state im Dummy umgesetzt, oder auch die Nachricht weitergeleitet? Letzteres habe ich für Dummies erstmal unterdrückt, da sonst bei der Verwendung der Dummies als Schalt-Element (analog Deinem Dashboard im NodeRed) Endlosklreise entstehen. Ich überlege immer noch, wie man das am besten konfigurierbar macht.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 11 Oktober 2018, 15:02:10
Verstehe den Endlos Gedanken nicht gerade.

Ich habe zum schalten und antworten 2 Topics.
NodeRed zeigt am Schalter an was im topic /state anliegt und schaltet selber das topic /state/set
FHEM subscribed das topic /state/set und published in /state

Wo ist das nun der Loop? Genau so hab ich es bei allen Geräten :-)

Und vorhaben - was bisher auch ging bis zum Update zu einer der letzten Versionen (es fällt ja immer erst nach ner Weile auf) war eben, dass der Dummy im STATE auf on/off geschaltet wird.

Richtig hart trifft mich das bei meinem Dummy "Heizungssteurung" - der ist ein rein logischer Schalter für einige DOIFs :-D und nun geht er nicht mehr.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 11 Oktober 2018, 15:09:12
Vermutlich wird dein Dummy schon geschaltet, nur meldet es sein Status nicht mehr.
Kreise entstehen bei dir nicht. Aber in dem Fall, wenn man einen Aktor mit einem Dummy als Schaltelement verwendet. In deinem Fall müssen empfangene Nachrichten weiter geleitet werden, in dem anderen Fall eben nicht. Daher muss das konfiguriert werden können. Bin dran.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 11 Oktober 2018, 15:10:41
 ;D Mich wundert, dass es in einer alten Version (ich hab leider echt keine Ahnung welche Sprünge ich gemacht habe in den Versionen) tadellos funktionierte :-D

Es war ja laufendes System hier. 8)

Danke dir!  :-*
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 11 Oktober 2018, 15:13:19
Wegen entstandenen Endlosschleifen habe ich die Speere für Dummies eingebaut. Früher ging das, dafür was anderes nicht.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 11 Oktober 2018, 15:16:10
Wäre ne schaltbare Sperre nen Deal  8) ?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 11 Oktober 2018, 17:02:21
Genau das habe ich vor. Bin mir nur noch nicht sicher wie das am besten zu machen ist. Habe paar Beiträge höher über die möglichen Varianten geschrieben.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 11 Oktober 2018, 17:25:26
Hab dann mal nen Hilfe/Probleme etc Thread auf gemacht: https://forum.fhem.de/index.php/topic,91984.0.html

PS: Wäre für --> 3. Ein Parameter im Gerät.
Einfach ein Flag mit leitet weiter oder net :-) 1/0 ganz stumpf
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: inesa394 am 25 Oktober 2018, 22:25:07
Seit dem update am 20 Oktober funktionieren meine Sensoren nicht mehr
ein zurückspielen der alten behebt das Problem
Ines
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 26 Oktober 2018, 16:54:14
Ja, in dem anderen thread wäre der Beitrag besser aufgehoben. Und bitte mit allen Details zum nachstellen. So kann ich leider nichts dazu sagen. Bei mir funktioniert ja alles.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: XxX_Cobra_XxX am 28 Januar 2019, 20:17:43
Hallo

Erstmal ein großes Lob an den Entwickler dieses Moduls. Echt klasse.

Ich kapier nur eines nicht ganz und zwar:

Wie bekomme ich es jetzt hin dass ein fhem device (z. B. SZ_LICHT) den Befehl 'on' bekommt also 'set SZ_LICHT on' wenn der Befehl 'on' im Topic meinZuhause/SZ_LICHT reinkommt?  Was bzw. wie muss ich das beim device SZ_LICHT attr mqttSubscribe angeben?
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 28 Januar 2019, 20:22:12
Mahlzeit, nutz doch bitte den Hilfe/Probleme Thread: https://forum.fhem.de/index.php/topic,91984.0.html
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: XxX_Cobra_XxX am 28 Januar 2019, 20:26:08
Mahlzeit  :)

Ok sorry
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Gisbert am 18 Juli 2019, 20:52:48
Hallo hexenmeister,

ich hoffe, du liest hier noch mit.
Ich möchte den Inhalt eines Readings eines Fhem-Devices publishen.
Der Inhalt des Readings ist variabel, deshalb kann ich nicht einfach einen Wert publishen, da dieser zwar vorhanden und auch geloggt wird, aber ansonsten als Wert nicht verfügbar ist.
Ich hoffe ich habe mich bisher nicht zu verschwurbbelt ausgedrückt.

Um ein konkretes Beispiel zu geben, ich möchte den Inhalt des Readings <temperature> des Devices <TH.Kuhlmannweg8> publishen.
Entweder jedesmal, wenn sich der Wert des Readings ändert, oder in festen Zeitabständen, das ist mir eigentlich egal.
Da ich verschiedene MQTT-Devices mit unterschiedlichen Firmwares laufen habe, ist mir das Thema MQTT nicht unbekannt.

defmod TH.Kuhlmannweg8 CUL_HM 20E202
attr TH.Kuhlmannweg8 .devInfo 030100
attr TH.Kuhlmannweg8 .mId 003D
attr TH.Kuhlmannweg8 .stc 70
attr TH.Kuhlmannweg8 IODev myHmUARTLGW1
attr TH.Kuhlmannweg8 IOgrp VCCU:myHmUARTLGW1
attr TH.Kuhlmannweg8 actCycle 024:00
attr TH.Kuhlmannweg8 actStatus alive
attr TH.Kuhlmannweg8 autoReadReg 0_off
attr TH.Kuhlmannweg8 event-min-interval 600
attr TH.Kuhlmannweg8 event-on-change-reading state,temperature,humidity,dewpoint
attr TH.Kuhlmannweg8 expert 2_full
attr TH.Kuhlmannweg8 firmware 1.3
attr TH.Kuhlmannweg8 group Sensoren
attr TH.Kuhlmannweg8 icon temperature_humidity
attr TH.Kuhlmannweg8 model HM-WDS10-TH-O
attr TH.Kuhlmannweg8 peerIDs 00000000,
attr TH.Kuhlmannweg8 room CUL_HM,Heizung,Weather
attr TH.Kuhlmannweg8 serialNr KEQ0175095
attr TH.Kuhlmannweg8 stateFormat T:temperature H:humidity D:dewpoint
attr TH.Kuhlmannweg8 subType THSensor
attr TH.Kuhlmannweg8 userReadings dewpoint:temperature.* {urDewpoint($name)}

setstate TH.Kuhlmannweg8 T:23.2 H:60 D:15.0
setstate TH.Kuhlmannweg8 2019-07-16 14:18:29 .D-devInfo 030100
setstate TH.Kuhlmannweg8 2019-07-16 14:18:29 .D-stc 70
setstate TH.Kuhlmannweg8 2019-07-18 20:39:38 .protLastRcv 2019-07-18 20:39:38
setstate TH.Kuhlmannweg8 2019-07-17 22:45:19 Activity alive
setstate TH.Kuhlmannweg8 2019-07-16 14:18:29 D-firmware 1.3
setstate TH.Kuhlmannweg8 2019-07-16 14:18:29 D-serialNr KEQ0175095
setstate TH.Kuhlmannweg8 2019-07-18 20:39:38 battery ok
setstate TH.Kuhlmannweg8 2019-07-18 20:32:02 dewpoint 15.0
setstate TH.Kuhlmannweg8 2019-07-18 20:39:38 humidity 60
setstate TH.Kuhlmannweg8 2019-07-18 20:39:38 state T: 23.2 H: 60
setstate TH.Kuhlmannweg8 2019-07-18 20:39:38 temperature 23.2


Ich habe deshalb folgendes Device definiert, in der Annahme, dass ich das obige Problem lösen kann:
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt
attr mqttGeneric IODev MyBroker


Wenn ich get mqttGeneric devinfo oder devlist eingebe, dann erhalte ich: "no devices found".
Ich mache wohl was grundlegendes falsch.

Um meine Frage nochmals zu wiederholen:
Wie kann ich den Inhalt eines Readings publishen?
Kann das auch ein Reading eines Typs MQTT-DEVICE sein oder muss es ein Reading eines beliebigen anderen Typs sein?

Viele Grüße Gisbert
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Maui am 18 Juli 2019, 20:58:23
Moin. Schau mal 2 Posts über deinem #110.
Und zu deinem Problem: Heisst dein mqtt Broker denn wirklich MyBroker?

Das reading kann mEn sein was es will. Das ist ja das schöne bei der GB.

Gruß
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Gisbert am 18 Juli 2019, 21:49:51
Zitat von: Maui am 18 Juli 2019, 20:58:23
Moin. Schau mal 2 Posts über deinem #110.
Und zu deinem Problem: Heisst dein mqtt Broker denn wirklich MyBroker?

Das reading kann mEn sein was es will. Das ist ja das schöne bei der GB.

Gruß

Hallo Maui,

danke für den Hinweis, ich war mir nicht bewusst, dass es einen eigenen Hilfe-Thread gibt.
mein MQTT-Broker heißt tatsächlich MyBroker, was ist so ungewöhnlich an dem Namen?
In der Zwischenzeit habe ich eine total simple Lösung (selbst) gefunden.
Das Publishen eines Readings eines beliebigen Devices geht wohl so (getestet):
set publish <MQTT device> [<device>:<reading>]

Viele Grüße Gisbert
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Maui am 18 Juli 2019, 22:20:55
Nix ist ungewöhnlich dran. War bloß auf Fehlersuche.
Mit deinem Befehl nutzt du allerdings nicht mehr die Generic Bridge  ;)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 18 Juli 2019, 22:35:51
Ich verstehe ehrlich gesagt das Problem nicht. Einfach in dem gewünschten Device mittels Attribute 'mqttPublish' (s. Commandref) die gewünschtre Reading einem Topic zuordnen und schon taucht dieses Gerät in der Bridge auf.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Gisbert am 18 Juli 2019, 22:57:20
ZitatEinfach in dem gewünschten Device mittels Attribute 'mqttPublish' (s. Commandref) die gewünschtre Reading einem Topic zuordnen und schon taucht dieses Gerät in der Bridge auf.
Dieser Hinweis hat geholfen; jetzt funktioniert das Bridge-Device.

Viele Grüße Gisbert
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: MarcP am 15 November 2019, 14:47:12
Hallo,

super Modul, macht genau was es soll.

Meistens. Manchmal , ich habe leider noch kein System erkennen können, (siehe Edit unten) "verliert" die Bridge alle Devices, device-count
ist dann plötzlich "0" und die Devices reagieren nicht mehr auf die per Subscribe abonnierten Topics.
Sobald ich das Attribut mqqtSubscribe einmal neu speichere, ohne etwas zu ändern, registriert die Bridge das Device wieder, und alles klappt wieder.
Muss ich dann mit jedem Subscriber-Device einmal machen.

Eine Idee, woran das liegt?

Edit: Ich stelle grad fest, das es nachstellbar immer dann passiert, wenn ich ein "rereadcfg" absetze.

Viele Grüße
Marc
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 15 November 2019, 15:36:52
Mh konnte ich unter normalem Einsatz noch nie erleben.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: MarcP am 15 November 2019, 16:27:08
Hast Du mal rereadcfg gemacht?
(Falls nicht, lass es auch lieber, falls das wirklich ein Bug sein sollte ist das maximal lästig, da Du dann alle Devices einmal durchgehen musst.)
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 15 November 2019, 17:24:48
Naja macht man vorher ein save und hat die configdb und dann ist alles wieder da.
Alternativ einmal richtiges Backup vom gesamten Ordner. :-D

Ich schau nachher mal rein.

Aber ich glaub generell war das mal so gedacht, dass so etwas hier hin soll: https://forum.fhem.de/index.php/topic,91984.0.html

Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: hexenmeister am 15 November 2019, 22:42:23
Alle Devices neu einlesen, hier sollte solgendes helfen: In dem GenericBridge device Attribut debug auf 1 setzen. Dann gibt es ein neues Befehl in dem set-Combobox: 'debugReinit'. Das liesst alles neu ein. Aber... rereadcfg funktioniert schon lange nicht nebenwirkungsfrei. Nicht nur in der Bridge. Ein richtig konfiguriertes fhem startet innerhalb von Sekunden. Daher...  => Verwende nie rereadcfg.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: MarcP am 15 November 2019, 22:46:39
Danke für das Feedback und den Tipp, klappt, und ich lass nun die Finger vom rereadcfg.
Titel: Antw:Modul-Vorstellung: MQTT_GENERIC_BRIDGE
Beitrag von: Master_Nick am 15 November 2019, 23:10:00
Da blieb mir der Chaostest erspart ;-) *puh*   ;)