[gelöst] LightScene: Definierte Szene nach Neustart

Begonnen von ujaudio, 29 November 2018, 16:49:05

Vorheriges Thema - Nächstes Thema

ujaudio

Nach einem FHEM Neustart befinden sich meine 3 LightScenes im Zustand "initialized" - damit funktioniert aber ein Teil meiner Logik nicht. Was ist ein empfehlenswertes Vorgehen? Oder kann man den Zustand vor dem Neustart sichern und er wird dann automatisch wieder gesetzt? Im Wiki und in der Commandref habe ich nichts gefunden, was mir weiterhilft.

Grundsätzlich ist das Verhalten als Default durchaus ok, ich suche nur eine elegante Möglichkeit wieder in den "richtigen" Zustand zu kommen.
Einen lieben Gruß
Jürgen

ToKa

Hi,

ich setze meine lightscenes nach dem Neustart wieder auf die zuvor eingestellten Werte


## state der LightScenes auf den gespeicherten Wert setzen
my $storedScene = "off";
my @definedLightScenes = devspec2array("TYPE=LightScene");

foreach(@definedLightScenes) {
    $storedScene = ReadingsVal($_,"state","off");
Log $LogLevel, $_.": ".$storedScene;
  fhem ("setstate $_ $storedScene");
}


Gruß
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

ujaudio

Danke Torsten.

Ich gehe mal davon aus, dass LightScene die Werte automatisch entsprechend sichert und das "irgendwo in FHEM" hinterlegt ist (save-Datei?).

Dein Code ist wohl in der 99_myUtils.pm als Programm hinterlegt, welches nach Start von FHEM aufgerufen wird?! Wie letzteres geht habe ich schon mal irgendwo gelesen und das werde ich wiederfinden!
Einen lieben Gruß
Jürgen

binford6000

Moin,
du kannst den Code auch in ein notify auf global:INITIALIZED schreiben  ;)

In ./log gibt es eine Datei namens LightScenes.save wo alles gespeichert wird.
VG Sebastian

ToKa

Ja mit einem notify wie von Sebastian beschrieben. Ich rufe dann über das notify eine Funktion in meiner 99_myUtils.pm auf.
Ich nutze zum Wiederherstellen der lightscenes das state reading, das sowieso von Thema gesichert wird.

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

ujaudio

#5
Hallo Torsten,

leider funktioniert dein Code oben leider nicht - vermutlich weil es ein "Schnipsel" ist - den ich wiederum nicht ganz durchdrungen habe.

  • ist die Funktion "devspec2array" allgemein verfübgar oder von dir implemetiert?
  • $LogLevel ist nicht definiert - habe ich auf 4 gesetzt
Und dann ist da noch $_ - die tut im notify nicht.

Wen du magst, kannst du mir noch weiterhelfen...

Edit: devspec2array ist im DevelopmentModuleAPI enthalten. $_ ist die Perl Defaultvariable - unklar ist mir, wie diese die Wertzuweisung bekommt. Mein notify lautet:

global:INITIALIZED { # state der LightScenes auf den gespeicherten Wert setzen
  my $storedScene = "off";
  my @definedLightScenes = devspec2array("TYPE=LightScene");
  foreach(@definedLightScenes) {
    $storedScene = ReadingsVal($_,"state","off");
    Log 3, $_.": ".$storedScene;
    fhem ("setstate $_ $storedScene");
  }
}
Einen lieben Gruß
Jürgen

dev0

Zitat$_ ist die Perl Defaultvariable - unklar ist mir, wie diese die Wertzuweisung bekommt.

Im Perldoc steht:
ZitatIf VAR is omitted, $_ is set to each value

ToKa

Hallo Jürgen,

die Variable $_ wird durch das foreach belegt. Wie lautet denn die Fehlermeldung, die Du erhältst bzw. was steht denn im Log?

Gruß
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

ujaudio

Alles gut - mein Fehler: Bei Neustart werden die LightScenes korrekt initialisiert.

Ich hatte einen Tippfehler im notify und hatte dieses kurzfristig disabled, nach größerer Pause dann das vergessen, dies wieder zu löschen. Nun funktioniert es prima. Da ich ab und an die fhem.cfg händisch editiere - nur um größere Kommentare hineinzuschreiben - durfte ich aber nun auch feststellen, dass nach dem save alle LightScenes auf initialized stehen aber das notify nicht getriggert wird. Damit kann ich aber leben.

OT und an dev0 gerichtet: "$_ is set to each value" genau das ist mir nicht ganz klar, wann es zu dieser Wertzuweisung kommt. Ich werde mich aber heute Abend in aller Ruhe mal in mein großes Perl-Buch vertiefen...
Einen lieben Gruß
Jürgen