diff --git a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm index d64dc9f98..ab0fc9523 100644 --- a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm +++ b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm @@ -30,6 +30,9 @@ # # CHANGE LOG # +# 16.02.2021 1.3.3 +# fix: : fix cref by Beta-User +# # 01.02.2021 1.3.2 # buxfix : Rückname Änderung "retain bei MQTT2 ohne Funktion" wg. Irrtum # @@ -397,7 +400,7 @@ use AttrTemplate; #my $DEBUG = 1; my $cvsid = '$Id$'; -my $VERSION = "version 1.3.2 by hexenmeister\n$cvsid"; +my $VERSION = "version 1.3.3 by hexenmeister\n$cvsid"; my %sets = ( ); @@ -2955,7 +2958,7 @@ sub onmessage($$$) { return undef; } 1; - +__END__ =pod =encoding utf8 =item [device] @@ -2982,12 +2985,11 @@ sub onmessage($$$) {

All parameters in the define are optional.

The first parameter is a prefix for the control attributes on which the devices to be monitored (see above) are configured. Default value is 'mqtt'. - If this is e.g. redefined as 'hugo', the control attributes are named hugoPublish etc. + If this is e.g. redefined as mqttGB1_, the control attributes are named mqttGB1_Publish etc.

The second parameter ('devspec') allows to minimize the number of devices to be monitored (otherwise all devices will be monitored, which may cost performance). - Example for devspec: 'TYPE=dummy' or 'dummy1,dummy2'. With comma separated list no spaces must be used! - see devspec

+ Example for devspec: 'TYPE=dummy' or 'dummy1,dummy2'. Following the general rules for devspec, a comma separated list must not contain any whitespaces!

@@ -3044,7 +3046,8 @@ sub onmessage($$$) {

Attributes:

Examples

@@ -3280,21 +3288,21 @@ sub onmessage($$$) {
  • Simple configuration of a temperature sensor:
    defmod sensor XXX
    - attr sensor mqttPublish temperature:topic=/haus/sensor/temperature

    + attr sensor mqttPublish temperature:topic=haus/sensor/temperature

  • Send all readings of a sensor (with their names as they are) via MQTT:
    defmod sensor XXX
    - attr sensor mqttPublish *:topic={"/sensor/$reading"}

    + attr sensor mqttPublish *:topic={"sensor/$reading"}

  • Topic definition with shared part in 'base' variable:
    defmod sensor XXX
    - attr sensor mqttDefaults base={"/$device/$reading"}
    + attr sensor mqttDefaults base={"$device/$reading"}
    attr sensor mqttPublish *:topic={"$base"}

  • @@ -3303,7 +3311,7 @@ sub onmessage($$$) {

    Topic definition only for certain readings with renaming (alias):
    defmod sensor XXX
    attr sensor mqttAlias temperature=temp humidity=hum
    - attr sensor mqttDefaults base={"/$device/$name"}
    + attr sensor mqttDefaults base={"$device/$name"}
    attr sensor mqttPublish temperature:topic={"$base"} humidity:topic={"$base"}

    @@ -3313,7 +3321,7 @@ sub onmessage($$$) { 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"}
    + attr mqttGeneric publish temperature:topic={"haus/$device/$reading"}

    @@ -3323,7 +3331,7 @@ sub onmessage($$$) { 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"}

    + attr mqttGeneric publish *:topic={"haus/$device/$reading"}

    @@ -3374,13 +3382,14 @@ sub onmessage($$$) {

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

    Alle Parameter im Define sind optional.

    -

    Der erste ist ein Prefix für die Steuerattribute, worüber die zu ueberwachende Geraete (s.u.) +

    Der erste ist ein Prefix für die Steuerattribute, worüber die zu überwachende Geräte (s.u.) konfiguriert werden. Defaultwert ist 'mqtt'. Wird dieser z.B. als 'mqttGB1_' festgelegt, heißen die Steuerungsattribute entsprechend mqttGB1_Publish etc.

    -

    Der zweite Parameter ('devspec') erlaubt die Menge der zu überwachenden Geraeten +

    Der zweite Parameter ('devspec') erlaubt die Menge der zu überwachenden Geräten zu begrenzen (sonst werden einfach alle überwacht, was jedoch Performance kosten kann). - Beispiel fuer devspec: 'TYPE=dummy' oder 'dummy1,dummy2'. Bei kommaseparierten Liste dürfen keine Leerzeichen verwendet werden! - s.a. devspec

    + Beispiel für devspec: 'TYPE=dummy' oder 'dummy1,dummy2'. Es gelten die allgemeinen Regeln für devspec, bei kommaseparierter Liste sind also keine Leerzeichen erlaubt!

    + + @@ -3392,8 +3401,8 @@ sub onmessage($$$) {
  • devlist [<name (regex)>]
    - Liefert Liste der Namen der von dieser Bridge überwachten Geräte deren Namen zu dem optionalen regulaerem Ausdruck entsprechen. - Fehlt der Ausdruck, werden alle Geraete aufgelistet. + Liefert Liste der Namen der von dieser Bridge überwachten Geräte deren Namen zu dem optionalen regulärem Ausdruck entsprechen. + Fehlt der Ausdruck, werden alle Geräte aufgelistet.

  • @@ -3470,7 +3479,7 @@ sub onmessage($$$) {
  • globalPublish
    - Definiert Topics/Flags fuer die Uebertragung per MQTT. Diese werden angewendet, falls in dem jeweiligen Geraet + Definiert Topics/Flags für die Übertragung per MQTT. Diese werden angewendet, falls in dem jeweiligen Gerät definierte Werte nicht greifen oder nicht vorhanden sind. s.a. mqttPublish.

    @@ -3485,20 +3494,20 @@ sub onmessage($$$) { Werte können getrennt für jede Richtung (publish oder subscribe) vorangestellte Prefixe 'pub:' und 'sub:' angegeben werden. Ein einzelner Wert bedeutet, dass ein Gerät diesen Types komplett ignoriert wird (also für alle seine Readings und beide Richtungen). Durch einen Doppelpunkt getrennte Paare werden als [sub:|pub:]Type:Reading interpretiert. - Das bedeutet, dass an dem gegebenen Type die genannte Reading nicht uebertragen wird. - Ein Stern anstatt Type oder auch Reading bedeutet, dass alle Readings eines Geretaetyps - bzw. genannte Readings an jedem Geraetetyp ignoriert werden.

    + Das bedeutet, dass an dem gegebenen Type die genannte Reading nicht übertragen wird. + Ein Stern anstatt Type oder auch Reading bedeutet, dass alle Readings eines Geretätyps + bzw. genannte Readings an jedem Gerätetyp ignoriert werden.

    Beispiel:
    attr <dev> globalTypeExclude MQTT MQTT_GENERIC_BRIDGE:* MQTT_BRIDGE:transmission-state *:baseID

  • globalDeviceExclude
    - Definiert Geraetenamen und Readings, die nicht uebertragen werden. - Werte können getrennt fuer jede Richtung (publish oder subscribe) vorangestellte Prefixe 'pub:' und 'sub:' angegeben werden. - Ein einzelner Wert bedeutet, dass ein Geraet mit diesem Namen komplett ignoriert wird (also fuer alle seine Readings und beide Richtungen). + Definiert Gerätenamen und Readings, die nicht übertragen werden. + Werte können getrennt für jede Richtung (publish oder subscribe) vorangestellte Prefixe 'pub:' und 'sub:' angegeben werden. + Ein einzelner Wert bedeutet, dass ein Gerät mit diesem Namen komplett ignoriert wird (also für alle seine Readings und beide Richtungen). Durch ein Doppelpunkt getrennte Paare werden als [sub:|pub:]Device:Reading interptretiert. - Das bedeutet, dass an dem gegebenen Geraet die genannte Readings nicht uebertragen wird.

    + Das bedeutet, dass an dem gegebenen Gerät die genannte Readings nicht übertragen wird.

    Beispiel:
    attr <dev> globalDeviceExclude Test Bridge:transmission-state

  • @@ -3521,7 +3530,7 @@ sub onmessage($$$) {

    mqttDefaults
    Hier wird eine Liste der "key=value"-Paare erwartet. Folgende Keys sind dabei möglich:

    Beispiele:
    @@ -3614,22 +3622,21 @@ sub onmessage($$$) { In der Expression sind die folgenden Variablen verfügbar: $device, $reading, $message (initial gleich $value). Die Expression kann dabei entweder die Variable $value verändern, oder einen Wert != undef zurückgeben. Redefinition der Variable hat Vorrang. Ist der Rückgabewert undef, dann wird das Setzen/Ausführen unterbunden (es sei denn, $value hat einen neuen Wert).
    - Ist die Rückgabe ein Hash (nur fuer 'topic' und 'stopic'), dann werden seine Schlüsselwerte als Readingsnamen bzw. 'set'-Parameter verwendet, + Ist die Rückgabe ein Hash (nur für 'topic' und 'stopic'), dann werden seine Schlüsselwerte als Readingsnamen bzw. 'set'-Parameter verwendet, die zu setzenden Werte sind entsprechend den Werten aus dem Hash.
    Weiterhin kann das Attribut 'qos' angegeben werden ('retain' macht dagegen keinen Sinn).
    In der Topic-Definition können MQTT-Wildcards (+ und #) verwendet werden.
    Falls der Reading-Name mit einem '*'-Zeichen am Anfang definiert wird, gilt dieser als 'Platzhalter'. Mehrere Definitionen mit '*' sollten somit z.B. in folgender Form verwendet werden: *1:topic=... *2:topic=... - Der tatsaechliche Name des Readings (und ggf. des Geraetes) wird dabei durch Variablen aus dem Topic + Der tatsächliche Name des Readings (und ggf. des Gerätes) wird dabei durch Variablen aus dem Topic definiert ($device (nur für globale Definition in der Bridge), $reading, $name). Im Topic wirken diese Variablen als Wildcards, was evtl. dann sinnvoll ist, wenn der Reading-Name nicht fest definiert ist (also mit '*' anfängt, oder mehrere Namen durch '|' getrennt definiert werden).
    Die Variable $name wird im Unterschied zu $reading ggf. über die in 'mqttAlias' definierten Aliase beeinflusst. Auch Verwendung von $base ist erlaubt.
    - Bei Verwendung von 'stopic' wird der 'set'-Befehl als 'set <dev> <reading> <value>' ausgefuehrt. + Bei Verwendung von 'stopic' wird der 'set'-Befehl als 'set <dev> <reading> <value>' ausgeführt. Um den set-Befehl direkt am Device ohne Angabe eines Readingnamens auszuführen (also 'set <dev> <value>') muss als Reading-Name 'state' verwendet werden.

    -

    Um Nachrichten im JSON-Format zu empfangen, kann mit Hilfe von 'expression' direkt die in fhem.pl bereitgestellte Funktion json2nameValue aufgerufen werden, als Parameter ist $message anzugeben.

    -
    +

    Um Nachrichten im JSON-Format zu empfangen, kann mit Hilfe von 'expression' direkt die in fhem.pl bereitgestellte Funktion json2nameValue() aufgerufen werden, als Parameter ist $message anzugeben.

    Einige Beispiele:
    attr <dev> mqttSubscribe temperature:topic=TEST/temperature test:qos=0 *:topic={"TEST/$reading/value"}
    attr <dev> mqttSubscribe desired-temperature:stopic={"TEST/temperature/set"}
    @@ -3678,7 +3685,7 @@ sub onmessage($$$) {

  • -

    Bridge mit dem Prefix 'mqttSensors' fuer drei bestimmte Geräte:
    +

    Bridge mit dem Prefix 'mqttSensors' für drei bestimmte Geräte:
    defmod mqttGeneric MQTT_GENERIC_BRIDGE mqttSensors sensor1,sensor2,sensor3
    attr mqttGeneric IODev mqtt

    @@ -3747,10 +3754,10 @@ sub onmessage($$$) {