Konstanten in FHEM definieren

Begonnen von OliWee, 29 Oktober 2016, 14:07:17

Vorheriges Thema - Nächstes Thema

OliWee

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

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

digiart

Wie wäre es mit einem DUMMY-Device mit UserReadings, die Du dann mit den konstanten Werten belegst?
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

igami

Alternativ userattr dann sind die Daten in der fhem.cfg und nicht nur im statefile
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Benni

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.ä.)

OliWee

Vielen Dank für die Tipps!
Das mit den userattr hab ich bisher noch nicht eingesetzt. Werd ich mal probieren...

OliWee

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

Da könnte man rauslesen, dass man lieber die Finger von den userattr lassen sollte...

Benni

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

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:

{AttrVal('dmConstants','const1',undef)}

Gruß Benni

OliWee

Super, danke!
Das funktioniert ja sogar in Attributen!  :D

attr <DOIFDevice> wait 0:0,{AttrVal('dmConstants','const1',600)}:0

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED