Hallo zusammen,
Ich möchte gern alle Readings herausfiltern, deren Namen battery enthält.
Damit möchte ich Readings wie battery, aber z.B. auch params_devicepower_0_battery_percent finden.
Ich habe schon Vieles versucht, und die commandRef hilft mir auch nicht weiter.
Am ehestens - so dachte ich - könnte
list (.*):FILTER=.*battery.*=.+
passen, aber falsch gedacht.
Kann mir jemand helfen?
Danke vorab-
wo hast Du denn diese krude Syntax her?
Probier mal:
list .* r:battery
Aber mehrere readings so in "list" anzugeben, funktioniert m.W. nicht.
Was aber funktioniert:
JsonList2 .* temperature humidity
Zitat von: betateilchen am 01 April 2025, 11:03:30Probier mal:
list .* r:battery
Das hatte ich schon zuvor probiert, aber das findet tatsächlich ausschließlich Readings namens
battery, nicht aber die anderen.
ZitatAber mehrere readings so in "list" anzugeben, funktioniert m.W. nicht.
Das wäre egal ... list ist halt eine einache Möglichkeit zu prüfen.
Ich brauch es im Code für devspec2array()
Offenbar muss man aber die Readingnamen kennen, um die zugehörigen Devices zu finden.
FILTER=NAME=WERT
RegEx für die Readingnamen geht dabei wohl nicht, oder?
Du willst nicht die Readings listen sondern die Devices nach bestimmten Readings Inhalten filtern?
Zitat von: DocCyber am 01 April 2025, 11:52:08RegEx für die Readingnamen geht dabei wohl nicht, oder?
Sowas geht:
list r:battery=ok,r:battery=low
Commandref:
Zitateine durch Komma(,) getrennte Liste von Gerätenamen
Oder sowas:
list r:battery=.+
Commandref
ZitatWERT ist ein regulärer Ausdruck.
Zitat von: betateilchen am 01 April 2025, 11:03:30Aber mehrere readings so in "list" anzugeben, funktioniert m.W. nicht.
Doch das geht, sieht nur etwas komisch aus.
list device reading1 reading2
z.B.:
list .* temperature humidity
Zitat von: Otto123 am 01 April 2025, 17:32:39Du willst nicht die Readings listen sondern die Devices nach bestimmten Readings Inhalten filtern?
Hallo...
... und danke für deinen Input.
Ich beschreibe es mal anders:
Gesucht sind alle Devices, bei denen mindestens ein Readingname
battery enthält.
Damit finde ich dann hoffentlich <device>:
battery, aber auch <device>:params_devicepower_0_
battery_V oder <device>:device_0_
battery_percent
Schonmal darüber nachgedacht, die Info aus den eventTypes zu lesen?
Hi,
nein.
Das sagt mir bislang auch noch nicht viel :o
In jeder Standardinstallation von FHEM gibt es ein device vom TYPE=eventTypes, das sämtlich auftretende events aufzeichnet (Modulbeschreibung in der commandref).
Das wird normalerweise dafür benutzt, um die dropdown-Listen von device:reading Kombinationen zu befüllen.
Die Datei kann man aber auch für andere Dinge nutzen :)
sub etest {
fhem("set et flush");
my ($err,@et) = FileRead("./log/eventTypes.txt");
return $err if $err;
for (@et) {
my (undef,$n,$r,undef) = split(/ /,$_,4);
Debug "device $n has reading $r" if ($r =~ m/battery/i);
}
}
liefert bei mir beispielsweise:
2025.04.04 13:21:52 1: DEBUG>device HMinfo has reading ERR_battery:
2025.04.04 13:21:52 1: DEBUG>device az_lux has reading battery:
2025.04.04 13:21:52 1: DEBUG>device fl_Sensor has reading battery:
2025.04.04 13:21:52 1: DEBUG>device te_Sensor has reading battery:
2025.04.04 13:21:52 1: DEBUG>device te_Sensor2 has reading battery:
2025.04.04 13:21:52 1: DEBUG>device te_multi has reading battery:
2025.04.04 13:21:52 1: DEBUG>device wz_HMIP1_Btn_1 has reading battery:
2025.04.04 13:21:52 1: DEBUG>device wz_HMIP1_Btn_2 has reading battery:
2025.04.04 13:21:52 1: DEBUG>device wz_Tuer_Terrasse has reading battery:
2025.04.04 13:21:52 1: DEBUG>device wz_lux has reading battery:
2025.04.04 13:21:52 1: DEBUG>device xx_Sensor_1 has reading battery:
2025.04.04 13:21:52 1: DEBUG>device xx_Sensor_2 has reading battery:
Zitat von: betateilchen am 04 April 2025, 13:25:57Die Datei kann man aber auch für andere Dinge nutzen
Das funktioniert prima! :)