Variablen dauerhaft speichern

2,920 views
Skip to first unread message

Herti

unread,
Dec 15, 2012, 11:49:49 AM12/15/12
to fhem-...@googlegroups.com
Hallo alle zusammen,

ich versuche gerade meine verwendeten Variablen innerhalb der fhem.cfg dauerhaft zu speichern, um diese bei einem Neustart o.ä. wieder rück zu laden.
Leider komme ich hierbei nicht weiter und finde auch keine Posts hierzu.
Der Gedanke den Wert der Variable in eine dummy Variable zu speichern klappte leider nicht, da mit dem set Befehl immer nur ein Text und nicht der Wert selbst gespeichert wurde.
Die Werte selbst werden beim triggern des Notifys via "S4M.1.Taste.1.dum" sauber ins Log geschrieben aber nach einem Neustart von Fhem fangen sie bei "0" wieder an, also müsste man diese in der CMD z.B. mittels Eingabe von  {$data{brenner_min_ges} = 120.0} auf den letzten Wert initialisieren. Gibt es hierfür eine Funktion die das automatisch in eine art SAVE File erledigt ???

Code in fhem.cfg:
#####################################################################################################
define brenner_zaehler_minuten notify S4M.1.Taste.1.dum {\
  if("%" eq "on") {\
     $data{brenner_Aktuell} = time();;\
   } elsif("%" eq "off") {\
     $data{brenner_min}=((time()-$data{brenner_Aktuell})/60);;\
     $data{brenner_h}=($data{brenner_min}/60);;\
     $data{brenner_min_ges}+=$data{brenner_min};;\
     $data{brenner_h_ges}+=$data{brenner_h};;\
     fhem "trigger brenner_zaehler_minuten_ges $data{brenner_min_ges}";;\
     fhem "trigger brenner_zaehler_minuten $data{brenner_min}";;\
     fhem "trigger brenner_zaehler_stunden_ges $data{brenner_h_ges}";;\
   }\
  }
attr brenner_zaehler_minuten room FS20

define brenner_zaehler_minuten_ges dummy
attr brenner_zaehler_minuten_ges room FS20
define brenner_zaehler_stunden_ges dummy
attr brenner_zaehler_stunden_ges room FS20

define brenner_log_minuten FileLog ./log/brenner_minuten-%Y-%m.txt  brenner_zaehler_minuten
attr brenner_log_minuten room FS20
define brenner_log_minuten_ges FileLog ./log/brenner_minuten_ges-%Y-%m.txt  brenner_zaehler_minuten_ges
attr brenner_log_minuten_ges room FS20
define brenner_log_stunden_ges FileLog ./log/brenner_stunden_ges-%Y-%m.txt  brenner_zaehler_stunden_ges
attr brenner_log_stunden_ges room FS20
#####################################################################################################

 Gruß Herti

UliM

unread,
Dec 16, 2012, 2:03:47 AM12/16/12
to fhem-...@googlegroups.com
Hi,
Vor dem Neustart den Befehl 'Save' absetzen -> letzter Wert des Dummy wird nach fhem.save geschrieben und bei Beustart wieder eingelesen.
Gruß Uli

Herti

unread,
Dec 16, 2012, 12:09:59 PM12/16/12
to fhem-...@googlegroups.com
Hallo Uli,

trifft dies auch auf interne Variablen vom Typ $Variable zu ??? wie man eine $Variable in eine Dummy-Variable schreibt konnte ich noch nicht erfolgreich umsetzen.

Gruß Herti

UliM

unread,
Dec 16, 2012, 12:33:06 PM12/16/12
to fhem-...@googlegroups.com


Am Sonntag, 16. Dezember 2012 18:09:59 UTC+1 schrieb Herti:
Hallo Uli,

trifft dies auch auf interne Variablen vom Typ $Variable zu ??? wie man eine $Variable in eine Dummy-Variable schreibt konnte ich noch nicht erfolgreich umsetzen.

Gruß Herti

Hi,
fhem-Variablen kannst Du mit den Funktionen Value(), OldValue(), AttrVal(), ReadingsVal() und ReadingsTimestamp() auslesen und zB in Deinen eigenen hash übernhmen oder per set auf ein dummy-device schreiben.
Das alles könntest Du auch aus dem fhem-hash auslesen, mit den Funktionen ist's aber komfortabler.

define mydummy dummy
{ fhem "set mydummy " . Value("anderesDevice") }

Siehe auch http://fhem.de/commandref.html#perl

=8-)

UliM

unread,
Dec 16, 2012, 12:55:34 PM12/16/12
to fhem-...@googlegroups.com

Am Sonntag, 16. Dezember 2012 18:09:59 UTC+1 schrieb Herti:
trifft dies auch auf interne Variablen vom Typ $Variable zu ???


Bin nicht sicher ob ich die Frage richtig verstehe, aber es sollte analog gehen:
 { fhem "set mydummy $Variable" }

Oder nur einen dummy, und dann die Variablenwerte in die Readings:
my $dev="mydummy";
$defs{$dev}{READINGS}{Wert1}{VAL} = $Variable1;
$defs{$dev}{READINGS}{Wert2}{VAL} = $Variable2;
...
und nach Neustart
$Variable1 = ReadingsVal("mydummy","Wert1","");

ACHTUNG: Ungetestet - bitte nur in Testumgebung probieren - Du könntest Dir das fhem-hash zerschiessen

=8-)

Herti

unread,
Dec 25, 2012, 8:01:53 AM12/25/12
to fhem-...@googlegroups.com
Hallo UliM,

vielen Dank für deine Antworten, bin zeitlich leider jetzt erst wieder zum testen gekommen.
Also irgendwie klappt es trotzdem nicht so richtig :-(

Ich habe jetzt folgende Eingaben im CMD-Fenster eingegeben;
set brenner_zaehler_minuten_ges " .Value($data{brenner_min_ges}) ---> Im Readings State erscheint Text: " .Value($data{brenner_min_ges})
set brenner_zaehler_minuten_ges .Value($data{brenner_min_ges})   ---> Im Readings State erscheint Text: .Value($data{brenner_min_ges})
set brenner_zaehler_minuten_ges ($data{brenner_min_ges})            ---> Im Readings State erscheint Text: ($data{brenner_min_ges})
set brenner_zaehler_minuten_ges $data{brenner_min_ges}              ---> Im Readings State erscheint Text: $data{brenner_min_ges}

Da die Variable $data{brenner_min_ges} in der fhem.cfg berechnet wird enthält diese einen Wert, diesen Wert möchte ich in die Dummy-Variable brenner_zaehler_minuten_ges speichern um ihn in der Weboberfläche sehen zu können und natürlich auch speichern zu können zwecks neustart etc.
Der Wert ist auch wirklich da, da ich diesen aktuell im logfile mitschreibe.
Mache ich da einen Denkfehler ???

Gruß und allen ein frohes und besinnliches Weihnachtsfest !

UliM

unread,
Dec 25, 2012, 9:26:40 AM12/25/12
to fhem-...@googlegroups.com

Zitat: Anonymous schrieb am Di, 25 Dezember 2012 14:01
----------------------------------------------------
> Originally posted by: hertitablet&#64googlemail.com

> Ich habe jetzt folgende Eingaben im CMD-Fenster eingegeben;
> set brenner_zaehler_minuten_ges " .Value($data{brenner_min_ges}) ---> Im
> Readings State erscheint Text: " .Value($data{brenner_min_ges})

Hi,
Value() ist eine {Perl-Funtkion}, Du musst sie also auch als solche aufrufen:

set brenner_zaehler_minuten_ges {Value("brenner_min_ges")}

unter der Annahme, dass brenner_min_ges ein fhem-device ist.
Analog geht auch ReadingsVal(), falls Du ein reading auslesen möchtest.

Geht's damit?

Gruß, Uli
--
send via http://forum.fhem.de

Herti

unread,
Dec 26, 2012, 4:51:48 AM12/26/12
to fhem-...@googlegroups.com
Moin moin,

leider geht es damit nicht.

brenner_min_ges  ist kein Fhem-Device sondern eine Perl-Variable Namens $data{brenner_min_ges} also eine skalare Variable in einem assoziativem Array.

Wenn ich also in der Fhem-CMD z.B.
{$data{brenner_min_ges}} eingebe, erscheint als Ausgabe der Wert der in dieser Variable gespeichert ist, das funktioniert wie es soll ;-)

Aber genau diesen Ausgabewert der Variable möchte ich nun in ein Fhem-Device "brenner_zaehler_minuten_ges" vom Typ dummy speichern, hier scheiterts ;-(

Im State des Fhem-Devices "brenner_zaehler_minuten_ges" erscheint immer nur die Syntax, die via set befehl eingegeben wurde aber nicht der Wertinhalt der Perl-Variable.

Bsp. in Fhem-CMD:
set brenner_zaehler_minuten_ges {$data{brenner_min_ges}}   ---> schreibt in den State von brenner_zaehler_minuten_ges den Text: {$data{brenner_min_ges}}
das gleiche bei:
set brenner_zaehler_minuten_ges {Value({$data{brenner_min_ges}})}

UliM

unread,
Dec 26, 2012, 5:21:49 AM12/26/12
to fhem-...@googlegroups.com

Zitat: Anonymous schrieb am Mi, 26 Dezember 2012 10:51
----------------------------------------------------
> Originally posted by: hertitablet&#64googlemail.com
>

> Bsp. in Fhem-CMD:
> set brenner_zaehler_minuten_ges {$data{brenner_min_ges}} ---> schreibt in
> den State von brenner_zaehler_minuten_ges den Text:
> {$data{brenner_min_ges}}

Hast Du mal versucht
{fhem("set brenner_zaehler_minuten_ges ".$data{brenner_min_ges})}
oder
{fhem("set brenner_zaehler_minuten_ges $data{brenner_min_ges}")}

Gruß, Uli
--
FB7390, CUL V3 (FS20, CUL_WS, CUL_EM), HMLAN (HomeMatic)

Herti

unread,
Dec 26, 2012, 12:46:00 PM12/26/12
to fhem-...@googlegroups.com
S P I T Z E  !!!! das wars !

beide Befehle erwirken genau das richtige Ergebnis.

Also vielen lieben Dank noch mal für deine Hilfe, nun kann ich endlich die Werte in der Weboberfläche anzeigen und vor Ausfall speichern.

Gruß Herti



Am Mittwoch, 26. Dezember 2012 11:21:49 UTC+1 schrieb UliM:

Zitat: Anonymous schrieb am Mi, 26 Dezember 2012 10:51
----------------------------------------------------

Reply all
Reply to author
Forward
0 new messages