FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TWART016 am 09 März 2021, 17:37:35

Titel: [gelöst] AttrVal in Readingsgroup
Beitrag von: TWART016 am 09 März 2021, 17:37:35
Hallo,

ich möchte mir gerne alle Geräte inklusive AttrVal anzeigen lassen, die das Attribute "IP" besitzen.

Wie mache ich das am Besten? Schön wäre das natürlich in einer Readingsgroup.

Mit dem list erhalte ich nur Geräte, die fest das Attribut eingetragen haben, und nicht die mit InternalVal.
.*:FILTER=a:IP=.+.*
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: DeeSPe am 09 März 2021, 19:22:55
Ich denke
list IP=.+
sollte reichen.

Gruß
Dan
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 10 März 2021, 00:32:52
Zitat von: DeeSPe am 09 März 2021, 19:22:55
Ich denke
list IP=.+
sollte reichen.

Gruß
Dan

Damit tauchen allerdings auch Geräte auf, die das Reading IP haben. Ich möchte nur die Attribute.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: DeeSPe am 10 März 2021, 09:08:24
list a:IP=.+|i:IP=.+
Wie sieht es damit aus?

Gruß
Dan
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 10 März 2021, 09:45:49
Zitat von: DeeSPe am 10 März 2021, 09:08:24
list a:IP=.+|i:IP=.+
Wie sieht es damit aus?

Das zeigt mit die Geräte an, wie bei meinem ersten Post.

In Readingsgroup funktioniert das jedoch nicht. Ich möchte eine Liste inkl. des AttrVal angezeigt bekommen.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: DeeSPe am 10 März 2021, 10:17:44
Ich kann es leider nicht nachstellen da ich kein Device mit einem entsprechenden Internal oder Attribut besitze.

readingsGroup ist m.E. auch der falsche Ansatz, es heißt ja schließlich nicht umsonst readingsGroup. Attribute und Internals wirst Du damit nicht angezeigt bekommen, zumindest nicht dass ich wüsste.

Vielleicht erklärst Du mal was das tatsächliche Ziel ist, dann findet sich sicher eine entsprechende Lösung.

Gruß
Dan
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Beta-User am 10 März 2021, 10:42:09
Aus der Commandref:
ZitatIf regex starts with a '?' it will be matched against the attributes of the device instead of the readings.

Das hier zeigt im Test nur die dummy an, die ein Room-Attribut haben:
defmod test_rg readingsGroup TYPE=dummy:?room
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 10 März 2021, 13:04:48
Zitat von: Beta-User am 10 März 2021, 10:42:09
Aus der Commandref:
Das hier zeigt im Test nur die dummy an, die ein Room-Attribut haben:
defmod test_rg readingsGroup TYPE=dummy:?room

Danke, das hilft mir erstmal weiter.
Titel: Antw:[gelöst] AttrVal in Readingsgroup
Beitrag von: TWART016 am 11 März 2021, 02:36:19
Wie bekomme ich es hin, wenn ich alle alle Geräte mit dem Attribut group=Abfall haben möchte? Bzw. wie bekomme ich den AttrVal ausgelesen und gefiltert?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: OdfFhem am 11 März 2021, 07:29:37
@TWART016

Eine 100%-Antwort zu geben ist nicht so einfach, da freie Interpretation zu sehr variablen Antworten führen kann.


list-Befehl mit Filterausdruck für alle Geräte, die zu genau einer Gruppe und zwar zu Abfall gehören:

list group=Abfall


list-Befehl mit Filterausdruck für alle Geräte, die evtl. zu mehreren Gruppen gehören, aber auf jeden Fall auch zu einer Gruppe mit Namensanteil Abfall:

list group=.*Abfall.*



Sollte was Zielorientiertes dabei sein, kann der entsprechende Filterausdruck vermutlich 1:1 in die readingsGroup integriert werden ...
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 11 März 2021, 11:36:01
Also ich glaube das Modul funktioniert nicht wie dokumentiert  :-[ oder ich verstehe es nicht.
Aber so bekomme ich alle Geräte mit attribute model und der Inhalt Attribute model wird dargestellt (funktioniert nicht nur für Readings ;) )
.*:a:model

Was bei list funktioniert, funktioniert bei der DEF readingsGroup nicht wie erwartet - also nur teilweise. Insbesondere die Filterform model=text funktioniert in keiner Kombination.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 11 März 2021, 14:24:52
Zitat von: Otto123 am 11 März 2021, 11:36:01
Also ich glaube das Modul funktioniert nicht wie dokumentiert  :-[ oder ich verstehe es nicht.
Aber so bekomme ich alle Geräte mit attribute model und der Inhalt Attribute model wird dargestellt (funktioniert nicht nur für Readings ;) )
.*:a:model

Was bei list funktioniert, funktioniert bei der DEF readingsGroup nicht wie erwartet - also nur teilweise. Insbesondere die Filterform model=text funktioniert in keiner Kombination.
Geht mir genauso. Mit List bekomme ich die Geräte angezeigt, in Readingsgroup jedoch nicht.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Beta-User am 11 März 2021, 14:34:15
Habe leider keine passenden Geräte, aber das hier liefert alle dummy, dir rhasspy-Attribut(e) gesetzt haben:
defmod test_rg readingsGroup TYPE=du.*:?rhasspy.*

list group=AbfallZeigt - ähnlich wie room - auch Geräte, die noch in weiteren Gruppen sind.

Würde das mal so anpassen:
defmod test_rg readingsGroup group=Abfall:?model
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 11 März 2021, 15:22:22
so wird nur devicename angezeigt, kein alias

defmod rg_test readingsGroup <device>,<model> \
model&.+:+NAME,?model
attr rg_test nameStyle style="color:yellow"
attr rg_test nonames 1


edit: damit die links bleiben besser so:

defmod rg_test readingsGroup <device>,<alias>,<model> \
model&.+:?alias,?model
attr rg_test mapping $DEVICE
attr rg_test nameStyle style="color:yellow"
attr rg_test room 01_Test
attr rg_test valueColumn {"alias" => 1, "model" => 2}
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 11 März 2021, 23:18:25
Zitat von: Beta-User am 11 März 2021, 14:34:15
Habe leider keine passenden Geräte, aber das hier liefert alle dummy, dir rhasspy-Attribut(e) gesetzt haben:
defmod test_rg readingsGroup TYPE=du.*:?rhasspy.*

list group=AbfallZeigt - ähnlich wie room - auch Geräte, die noch in weiteren Gruppen sind.

Würde das mal so anpassen:
defmod test_rg readingsGroup group=Abfall:?model
Ich möchte nicht nur alle Geräte mit dem Reading group angezeigt bekommen, sondern nur wenn attr group einen bestimmten Werte hat.

Bei Otto geht es um model, bei mir um Abfall.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Beta-User am 12 März 2021, 07:41:31
Zitat von: TWART016 am 11 März 2021, 23:18:25
Ich möchte nicht nur alle Geräte mit dem Reading group angezeigt bekommen, sondern nur wenn attr group einen bestimmten Werte hat.

Bei Otto geht es um model, bei mir um Abfall.
...und was passiert, wenn du in dem Vorschlag dann eben das Attribut abfragst, dass du eigentlich haben willst...?defmod test_rg readingsGroup group=Abfall:?group

(Die weiterführenden Hinweise von frank solltest du dir m.E. auch näher ansehen...)
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 12 März 2021, 09:35:24
Zitat von: Beta-User am 12 März 2021, 07:41:31
...und was passiert, wenn du in dem Vorschlag dann eben das Attribut abfragst, dass du eigentlich haben willst...?defmod test_rg readingsGroup group=Abfall:?group
Damit wird mir nichts angezeigt.

Bei Frank seinen Vorschlägen werden mit alle Geräte mit dem Attribut group aufgelistet, aber nicht gefiltert nach dessen Inhalt.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Beta-User am 12 März 2021, 09:45:53
Zitat von: TWART016 am 12 März 2021, 09:35:24
Damit wird mir nichts angezeigt.
...und "nichts" kommt dir nicht seltsam vor, obwohl die devspec ja offenbar matches liefern müßte...?

Einen Browser-Refresh hattest du versucht?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 10:10:17
@Beta-User Dieser devspec group=Abfall funktioniert bei mir nicht! Der devspec TYPE= funktioniert!

da ich keine Lust habe mit group zu experimentieren meine Beispiel mit model (mach ich nur um hier zu helfen)  ;) nicht weil es bei mir um "model geht"
Funktioniert:
TYPE=MQTT2_DEVICE:a:model
Funktioniert nicht:
model=sonos2mqtt_speaker:a:model
model=sonos2mqtt_speaker:?model
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 10:24:44
otto, du musst dir die cref anschauen.  ;)

model&sonos2mqtt_speaker:a:model
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 10:30:48
funktioniert :)
Ich habe ja gesagt ich verstehe es nicht. Aber Du meinst in der cref steht: Ober sticht Unter? Oder drüber zählt mehr als drunter?
Zitat<device> can be of the form ATTRIBUTE&VALUE where ATTRIBUTE is the name of an attribute and VALUE is a regex.
<device> can be of the form <STRING> or <{perl}> where STRING or the string returned by perl is inserted as a line in the readings list. skipped if STRING is undef.
<device> can be a devspec (see devspec) with at least one FILTER expression.
denn modell=sonos2mqtt_speaker ist für mich gültiges devspec  :-\
Zitata NAME=VALUE pair, where NAME can be an internal value like TYPE, a Reading-Name or an attribute.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 11:24:30
Zitat<device> can be a devspec (see devspec) with at least one FILTER expression.
wenn man das so auslegt, dass genau ein FILTER da sein muss, dann funktioniert es wieder.  :)

model=sonos2mqtt_speaker:FILTER=STATE=.*:?model
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 11:58:35
bei mir nicht :(
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 12:31:12
Zitat von: Otto123 am 12 März 2021, 11:58:35
bei mir nicht :(
hast du genau mein beispiel probiert, oder wieder deine spezial variante mit "a:model"?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 12:38:42
was denkst Du von mir  :o
natürlich genau Deinen Vorschlag:
Internals:
   CFGFN     
   DEF        model=sonos2mqtt_speaker:FILTER=STATE=.*:?model
   FUUID      6049ec83-f33f-18bf-7714-6c272089b0962805
   NAME       test_rg
   NR         11128
   NTFY_ORDER 50-test_rg
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
   CONTENT2:
   DEVICES:
   fhem:
     lastDefChange 61
     last_update 1615546623.26233
   helper:
     DEF       
Attributes:
vsInternals:
   CFGFN     
   DEF        model&sonos2mqtt_speaker:?model
   FUUID      6049ec83-f33f-18bf-7714-6c272089b0962805
   NAME       test_rg
   NR         11128
   NTFY_ORDER 50-test_rg
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
     MQTT2_RINCON_000E586BE2A201400 1
     MQTT2_RINCON_000E58F42D5201400 1
     MQTT2_RINCON_347E5C82560801400 1
     MQTT2_RINCON_48A6B8195BE801400 1
     MQTT2_RINCON_48A6B8195CFA01400 1
     MQTT2_RINCON_7828CA0CB0F201400 1
     MQTT2_RINCON_7828CA6D23AC01400 1
     MQTT2_RINCON_B8E93743FCBE01400 1
   CONTENT2:
   DEVICES:
     ARRAY(0x3a9bbb0)
     ARRAY(0x39f02f0)
     ARRAY(0x3ae59e8)
     ARRAY(0x37a1638)
     ARRAY(0x37499c0)
     ARRAY(0x396ff98)
     ARRAY(0x39d1580)
     ARRAY(0x37730e8)
   fhem:
     lastDefChange 62
     last_update 1615549094.14878
   helper:
     DEF       
     positions:
       MQTT2_RINCON_000E586BE2A201400.model 1:1
       MQTT2_RINCON_000E58F42D5201400.model 2:1
       MQTT2_RINCON_347E5C82560801400.model 3:1
       MQTT2_RINCON_48A6B8195BE801400.model 4:1
       MQTT2_RINCON_48A6B8195CFA01400.model 5:1
       MQTT2_RINCON_7828CA0CB0F201400.model 6:1
       MQTT2_RINCON_7828CA6D23AC01400.model 7:1
       MQTT2_RINCON_B8E93743FCBE01400.model 8:1
     values:
       formated:
         undef
         ARRAY(0x39efe40)
       orig:
         undef
         ARRAY(0x3a8ef80)
       prefixsuffix:
         undef
         ARRAY(0x3729bf0)
Attributes:
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 12:44:23
seltsam...
bei mir geht auch das einwandfrei (habe keine sonos):

defmod rg_test readingsGroup <device>,<alias>,<model> \
model=VIRTUAL:FILTER=STATE=.*:a:alias,a:model
attr rg_test mapping $DEVICE
attr rg_test nameStyle style="color:yellow"
attr rg_test room 01_Test
attr rg_test valueColumn {"alias" => 1, "model" => 2}
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 12:59:04
kann ich bestätigen - Deine DEF geht auch bei mir  :o
Mal sehen was TWART016 dazu sagt, ob diese Idee mit seiner group funktioniert?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: DeeSPe am 12 März 2021, 13:16:46
Zitat von: frank am 12 März 2021, 12:44:23
seltsam...
bei mir geht auch das einwandfrei (habe keine sonos):

defmod rg_test readingsGroup <device>,<alias>,<model> \
model=VIRTUAL:FILTER=STATE=.*:a:alias,a:model
attr rg_test mapping $DEVICE
attr rg_test nameStyle style="color:yellow"
attr rg_test room 01_Test
attr rg_test valueColumn {"alias" => 1, "model" => 2}


Wofür ist dieser Teil ":FILTER=STATE=.*"?
Da es jeden STATE erfasst kann man das doch ganz getrost weg lassen, oder täusche ich mich?
Klappt nämlich auch ohne den Teil bei mir.

Gruß
Dan
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 13:42:03
Ohne klappt es eben nicht:
Internals:
   CFGFN     
   DEF        <device>,<alias>,<model>
model=VIRTUAL:a:alias,a:model
   FUUID      604b5698-f33f-520c-0d92-478e0b89b93bace0
   NAME       rg_test
   NR         1615461
   NTFY_ORDER 50-rg_test
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
   CONTENT2:
   DEVICES:
     ARRAY(0x6463400)
   fhem:
     lastDefChange 216
     last_update 1615550167.24787
   helper:
     DEF       
Attributes:
versus mit Internals:
   CFGFN     
   DEF        <device>,<alias>,<model>
model=VIRTUAL:FILTER=STATE=.*:a:alias,a:model
   FUUID      604b5698-f33f-520c-0d92-478e0b89b93bace0
   NAME       rg_test
   NR         1615461
   NTFY_ORDER 50-rg_test
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
     Rauchmelder_Team 1
     TeamDev1   1
   CONTENT2:
   DEVICES:
     ARRAY(0x6465b40)
     ARRAY(0x54bc538)
     ARRAY(0x6923f60)
   fhem:
     lastDefChange 217
     last_update 1615552895.82281
   helper:
     DEF       
     positions:
       Rauchmelder_Team.model 2:1
       TeamDev1.model 3:1
     values:
       formated:
         undef
         ARRAY(0x5907328)
       orig:
         undef
         ARRAY(0x5e356e0)
       prefixsuffix:
         undef
         ARRAY(0x69a6808)
Attributes:
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 13:51:37
ZitatWofür ist dieser Teil ":FILTER=STATE=.*"?
Da es jeden STATE erfasst kann man das doch ganz getrost weg lassen, oder täusche ich mich?

damit readingsgroup devspec2array benutzt.

      if( $device[1] && $device[1] =~ m/^FILTER=/ ) {
        my @device = split(":", $param);                # split all to get multiple FILTER but exclude the : before the readings
        my $devspec = shift(@device);
        while( @device && $device[0] =~ m/^FILTER=/ ) {
          $devspec .= ":";
          $devspec .= shift(@device);
        }
        my $regex =  join(':', @device);                # merge the rest back again
        foreach my $d (devspec2array($devspec)) {
          $list{$d} = 1;
          push @devices, [$d,$regex];
        }

      } elsif($device[0] =~ m/^<.*>$/) {


Zitat<device> can be a devspec (see devspec) with at least one FILTER expression.


trotzdem ist das buggy, denn die anzahl der doppelpunkte ist entscheidend.
manche devspec ohne FILTER werden über spezialfälle behandelt und funktionieren dann eben auch.
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 13:53:08
@otto
haben deine sonos eventuell auch ein internal oder reading "model"?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: Otto123 am 12 März 2021, 13:56:02
ja, deswegen nehme ich ja a:model :)
Im Reading model steht etwas anderes als im attr model
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: TWART016 am 12 März 2021, 19:32:26
Ich habe es nun hinbekommen.
defmod Abfall_readingGroup readingsGroup <device>,<alias>,<group>,<nextUpdate>,<now>\
group&Abfall:?alias,?group,!nextUpdate,!now


Mit !nextUpdate und !now erzwinge ich das Feld. Existiert das Reading bei dem Gerät nicht, wird der Readingname angezeigt. Ich möchte in dem Fall allerdings einfach leer haben.

Ich habe gelesen, dass dies mit valueColumn oder einem Mapping funktionieren soll. Leider bekomme ich das nicht hin.
Weißt jemand wie das funktioniert?
Titel: Antw:AttrVal in Readingsgroup
Beitrag von: frank am 12 März 2021, 19:42:56
ZitatMit !nextUpdate und !now erzwinge ich das Feld. Existiert das Reading bei dem Gerät nicht, wird der Readingname angezeigt. Ich möchte in dem Fall allerdings einfach leer haben.
nicht erzwingen, dann bleibt es auch leer.

wenn allerdings in einer zeile ein leeres feld in einer vorderen spalte existiert, rücken die werte nachfolgender spalten auf.
so das keine lücken existieren.

gegen das aufrücken hilft valueColumn.
in meinem beispielen ist es zu sehen.
Titel: Antw:[gelöst] AttrVal in Readingsgroup
Beitrag von: TWART016 am 13 März 2021, 14:32:19
Danke. Habe nun alles wie gewünscht hinbekommen.