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=.+.*
Ich denke
list IP=.+
sollte reichen.
Gruß
Dan
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.
list a:IP=.+|i:IP=.+
Wie sieht es damit aus?
Gruß
Dan
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.
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
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
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.
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?
@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 ...
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.
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.
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=Abfall
Zeigt - ä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
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}
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=Abfall
Zeigt - ä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.
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...)
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.
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?
@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
otto, du musst dir die cref anschauen. ;)
model&sonos2mqtt_speaker:a:model
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.
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
bei mir nicht :(
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"?
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:
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}
kann ich bestätigen - Deine DEF geht auch bei mir :o
Mal sehen was TWART016 dazu sagt, ob diese Idee mit seiner group funktioniert?
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
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:
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.
@otto
haben deine sonos eventuell auch ein internal oder reading "model"?
ja, deswegen nehme ich ja a:model :)
Im Reading model steht etwas anderes als im attr model
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?
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.
Danke. Habe nun alles wie gewünscht hinbekommen.