FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: oelkanne am 28 Februar 2021, 13:06:11

Titel: [gelöst] Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: oelkanne am 28 Februar 2021, 13:06:11
Guten Tag,

Ziel: "Position" mit dem Attr "readingList" zu abonieren und in das reading "state" zu übergeben, in einen Schritt

Die MQTT2 message sieht so aus:


12:30:50 MQT: stat/MiniTiger4gang_2/RESULT = {"Shutter1":{"Position":100,"Direction":0,"Target":100}}


Mein workaround sieht zur Zeit so aus:
Ich abonniere mit "readingList" alle "Results"
attr MiniTiger4gang_2a readingList tele/MiniTiger4gang_2/RESULT:.* { json2nameValue($EVENT) }\

dadurch wird unter anderen auch das Reading "Shutter1_Position" generiert sowie der Wert "100" geliefert.

Um das Ergebnis in das Reading "state" zu übergeben nutze ich das attribut userReading:

attr MiniTiger4gang_2a userReadings state {(ReadingsVal($name,"Shutter1_Position","error"))}

Das funktioniert soweit.

Gibt es eine Möglichkeit die "Position" direkt mit ReadingList zu abonnieren und das Ergebnis ins "state" zu schreiben?

etwa so: (diese Beispiel geht leider nicht)
attr MiniTiger4gang_2a readingList stat/MiniTiger4gang_2/RESULT:{json2nameValue("Shutter1_Position")}   {{'state' => Shutter1_Position}}
Titel: Antw:Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: Otto123 am 28 Februar 2021, 13:20:32
Hi,

das geht ohne userReadings auch gut mit  attr jsonMap Shutter1_Position:state
Ich glaube das ist der angedachte Weg dafür.
Du kannst damit auch die unerwünschten Readings "in den Skat drücken" jsonname:0

Gruß Otto
Titel: Antw:Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: TomLee am 28 Februar 2021, 13:27:48
Entweder mit jsonMap oder so in der Art wie in deinem letzten Beispiel.

probier mal:

attr MiniTiger4gang_2a readingList tele/MiniTiger4gang_2/RESULT:.* { $EVENT =~ m,Position..(\d+), ? {"state"=>$1} : json2nameValue($EVENT) }

Gruß

Thomas
Titel: Antw:Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: TomLee am 28 Februar 2021, 13:49:31
Zur Sicherheit:

jsonMap greift nur mit der Angabe des dritten Parameter $JSONMAP in json2nameValue

{ json2nameValue($EVENT,'',$JSONMAP) }
Titel: Antw:Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: Beta-User am 03 März 2021, 10:15:54
Hmm, also:
a) json2nameValue() kennt noch einen 4. Parameter, damit kann man Filtern ;) . Ungetestet vielleicht so:
{ json2nameValue($EVENT,'',$JSONMAP,'Shutter1') }b) Man kann auch erst $EVENT parsen und dann nur den "inneren JSON" an json2nameValue() übergeben. Gibt ein paar Beispiele dazu in mqtt2.template, vielleicht mal bei den zigbee2tasmota-templates anfangen zu suchen.
c) Eventuell kann man den Tasmota auch so konfigurieren, dass er für jedes Shutter-Device einen eigenen Topic nimmt und dann (nur) den auswerten?

Würde bei c) beginnen, wenn das nicht klappt schauen, ob a) ausreicht und zuletzt Variante b) nehmen...
Titel: Antw:Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: oelkanne am 03 März 2021, 19:40:17
Herzlichen Dank für die wertvollen Tipps!

Die Variante von TomLee passte am Besten.
stat/MiniTiger4gang_1/RESULT:.* { $EVENT =~ m,Shutter1....Position..(\d+), ? {"state"=>$1} : json2nameValue($EVENT) }

Viele Grüße
Oelkanne
Titel: Antw:[gelöst] Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: TomLee am 03 März 2021, 21:22:55
Ich würde gerne diesen Thread für mein Verständnis zum 4. Parameter (Filter) in json2nameValue nutzen.

Wäre es damit dann auch möglich nur ein Reading Position zu erhalten oder geht das nur mit dem vorangestellten Shutter1_(Position) ?

{ json2nameValue($EVENT,'','$JSONMAP','Position') }
Titel: Antw:[gelöst] Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: rudolfkoenig am 03 März 2021, 22:07:16
Parameter #4 ist ein Regexp, mit dem die fertigen Schluessel (vulgo Reading-Namen) gefiltert werden, ohne den sonst ueblichen Ergaenzung mit ^und $.

Oder auch: "Shutter1_Position" =~ m/Position/
Titel: Antw:[gelöst] Einzelnes Ergebnis mit readingList abonnieren
Beitrag von: TomLee am 09 März 2021, 11:45:09
ZitatOder auch: "Shutter1_Position" =~ m/Position/

Habs bis heute nicht verstanden, kann mir jemand ein Beispiel zeigen wie das genau gemeint war.