FHEM Forum

FHEM => Automatisierung => Thema gestartet von: DocCyber am 01 April 2025, 10:52:45

Titel: Filter für devspec2array
Beitrag von: DocCyber am 01 April 2025, 10:52:45
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-
Titel: Aw: Filter für devspec2array
Beitrag von: betateilchen am 01 April 2025, 11:03:30
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
Titel: Aw: Filter für devspec2array
Beitrag von: DocCyber am 01 April 2025, 11:52:08
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?



Titel: Aw: Filter für devspec2array
Beitrag von: Otto123 am 01 April 2025, 17:32:39
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=lowCommandref:
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 reading2z.B.:list .* temperature humidity
Titel: Aw: Filter für devspec2array
Beitrag von: DocCyber am 04 April 2025, 12:47:41
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
Titel: Aw: Filter für devspec2array
Beitrag von: betateilchen am 04 April 2025, 12:53:50
Schonmal darüber nachgedacht, die Info aus den eventTypes zu lesen?

Titel: Aw: Filter für devspec2array
Beitrag von: DocCyber am 04 April 2025, 12:55:52
Hi,

nein.
Das sagt mir bislang auch noch nicht viel  :o
Titel: Aw: Filter für devspec2array
Beitrag von: betateilchen am 04 April 2025, 13:25:57
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:

Titel: Aw: Filter für devspec2array
Beitrag von: DocCyber am 04 April 2025, 14:47:31
Zitat von: betateilchen am 04 April 2025, 13:25:57Die Datei kann man aber auch für andere Dinge nutzen

Das funktioniert prima!  :)