Hauptmenü

json2name value Filter

Begonnen von Heiner, 24 Februar 2023, 11:01:00

Vorheriges Thema - Nächstes Thema

Heiner

Hi,

ich versuche verzweifelt enige Readings in meinem MQTT2 Device zu unterdrueckn, bekomme es aber einfach nicht hin.

Wenn ich alle Readings erhalten will lautet meine Readinglist:
/BMW/Status:.* { json2nameValue($EVENT) }

Ich dachte nun wenn ich statt dessen dies nutze:
/BMW/Status:.* { json2nameValue($EVENT,'',$JSONMAP) }
das ich dann wie folgt Reading eliminieren kann:
attr 225xe JSONMAP 1_available_attributes.*:0

Klappt aber nicht, die readings kommen immer wieder sie heissen im Detail dann:
1_available_attributes_1
1_available_attributes_2
1_available_attributes_3 ...

Ich habe auch schon versucht in JSONMAP das neue Reding statt "0" "undef" zu nennen, hilft aber auch nicht.
Es gibt keinen LogEintrag der einen Hinweis liefert

Was mache ich falsch.

Danke fuer die Hilfe


Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

Hi,

ich meine hier steht nicht, dass es ein regExp sein kann:
ZitatjsonMap oldReading1:newReading1 oldReading2:newReading2...
space or newline separated list of oldReading:newReading pairs.
Used in the automatically generated readingList json2nameValue function to map the generated reading name to a better one. E.g.
attr m2d jsonMap SENSOR_AM2301_Humidity:Humidity
attr m2d readingList tele/sonoff/SENSOR:.* { json2nameValue($EVENT, 'SENSOR_', $JSONMAP) }
The special newReading value of 0 will prevent creating a reading for oldReading.
Also solltest Du 1_available_attributes_1:0 usw.  setzen.

Oder gleich im Perlcode filtern.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heiner

Danke Otto, das wars.

Mit PerlCode Filtern ist ja noch schwieriger fuer mich....
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Fakenius

#3
bei mir klappt das z.B. so json2nameValue($EVENT, '', $JSONMAP, 'lon|lat|tid') um nur die Readings 'lon', 'lat', 'tid' auszugeben. Also wohl ein RegEx !? Müsste sich in diesem Fall auch negieren lassen.
FS20, Homematic (DebMatic), Zigbee (deCONZ), LaCrosse, selbstgebaute Sensoren und Aktoren via MQTT
 (CUL, HB-RF-USB-2, Jeelink, SIGNALDuino, ConBee III)

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

gregorv

#5
Hinweis:
Bei json2nameValuewird wird der 5.Parameter nur als 5ter erkannt, wenn ein vierter existiert.
also: json2nameValue($EVENT, 'Status02_', $JSONMAP,  '', 'name|Status02_[1-4]') geht. (weil explizit ein leerer 4. Paramater '' angegeben ist.
json2nameValue($EVENT, 'Status02_', $JSONMAP, , 'name|Status02_[1-4]') führt dazu, dass alle, die man nicht will, geliefert werden.
Wäre schön, wenn dazu im WIKI ein Beispiel steht.