Hallo allerseits,
gibt es eine Möglichkeit das Setzen/Löschen/Verändern von selbst definierten Attributen (userattr) global in einer AttrFn abzufangen und z. B. syntaktisch zu prüfen?
Und als passende zweite Frage: gibt es eine Möglichkeit für entsprechende selbst definierte Attribute einen Hilfetext für die Eingabe bereitzustellen (Stichwort POD)?
Vielen Dank im voraus, Gruß Wolfgang
Was genau schwebt dir vor?
Es gibt diverse Module, die "ihre" Attribute allgemein verteilen, und (zumindest teilweise) auch eine Syntaxprüfung machen. Vielleicht schaust du dir unter dem Gesichtspunkt v.a. RHASSPY mal an. MQTT_GENERIC_BRIDGE und AutoShuttersControl wären weitere Kandidaten, aber da bin ich wegen der Syntaxprüfung nicht sicher, ob die das auch machen...
Ich habe bei mir ein userattr definiert, in dem ich hinterlegen kann, wie alt ein bestimmtes Reading bei einem konkreten Device (z. B. temperatur bei einem Sensor) sein darf. Je nach Konfiguration des Sensors kann dieses maximale Alter unterschiedlich sein. In einem Hilfsmodul verwalte ich die Devices, bei denen das userattr gesetzt ist und reagiere in der NotifyFn auf Aktualisierungen. In einer Timer-Routine stelle ich außerdem fest, wenn ein Reading zu lange nicht gesetzt wurde. Abhängig vom Alter des Readings (und des maximalen Alters im userattr) setze ich ein weiteres Reading im jeweiligen Device auf ok oder err. So kann ich z. B. veraltete Sensorwerte individuell erkennen und in FTUI markieren.
Ich kann aber z. B. nicht automatisch erkennen, wenn bei einem weiteren Sensor das userattr gefüllt wird, um es anschließend im Hilfsmodul zu überwachen. Auch eine Syntax-Prüfung ist an dieser Stelle nicht möglich. Außerdem kann ich beim Setzen des userattr im GUI derzeit keinen Hilfetext für die Syntax ausgeben.
Na ja, FHEMWEB verwaltet intern eine Liste, aus der sich ergibt, zu welchem Modul welches Attribut gehört. Funktionen dazu sind addToAttrList() und addToDevAttrList().
Vielleicht wird es klarer, wie das beim/nach FHEM-Start befüllt wird, wenn du dir die sub "initialize_prefix" im RHASSPY-Code anschaust und die commandref dazu (mit "wildcards", Stichwort "data-pattern").
"Eigentlich" müßte das auch mit myUtils-Code funktionieren.
Zitatgibt es eine Möglichkeit das Setzen/Löschen/Verändern von selbst definierten Attributen (userattr) global in einer AttrFn abzufangen und z. B. syntaktisch zu prüfen?
Womoeglich funktioniert das mit einem cmdAlias:
define myUserAttrChecker cmdalias attr .* AS { myUserAttrChecker($EVENT) }und der Funktion myUserAttrChecker in 99_myUtils.pm in etwa so:
sub
myUserAttrChecker($)
{
my @p = split(" ", @_[0], 3);
if($p[1] eq "myRoom" && $p[2] eq "blue") {
return "this is not allowed";
}
return CommandAttr(undef, join(" ", @p));
}Damit darf man ein myRoom Attribut nicht mehr auf blue setzen.
Egal ob myRoom als userattr oder sonstwie definiert wurde.
ZitatUnd als passende zweite Frage: gibt es eine Möglichkeit für entsprechende selbst definierte Attribute einen Hilfetext für die Eingabe bereitzustellen (Stichwort POD)?
Mir ist nichts bekannt.
Wenn eine ueberwaeltigende Interesse danach besteht, kann ich aber was einbauen.
Zitat von: rudolfkoenig am 17 März 2026, 19:37:38Wenn eine ueberwaeltigende Interesse danach besteht, kann ich aber was einbauen.
Hallo Rudi,
würde mir gefallen. Manchmal nervt es schon, wenn die Hilfe separat nachgeschlagen werden muss.
Grüße Jörg
Ich hielte es hingegen für überflüssig. "Selbst definierte Attribute" sollten sprechende Namen haben, so dass man auch noch nach 10 Jahren weiß, wofür sie gut sind.
LG
pah