Init einer Variable via _Initialize für SunSet/Sunrise

Begonnen von ritchie, 11 Januar 2014, 14:37:16

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

ich würde gerne via "_Initialize" des My_Utility Moduls ein paar Variablen aufsetzen, damit ich diese nicht regelmäßig berechnen muss.

So will ich auch zwei Variablen haben, welche mir das Datum von Sunrise / SunSet des aktuellen Tages bereithalten. Diese
will ich dann halt nach Mitternacht via Notify wieder aktualisieren.

Nur während der Entwicklung/Änderung der Software, würden so meine Module nach einer Änderung nicht mehr korrekt arbeiten.
Leider bekomme ich derzeit nur die SunSet/Sunrise aus dem FHEM Modul mittels Parameter in FHEM rüber in der perl Welt.

Wie kann ich in einem _Initialize Modul auf diese Werte zugreifen ?

Gibt es da einen Trick, wie ich derartige Variablen beim reload des Moduls neu aufsetze. Derzeit muss ich den Wert innerhalb des Notify ständig neu als Parameter mit übergeben.

Gruss R.


IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

rudolfkoenig

Man sollte private Daten in die global verfuegbare %data speichern, oder noch besser, in einem dummy oder in den readings von beliebigen Instanzen. Initialisieren tut man sowas in einem Funktion, was durch ein global:INITIALIZED notify aufgerufen wird.
Oder man schreibt im Modul direkt statements rein, die werden bei einem relaod auch ausgefuehrt.

ritchie

Dank für die Antwort,

das mit den Funktion innerhalb der Routine  "_Initialize" habe ich mir auch schon so gedacht.

Wenn ich die Command ref richtig gelesen habe, wäre es dann so

define evt_GlobalInit notify global:INITIALIZED  { evtInitVariables($NAME,$EVENT,$we,sunset_abs(),sunrise_abs());; }

Meine Perl Routine wäre dann wohl so

sub evtInitVariables($$$$$)
{
  my $Component = shift;
  my $State = shift;
  my $WeekendFlag = shift;
  my $SunSetAbs = shift;
  my $SunRiseAbs = shift;

.... do stuff

}


Wobei der $Name und $event wahrscheintlich nur der Vollständigkeit verwendet werden.

Verstehe ich das also dann richtig, das diese Routine ausgeführt wird, wenn ich ein


reload  99_myUtilitiy.pm


in der Kommandozeile eingebe ?


Gruss R.

IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

rudolfkoenig

Nein, fuer Reload gibt es kein Event.
Dazu kann man im event "globale statements" schreiben. Das ist nichts fhem-spezifisches, sondern "normales" perl. Andererseits ist das vermutlich auch nicht notwendig, da diese Daten durch ein reload nicht geloescht werden.