ReadingsGroup Filter auf Name und Attribute

Begonnen von JudgeDredd, 23 September 2024, 13:35:57

Vorheriges Thema - Nächstes Thema

JudgeDredd

Hallo Zusammen,

ich würde gerne eine Readingsgroup erstellen, mit einer Regex, die alle Devices mit einem bestimmten Attribut listet.
Leider sind meine Versuche bisher erfolglos verlaufen
dev.*:FILTER=model=ex_.+:is_onlineListet alle Devices in denen das Reading "model" existiert

dev.*:FILTER=a:model=ex_.+:is_onlineAbgeleitet vom List Befehl (dort funktioniert es) habe ich es mit dem "a:" Präfix versucht, aber dann werden keine Devices gelistet.

Hat Jemand einen Tip für mich, wie ich mein Ziel erreichen kann ?

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

JudgeDredd

Ich habe den Filter rausgenommen und es jetzt über das "valueFormat"-Attribut gelöst
{ undef if( AttrVal( $DEVICE, 'model', undef ) !~ /ex_.*/ ) }
Aber vielleicht kann mir ja noch einer erklären, warum das Filter-Präfix in einer ReadingsGroup nicht funktioniert.
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

TomLee

Hallo,

wie ich dein Anliegen verstehe müsste der commandref nach
Zitat von: commandref<device> kann die Form ATTRIBUTE&VALUE haben, wobei ATTRIBUTE der Name eines Attributs ist und VALUE ein Regex.

model&^(?!ex_).*$in der DEF greifen?

Oder hab ich es falsch verstanden ?

Gruß Thomas

JudgeDredd

Hallo Thomas,

die CommandRef habe ich gesehen, aber weder die, noch Deine Ausführungen verstehe ich in irgendeiner Weise.
Ich beschreibe mal was ich gerne als Ergebnis haben möchte:

  • Alle Devices deren NAME mit "dev" beginnen
  • ein Attribut namens "model" enthalten
  • dessen Inhalt mit "is_online" beginnt
  • und als Ergebnis meinetwegen das Internal TYPE listet

Wie würde aus Deiner Sicht die DEF für die Readingsgroup aussehen ?

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

DeeSPe

Probier mal:
list .+:FILTER=i:NAME=^dev.+:FILTER=a:model=^is_online.* TYPE
Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JudgeDredd

Hi Dan,

Dein List funktioniert genauso korrekt wie mein List aus dem ersten Post, die Frage ist ja nach der Syntax für die DEF der Readingsgroup. Da kann ich es leider nicht 1:1 übertragen.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

DeeSPe

Entschuldigung, beim schnellen überfliegen war mir entgangen dass es um RDG geht!
Die Unterscheidung a:, i: und r: kennt RDG offenbar nicht.

Probier mal ob er es so nimmt in der RDG DEF:
<Name>,<TYPE> dev.+:FILTER=model=^is_online.*:+TYPE
Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JudgeDredd

So leicht ist es leider nicht ;) soweit war ich auch schon

In dieser DEF-Version geht die RDG immer auf das Reading "model" und nicht auf das Attribut.
Manche Devices haben beides (Reading und Attribut "model") und manche nur ein Attribut "model".

Zitat von: DeeSPe am 24 September 2024, 12:13:23Probier mal ob er es so nimmt in der RDG DEF:
Code Auswählen Erweitern
<Name>,<TYPE> dev.+:FILTER=model=^is_online.*:+TYPE
So werden nur die Devices mit dem Reading gelistet.
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

DeeSPe

Hab mal noch etwas herum probiert und auch mal den Code vom Modul analysiert.
Das mit i:, a: und r: ist tatsächlich nicht im Modul vorgesehen und wenn man das in Devspec nicht mit angeben kann, dann wird tatsächlich nicht nach entsprechenden Attributen gesucht, sofern schon ein Reading mit selben Namen gefunden wurde.

Durch die Komplexität in DEF von RDG ist es nicht trivial die Behandlung von i:, a: und r: nachzurüsten, zumindest sehe ich keinen einfachen Weg. Evtl. fragst du mal justme1968 ob er einen Weg sieht.
Eventuell ist es aber sinnvoll (und vmtl. auch einfacher) bei devspec2array() anzusetzen und dort auch das Matching von Attributen, auch bei gleichnamig vorhandenem Reading, mit zu inkludieren.
Keine Ahnung wie viel Aufwand das wäre und ob es Nebeneffekte haben könnte. Auf jeden Fall wäre Rudi an dieser Stelle zuständig.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JudgeDredd

Schonmal vielen Dank für Deine Analyse.
Zumindest weiß ich ja jetzt, das ich allein über die DEF nicht so richtig zum Ziel komme.
Aber ich hatte mir ja zwischenzeitlich wie in #1 beschrieben, mit valueFormat geholfen.

Es gibt aber in der CommandRef einen Hinweis wie es mit Attributen gehen sollte.
<device> kann die Form ATTRIBUTE&VALUE haben, wobei ATTRIBUTE der Name eines Attributs ist und VALUE ein RegexVermutlich liegt es an mir, aber ich verstehe den Satz nicht.
Vielleicht liest ja justme1968 (maintainer) noch mit und kann uns erhellen.
Von Rudi etwas global anpassen zu lassen, wäre mir in Bezug auf Nebenwirkungen unangenehm.
Nachher bin ich noch Schuld, wenn die Community nicht mehr arbeiten kann ;)

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

DeeSPe

Zitat von: JudgeDredd am 24 September 2024, 16:47:30Es gibt aber in der CommandRef einen Hinweis wie es mit Attributen gehen sollte.
<device> kann die Form ATTRIBUTE&VALUE haben, wobei ATTRIBUTE der Name eines Attributs ist und VALUE ein Regex

Damit kannst du alle Devices nach dem Attribut filtern, aber hier geht wieder kein filtern auf den Namen:
<Name>,<TYPE> model&^is_on.+:+TYPE
Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe