Hi!
Es kommt ja immer wieder vor, dass man ein und denselben Wert in mehreren Abfragen / Zuweisungen / wasauchimmer benötigt.
In der Codingwelt macht man sowas in der Regel mit Konstanten.
Gibt es in FHEM eine Möglichkeit, Konstanten zu definieren? Hier:
https://forum.fhem.de/index.php?topic=17462.0 (https://forum.fhem.de/index.php?topic=17462.0)
ist zwar ein Weg über die direkte Definition in Perl aufgezeigt, aber ich bevozuge in der Regel soweit wie möglich mit FHEM-Bordmitteln zu arbeiten.
Klar könnte man jetzt auch für jede Konstante ein Dummy anlegen, aber nach jedem Restart muss man wieder schauen, dass der Wert reingeschrieben wird (ich weiß, kann man mit Notify machen...). Aber so richtig elegant ist das nicht. Mit schwebt da eher eine Art "CONST-Modul" vor, das die entsprechende Definition direkt in die fhem.cfg schreibt.Die Anwendung könnte dann so aussehen:
define <Konstante> CONST <Wert>
Wenn Ihr mir jetzt sagt, das gibts schon, dann versinke ich vor Scham im Boden und gelobe, die commandref auswendig zu lernen... ;)
Gruß
Oli
Wie wäre es mit einem DUMMY-Device mit UserReadings, die Du dann mit den konstanten Werten belegst?
Alternativ userattr dann sind die Daten in der fhem.cfg und nicht nur im statefile
So mache ich das auch, ich verwende eine Kombination aus beidem:
Ich habe mir dafür einen Dummy gStates angelegt (quasi mein privates global-Devce) und daran dann
- Attribute (userattr) für echte konstante Vorgaben.
- Readings (userreadings, bzw. direkt ReadingsSingleUpdate in subs) für bestimmte in gröperen Zyklen ermittelte Werte (bspw. 1 mal am Tag ermitteltes, wie bspw. Tagesname, Jahreszeit o.ä.)
Vielen Dank für die Tipps!
Das mit den userattr hab ich bisher noch nicht eingesetzt. Werd ich mal probieren...
Sorry, aber irgendwie steh ich auf dem Schlauch...
Benny, könntest Du mir mal zeigen, wie Du das dein Dummy angelegt und mit userattr befüllt hast, und wie du diese dann in den unterschiedlichen Devices verwendest? Vielen Dank...
Außerdem verunsichert mich dieser Thread hier extrem:
https://forum.fhem.de/index.php?topic=27451.0 (https://forum.fhem.de/index.php?topic=27451.0)
Da könnte man rauslesen, dass man lieber die Finger von den userattr lassen sollte...
Zitat von: OliWee am 31 Oktober 2016, 16:33:49
Außerdem verunsichert mich dieser Thread hier extrem:
https://forum.fhem.de/index.php?topic=27451.0 (https://forum.fhem.de/index.php?topic=27451.0)
Da könnte man rauslesen, dass man lieber die Finger von den userattr lassen sollte...
Der genannte Thread bezieht sich auf das Attribut
userattr am
global-device, nicht am
dummy (oder an einem anderen Device).
userattr, die Über das
global-Device definiert sind, sind dann automatisch in allen devices vorhanden.
Du benötigst das nur an dem einen
dummy für die Konstaten und das ist definitiv unkritisch ;):
define dmConstants dummy
attr dmConstants userattr const1 const2 const3
attr dmConstants const1 123
attr dmConstants const2 234
attr dmConstants const3 Blahblah
Das sieht dann so aus, wie im angehängten Screenshot
Abrufen kannst du die Werte auf Perl-Ebene mit AttrVal (http://fhem.de/commandref_DE.html#perl):
{AttrVal('dmConstants','const1',undef)}
Gruß Benn
i
Super, danke!
Das funktioniert ja sogar in Attributen! :D
attr <DOIFDevice> wait 0:0,{AttrVal('dmConstants','const1',600)}:0
Zitat von: OliWee am 01 November 2016, 09:28:18
Das funktioniert ja sogar in Attributen! :D
Das liegt aber am DOIF und ist nicht allgemein gültig.