Widgets Label & Dynamik

Begonnen von rogerknop, 17 Dezember 2021, 09:36:18

Vorheriges Thema - Nächstes Thema

rogerknop

Hallo Damian,

also ich habe jetzt mal jede Menge gelesen, aber um ehrlich zu sein bei Weitem noch keinen Durchblick.

Ich würde gerne als erstes Bespiel eine Liste aller Devices, die das Attribut ValveIP haben.
Die Alias Namen der Devices möchte ich in der ersten Spalte auflisten und das Widget Switch ON/OFF in der 2. Spalte.

Ich scheitere schon bei der Liste :-(


valveDevices:[@as(<br>)".*" and AttrVal($name,"ValveIP","") ne "", "keine"]


An dem uiTable Attribut bin ich noch gar nicht. Allerdings bin ich nicht sicher, ob ich den Ansatz mit dem generierten Reading valveDevices gehen soll, oder FOR nutzen soll oder AggrDoIf nutzen soll. Bin erschlagen... :-(

Wäre für weitere Tipps sehr dankbar!

Danke & Grüße,
Roger

Damian

Ja, der Funktionsumfang ist mittlerweile gut angewachsen, da kann man gerne schon den Überblick verlieren. Deswegen gibt es zu jedem Feature konkrete Beispiele.

Ausgehend von dem Beispiel aus der Commandref:

ZitatListe der Devices, deren state-Reading "on" ist und das Attribut disable nicht auf "1" gesetzt ist:

[@"":state:$_ eq "on" and AttrVal($name,"disable","") ne "1"]

Würde es dann für dich bedeuten:


[@as(<br>)"":state: AttrVal($name,"ValveIP","") ne "", "keine"]

Allerdings würde man aufgrund der fehlenden Trigger-Regex "":... auf alle Events im System reagieren. Dann würde die Funktion bei jedem Event das ganze System nach dem Attribut durchsuchen - das wäre ein richtiger Performance-Fresser, den man vermeiden sollte.

Dafür müsstest du die Trigger-Regex eingrenzen, damit die Funktion eben nicht bei allen Events die aufwändige Suche durchlaufen muss.

Wenn du deinen Ausdruck fertig hast, dann brauchst du den nur noch in uiTable angeben:

"meine Devices"|[@as(<br>)"<meine Regex>":state: AttrVal($name,"ValveIP","") ne "", "keine"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rogerknop

Hallo Damian1

1. Ich habe nun mal den Filter hinter DOIF gesetzt und hoffe damit weniger Last im FHEM zu produzieren - korrekt?

2. Dein Vorschlag für das uiTable hat sofort funktioniert für die Device Liste - sieht so einfach aus...

3. Nun möchte ich nicht nur den Alias des Devices sehen sondern in einer zusätzlichen Spalte noch ein weiteres Reading oder Attribut oder ein WID

Hier mein Define:

define rokuiTable2 DOIF [@"":state: AttrVal($name,"ValveIP","") ne ""]
setuuid rokuiTable2 61c0c56d-f33f-0fde-b1a8-320785841dad16d6
attr rokuiTable2 alias Meldungen
attr rokuiTable2 group Automatische Bewässerung
attr rokuiTable2 room Bewässerung
attr rokuiTable2 uiTable [@as(<br>)"":state: AttrVal($name,"ValveIP","") ne "", "keine"]|<<<READING oder ATTRIBUT von $_>>>\


Ich habe mir dann noch dein Beispiel mit FOR angeschaut: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eine_for-Schleife_mit_Hilfe_des_FOR-Befehls

Jedoch weiss ich nicht, wie ich meine AttrVal Bedingung mit dem AggrDoIf kombinieren kann?

Ich bin anstrengend... gell!?

DANKE, Roger



Damian

Wie hast du den Filter definiert? In deiner Definition sehe ich keinen Filter.

Das, was du vorhast, ist schon komplizierter, da muss man schon in Perl etwas mehr programmieren, der Ausdruck [...] kann ja nur Devicenamen liefern oder nur spezielle Berechnungen durchführen. Im Grunde muss man die Devicenamen mit einer Perl-for-Schleife durchlaufen und dann mit ReadingsVal oder sonst etwas Dinge bestimmen. Aber für sowas würde ich besser spezialisierte Module wie ReadingsGroup nehmen.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rogerknop

Ich dache meine Regexp im define ist der Filter :-)
Führt das nicht dazu, dass nur Änderungen an den Devices mit dem Attribut ValveIP das DOIF triggern?

Und da schließt sich der Kreis mit dem Perl. Perl ist ok für mich. Ich habe viele Lösungen in meinem Utils.pm
Wenn ich nun ein Beispiel hätte für meine Anforderung und könnte einfach eine Perl Funktion aufrufen, die das Ergebnis liefer, dann wäre es ok für mich.

Damian

#20
Für die Tabelle selbst brauchst du in der Definition nichts anzugeben:

define rokuiTable2 DOIF {}
attr rokuiTable2 uiTable [@as(<br>)"<<< hier muss deine RegEx-Filter-Definition stehen >>>":state: AttrVal($name,"ValveIP","") ne "", "keine"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF