FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gestein am 07 September 2019, 16:36:28

Titel: Verwendung von getKeyValue/setKeyValue?
Beitrag von: gestein am 07 September 2019, 16:36:28
Hallo,

ich bin schon seit längerem auf der Suche nach einer Möglichkeit meine Settings/Parameter zu speichern und wieder herzustellen.
Dabei bin ich von Beta-User auf die Funktionen getKeyValue/setKeyValue aufmerksam gemacht worden.

Wie aber verwende ich das richtig?

Ich würde gerne ein Dummy anlegen, in dem je ein Attribut für einen Parameter angelegt ist.
In einem perl-Modul (wahrscheinlich am besten 99_myUtils.pm oder ähnliches) kann ich es dann so verwenden:
defmod Parameters dummy
attr Parameters room Zentrale
attr Parameters userReadings Uhrzeit1, Uhrzeit2, Temperatur1, Temperatur2


sub InitParameters()
{
my $error, $value;
my ($err, $data) = getKeyValue("Uhrzeit1");

fhem( "set Parameters Uhrzeit1 $data" );
}


Und dieses "Paar" Anweisungen (getKeyValue/fhem("set .....")) muss ich dann für jeden Parameter anführen.

Und das rufe ich dann im notify für global:initialized auf.
defmod gl_InitVariables notify global:INITIALIZED|REREADCFG InitParameters()
attr gl_InitVariables room Zentrale


Stimmt das so? Oder macht man das anders?
Danke im Voraus
lg, Gerhard
Titel: Antw:Verwendung von getKeyValue/setKeyValue?
Beitrag von: Beta-User am 09 September 2019, 12:14:37
Hallo,

ich verwende das eher dazu, Daten dauerhaft außerhalb der Konfiguration zu speichern. Die Daten dann zum FHEM-Start quasi zu importieren, ist eigentlich nicht Sinn der Sache, sondern wenn, dann verwende ich getKeyValue() im laufenden Betrieb dort, wo man sonst AttrVal(), ReadingsVal() oder ReadingsNum() nutzen würde.

Ein Beispiel (dort: Speicherung der Email-Zugangsdaten außerhalb) ist hier zu finden:
https://wiki.fhem.de/wiki/E-Mail_senden#Raspberry_Pi

Aber wie immer in FHEM/Perl: gibt viele Möglichkeiten.

ABER: userReadings ist nicht, was du brauchst, es soll ja nichts berechnet werden. Um das auch in FHEMWEB setzbar zu haben, reicht es bei einem Dummy, das betreffende Reading in die setList aufzunehmen, aber eigentlich brauchst du nicht mal das: einfach setreading verwenden statt set...
(Aber nochmal explizit: der Umweg über den Dummy ist nicht optimal, das würde ich nicht so lösen...)

Da es hier aber um Uhrzeiten usw. geht, die nicht "geheim" sein dürften und sogar setzbar, würde ich eher die Möglichkeiten innerhalb dummy nutzen, dafür widgets hernehmen (siehe auch https://wiki.fhem.de/wiki/FHEMWEB/Widgets, da ist gleich ein dummy als Beispiel mit ganz vielen Readings, die man setzen kann ;) ).

Wenn du unbedingt sicherstellen willst, dass z.B. bestimmte Werte überhaupt vorhanden sind, würde ich eher dazu neigen, das in eine eigene Subroutine auszulagern, die dann prüft, ob nach dem Systemstart (Einlesen der statefile) alles vorhanden ist und dann via setreading fehlende Readingwerte mit defaults füllt (aber nur, was fehlt...).

Oder geht es darum, genau nicht die in der statefile gespeicherten (ggf. geänderten) Werte wieder herzustellen, sondern immer mit einem default zu starten? Dann geht das uU. in der Weise wie von dir beschrieben.

Hoffe, die verschiedenen Optionen einigermaßen verständlich erläutert zu haben...?

Gruß, Beta-User
Titel: Antw:Verwendung von getKeyValue/setKeyValue?
Beitrag von: gestein am 10 September 2019, 00:06:08
Hallo Beta-User,

vielen Dank für die nochmaligen Hinweise.
Ich dachte, ich habe es. Aber da muss ich wohl noch einiges Lesen und Verstehen  ;)

lg, Gerhard