diff --git a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm index b9cdce0ae..473e1419b 100644 --- a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm +++ b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm @@ -30,6 +30,12 @@ # # CHANGE LOG # +# 11.11.2018 0.9.9 +# change : import fuer json2nameValue aus main. +# Damit geht JSON-Unterstuetzung ohne Prefix 'main::' +# Beispiel: +# json:topic=/XTEST/json json:expression={json2nameValue($value)} +# # 04.11.2018 0.9.9 # bugfix : Bei Mehrfachdefinitionen wie 'a|b|c:topic=some/$reading/thing' # wurden beim Treffer alle genannten Readings aktualisiert @@ -324,6 +330,7 @@ BEGIN { gettimeofday InternalTimer RemoveInternalTimer + json2nameValue CTRL_ATTR_NAME_DEFAULTS CTRL_ATTR_NAME_ALIAS CTRL_ATTR_NAME_PUBLISH @@ -1174,7 +1181,7 @@ sub searchDeviceForTopic($$) { } # Erstellt RexExp-Definitionen zum Erkennen der ankommenden Topics -# Platzhaltern werden entsprechend verarbeitet +# Platzhalter werden entsprechend verarbeitet sub createRegexpForTopic($) { my $t = shift; $t =~ s|#$|.\*|; @@ -2663,6 +2670,8 @@ sub onmessage($$$) { The variable $name, unlike $reading, may be affected by the aliases defined in 'mqttAlias'. Also use of $base is allowed.
When using 'stopic', the 'set' command is executed as 'set <dev> <reading> <value>'. For something like 'set <dev> <value>' 'state' should be used as reading-name.

+

The often requested JSON support can be easily realized with the help of 'expression'. + An already existing method in fhem.pl (json2nameValue) works well. The parameter should be '$message'.

Examples:
attr <dev> mqttSubscribe temperature:topic=/TEST/temperature test:qos=0 *:topic={"/TEST/$reading/value"}
attr <dev> mqttSubscribe desired-temperature:stopic={"/TEST/temperature/set"}
@@ -2670,6 +2679,7 @@ sub onmessage($$$) { 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"} attr <dev> mqttSubscribe verbose:atopic={"/TEST/light/verbose"} + attr <dev> mqttSubscribe json:topic=/XTEST/json json:expression={json2nameValue($message)}

@@ -3054,6 +3064,8 @@ sub onmessage($$$) { 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.

+

Die oft angefragte JSON-Unterstützung kann einfach mit Hilfe von 'expression' realisiert werden. + Dafür eignet sich eine in fhem.pl bereits vorhandene Methode: json2nameValue. Als Parameter soll $message 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"}
@@ -3061,6 +3073,7 @@ sub onmessage($$$) { 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"} attr <dev> mqttSubscribe verbose:atopic={"/TEST/light/verbose"} + attr <dev> mqttSubscribe json:topic=/XTEST/json json:expression={json2nameValue($message)}