FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: OliWee am 29 Oktober 2016, 14:07:17

Titel: Konstanten in FHEM definieren
Beitrag von: OliWee am 29 Oktober 2016, 14:07:17
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
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: digiart am 29 Oktober 2016, 16:47:40
Wie wäre es mit einem DUMMY-Device mit UserReadings, die Du dann mit den konstanten Werten belegst?
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: igami am 29 Oktober 2016, 17:04:43
Alternativ userattr dann sind die Daten in der fhem.cfg und nicht nur im statefile
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: Benni am 29 Oktober 2016, 17:40:54
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.ä.)
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: OliWee am 31 Oktober 2016, 15:13:08
Vielen Dank für die Tipps!
Das mit den userattr hab ich bisher noch nicht eingesetzt. Werd ich mal probieren...
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: OliWee am 31 Oktober 2016, 16:33:49
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...
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: Benni am 31 Oktober 2016, 17:48:41
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ß Benni
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: OliWee am 01 November 2016, 09:28:18
Super, danke!
Das funktioniert ja sogar in Attributen!  :D

attr <DOIFDevice> wait 0:0,{AttrVal('dmConstants','const1',600)}:0
Titel: Antw:Konstanten in FHEM definieren
Beitrag von: igami am 01 November 2016, 09:56:07
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.