textField-long für alle gesetzten userattr ?

Begonnen von TomLee, 02 Mai 2024, 16:33:58

Vorheriges Thema - Nächstes Thema

TomLee

Hallihallo,

angenommen ich hab ganz viele userattr in einem Device angegeben und in jedem einzelnen hätte ich gerne textField-long aktiviert.
Mit widgetOverride muss ich jedes userattr einzeln angeben.
Gibt es eine andere Möglichkeit ?

Gruß

Thomas

rudolfkoenig

Versuch mal widgetOverride an der FHEMWEB Instanz zu setzen.

TomLee

komm ich nicht mit, was soll ich denn da eintragen, wenn nicht jedes userattr einzeln aufführen ? Die userattr-Liste kann auch erweitert werden, diese erweiterten Einträge stell ich mir vor sollen auch gleich "textField-long aktiviert" sein.

rudolfkoenig

Sorry, habe die Aufgabe falsch verstanden, ich dachte an mehrere Geraete mit den gleichen userattr.
Ein widgetOverride mit Regexp gibts leider nicht.

TomLee

Ok, danke. Ist auch nicht wichtig, es war nur so ein Gedanke.

TomLee

#5
Immer noch nicht wichtig, aber weiterhin im Hinterkopf.

Sehe gerade das man auch direkt in dem userattr-Attribut die textField-long Angabe vornehmen kann.
attr <devicename> userattr bli:textField-long bla:textField-long blub:textField-long ...
Wäre es ohne größeren Aufwand möglich, einen weiteren optionalen Parameter in userattr vorzusehen, der das textField-long für alle angegebenen userattrs vornimmmt?

rudolfkoenig

Bei userattr kann man Regexps angeben:
define d dummy
attr d userattr x.*:textField-long
attr d x1 green
attr d x2 blue
Reicht das?

TomLee

Nee, die Benennung der userattr sollte weiterhin frei wählbar sein.

Mein Anwendungsfall ist ein Alexa-Routinen-dummy:

(Nicht optimal, aber ich mag auch nicht mehr davon weg, eher verbessern/optimieren.)

defmod du_alexa_routinen dummy
attr du_alexa_routinen userattr egsaugerpause:textField-long newspamentry printshoppinglist alexarestart countgarbage delcountgarbage oilprice solaryield sonosrestart
attr du_alexa_routinen alexaName routinen
attr du_alexa_routinen alexarestart set alexa restart
attr du_alexa_routinen delcountgarbage deletereading cal_Abfallkalender Leerungen_Restabfall/Wertstoffe
attr du_alexa_routinen egsaugerpause set di_test on
attr du_alexa_routinen newspamentry {newspamentry('cm_bla','Fritzbox1','sip_Telefon')}
attr du_alexa_routinen printshoppinglist {system("lpr -P HL-2035 -o media=Custom.95x138mm /opt/fhem/einkaufsliste.txt")}
attr du_alexa_routinen readingList pct
attr du_alexa_routinen room Sprachsteuerung
attr du_alexa_routinen setList pct:slider,1,1,100
attr du_alexa_routinen solaryield {fhem('set Sonos_Wohnzimmer speak 22 der momentane solare Ertrag beträgt '.ReadingsNum('MQTT2_inverter_HM_1500_1','P_AC',-1).'Watt')}
attr du_alexa_routinen sonosrestart "pm2 restart 0"
attr du_alexa_routinen stateFormat pct
attr du_alexa_routinen userReadings cmnd:pct.* {\
    my @usrattr = split(' ',AttrVal($name,'userattr','nA'));;\
    my $i = 1;;\
    my %pct2cmnd = map {$i++ => $_} @usrattr;;\
    my $cmnd = $pct2cmnd{ReadingsNum($name,'pct',0)};;\
    return if !$cmnd;;\
    my $w=AttrVal($name,$cmnd,'nA');;\
    fhem("$w");;\
    return $w;;\
},\
routine:pct.* {\
    my @usrattr = split(' ',AttrVal($name,'userattr','nA'));;\
    my $i = 1;;\
    my %pct2cmnd = map {$i++ => $_} @usrattr;;\
    return $pct2cmnd{ReadingsNum($name,'pct',0)};;\
}
attr du_alexa_routinen webCmd pct

setstate du_alexa_routinen 9
setstate du_alexa_routinen 2025-03-02 15:35:26 cmnd "pm2 restart 0"
setstate du_alexa_routinen 2025-03-02 15:35:26 pct 9
setstate du_alexa_routinen 2025-03-02 15:35:26 routine sonosrestart

rudolfkoenig

ZitatMein Anwendungsfall ist ein Alexa-Routinen-dummy:
In diesem Fall duerfte das Erweitern aller userattr Feldern am umweltfreundlichsten sein :)