Danke für die raschen Antworten.
Ich gehe nicht auf jeden einzelnen Punkt ein, um den Umfang etwas im Zaum zu halten.
siehe set magic in der commandref.
Ja, genau so. Danke. Das würd ich mir als User für die genannten Fälle wünschen.
der Attribut-Wert koennte optional ein Perl-Expression sein, was im Modul per eval (oder AnalyzePerlCommand) ausgewertet wird.
Auch
EvalSpecials scheint stark in diese Richtung zu gehen.
In meinem Fall wäre die Lookup-Table halt kein Hash, sondern irgendwas mit $devspec und so...
Ich werd mir das genauer zu Gemüte führen. Danke
mac adressen haben im user space nichts zu suchen.
Wie definierst du denn dann eine fixe IP? Farbe im DHCP-Server eintragen funktioniert nicht. Das muss schon die MAC sein.
Und die Stärke einer Platform wie FHEM liegt eben darin, dass der Benutzer Dinge machen kann, an die der Entwickler nicht gedacht hat.
Wenn es mir erlaubt, für 20 Devices im DHCP-Server keine fixe IP einzutragen, weil ich in FHEM direkt die MAC Adresse angeben kann, dann find ich das spitze.
Und FHEM ist wirklich der einzige Grund, warum diese Geräte eine fixe IP haben.
ob das ersetzen zum zeitpunkt des attribut setzen passieren soll oder zum zeitpunkt an dem das modul das attribut auswertet
Eindeutig beim Lesen. Exklusiv. Um unnütze Events zu vermeiden. Beim Schreiben gehts ja jetzt über Notify auch schon.
du schreibst von regelmäßigem use-case, ist das tatsächlich so? sind das probleme die schon mehrfach aufgetreten sind und die schon mehrfach und unterschiedlich implementiert wurden?
Potentiell jedes einzelne Mal, wenn jemand mit curly braces arbeiten muss, um direkt
AttrVal oder
ReadingsVal aufzurufen.
Ich würd das gern wie bei der set magic als Standard-Feature in FHEM haben, als Modulautor, ohne auf "echten" Code ausweichen zu müssen.
Anderes Beispiel, vielleicht besser als das mit der MAC-Adresse: ein Utility für mathematische Funktionen.
Ich habe zwei Außentemperaturfühler. Einer im Norden, einer im Süden.
Ich ermittle aus beiden den Mittelwert und zeige diesen am FHEM-Display im Wohnzimmer an.
Sieht jetzt so aus:
defmod nfyTempOutsideAvg notify heatpump:Temp-Aussen|HM_Temp_Outdoor:temperature {fhem('set dumTempOutside '.sprintf('%.f', (ReadingsVal('heatpump','Temp-Aussen',0) + ReadingsVal('HM_Temp_Outdoor','temperature',0))/2))}
Man muss das komplette set Kommando in curly braces setzen, damit das funktioniert. Ich habe einige Mehrzeiler dieser Natur bei mir in FHEM.
Ich würde das lieber schreiben als
defmod nfyTempOutsideAvg notify heatpump:Temp-Aussen|HM_Temp_Outdoor:temperature set dumTempOutside [math:avg([heatpump:Temp-Aussen], [HM_Temp_Outdoor:temperature], 1)]
math wäre wohl wie ein Hilfsmodul oder ein Befehl implementiert, dass Durchschnitt, Summe, etc aus den übergebenen Werten (und in [] auch Readings) berechnen kann. Als letzten Parameter gibt man noch die gewünschte Zahl an Nachkommastellen an.
Im Unterschied zu Hilfsmodulen oder Befehlen wird es aber über die [] Syntax aufgerufen.
Mir ist bewusst, dass Code {...} als letzter Ausweg immer alles lösen kann. Mach ich ja auch seit 10 Jahren so. Und ich hab auch kein Problem mit Perl. Es ist das Werkzeug der Wahl. Fertig.
Aber selbst nach 10 Jahren, kosten mich und solche Fälle wie der Außentemperaturfühler immer Nerven und Google, bis ich die Syntax endlich richtig hinkriege.
Die Jahre haben mir auch gezeigt, dass die in Code selber gestrickten Teile jene sind, die im Lauf der Zeit zu Inflexibilität in
meinem Gesamtsystem führen.
Weil sie am Grundgerüst "vorbeiprogrammiert" werden müssen.
Aber in Wahrheit nehmen sie auch FHEM als Basis viel an Flexibilität, weil alle Freiheiten, die ein User hat, die Bewegungsfreiheit der Entwickler für künftige Änderungen einschränkt.
Und deshalb finde ich ein
[math:avg([heatpump:Temp-Aussen], [HM_Temp_Outdoor:temperature], 1)]
besser, als die 99_Utility Methode:
{math::avg(ReadingsVal('heatpump','Temp-Aussen'),ReadingsVal(' HM_Temp_Outdoor','temperature'), 1)}
was mich schlussendlich von der Sinnhaftigkeit meines Vorschlags überzeugt

Deklarativ ist weniger flexibel, erlaubt aber bessere Kontrolle.
Danke fürs zuhören
schöne Grüße
Martin