FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ujaudio am 29 November 2018, 16:49:05

Titel: [gelöst] LightScene: Definierte Szene nach Neustart
Beitrag von: ujaudio am 29 November 2018, 16:49:05
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.
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ToKa am 29 November 2018, 20:38:18
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
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ujaudio am 30 November 2018, 07:58:44
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!
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: binford6000 am 30 November 2018, 08:14:06
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
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ToKa am 01 Dezember 2018, 09:45:38
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
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ujaudio am 02 Dezember 2018, 12:51:40
Hallo Torsten,

leider funktioniert dein Code oben leider nicht - vermutlich weil es ein "Schnipsel" ist - den ich wiederum nicht ganz durchdrungen habe.
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");
  }
}
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: dev0 am 02 Dezember 2018, 13:08:33
Zitat$_ ist die Perl Defaultvariable - unklar ist mir, wie diese die Wertzuweisung bekommt.

Im Perldoc (https://perldoc.perl.org/perlsyn.html#Foreach-Loops) steht:
ZitatIf VAR is omitted, $_ is set to each value
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ToKa am 02 Dezember 2018, 16:53:42
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
Titel: Antw:LightScene: Definierte Szene nach Neustart
Beitrag von: ujaudio am 03 Dezember 2018, 08:19:21
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...