FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Enlightning Man am 25 Januar 2015, 14:37:36

Titel: Fragen zu LightScene
Beitrag von: Enlightning Man am 25 Januar 2015, 14:37:36
Hallo.

Ich habe ein Paar grundlegende Verständnisfragen zu LightScene.

Ich möchte bei der Wiedergabe von 3D Filmen via XBMC (siehe XBMC Thread (http://forum.fhem.de/index.php/topic,32387.0.html)) mir:

Ich habe mir hierfür eine LightScene kino_licht definiert und lege on-the-fly den Zustand tmp_pre_movie_state bevor ich auf den Zustand 3d_movie (gedimmte Lampen) wechsle. Sobald der Film pausiert wird, wird zurück auf scene tmp_pre_movie_state geswitched und die scene wird danach direkt wieder gelöscht.

Soweit so gut... Aber:

Problem A - LightScene scheint zu spät zu speichern:
Die Abfolge der Befehle
fhem("set kino_licht save tmp_pre_movie_state;");
fhem("set kino_licht scene 3d_movie;");

legt korrekt einen neuen Scene Zustand an, allerdings wird bei mir für die Lampe in der Scene immer der ausgeschaltete Zustand in der Scene gespeichert und nicht der aktuelle.
Verwende ich
fhem("set kino_licht save tmp_pre_movie_state;");
fhem("set wz_dimmer_tisch 0 0 3;");

dann klappt es und die tmp_pre_movie_state hat den korrekten Zustand. Das hört sich für mich verdächtig nach einer Race Condition an, dass das Speichern erst die Daten abfragt, nachdem die Scene schon gewechselt hat oder so. Kann das sein? Muss ich da irgendwie mit Sleep arbeiten?

Problem B - Kann man die aktuell aktive Scene abfragen?

Derzeit frage ich ab ob eine bestimmte Lampe an ist oder nicht um zu entscheiden, ob ich in die 3d_movie LightScene switchen soll. Schöner wäre, wenn ich abfragen könnte, welche scene die gerade aktive ist. Habe diese beiden Varianten erfolglos ausprobiert:
Log 3, "Current light scene of kino_licht: " . ReadingsVal("kino_licht", "scene", "n/a");
Log 3, "Current light scene of kino_licht: " . fhem("get kino_licht scene;");

Ist denke ich ein einfacher Denkfehler meinerseits, wie man an diese Info rankommt.

Problemchen C - Der Dimmvorgang ist jetzt sehr schnell
Das ist ein kleines Problem, aber ich hatte den Dimmvorgang vor der Einführung der LightScene per Einzelbefehl auf 3 Sekunden eingestellt und das wechseln der Scenes macht das jetzt in der schnelleren Default Geschwindigkeit des Dimmers. Das is natürlich nicht mehr so eindrucksvoll wie vorher. Kann man das irgendwie konfigurieren? Vielleicht via setcmd in der LightScene?  Die Commandref ist leider nicht so wirklich intuitiv verständlich und das Wiki zu Lightscene ist noch leerer...

Danke für Hilde und schöne Grüße,
EM
Titel: Antw:Fragen zu LightScene
Beitrag von: Enlightning Man am 25 Januar 2015, 14:48:53
Ah, direkt mal eins rausgefunden:

Problem B ist super offensichtlich:
Value("kino_licht")
gibt mir die aktuell gesetzte Szene.
Titel: Antw:Fragen zu LightScene
Beitrag von: Enlightning Man am 25 Januar 2015, 15:10:42
Ok, die Erkenntnis zum Abfragen der aktuellen LightScene hat auch Problem A gelöst. Offenbar sind mehrere at notifications von meinem XBMC beim Start des Films angekommen. Mit dem Code hier geht es jetzt, dass die LightScene die korrekten Werte speichert und nach dem Film (oder bei Pause) wieder herstellt.
wz_xbmc:playStatus.* {
  my $media = ReadingsVal("wz_xbmc","currentMedia","none");
  my $isPlaying = ReadingsVal("wz_xbmc","playStatus","n/a") eq "playing";
  my $is3d = ReadingsVal("wz_xbmc","3dfile","n/a") eq "on";
  my $currentLightScene = Value("kino_licht");
  Log 3, "Wiedergegebene Datei: " . $media . " isPlaying: " . $isPlaying. " is3d: " . $is3d . " currentLightScene: " . $currentLightScene;
  if ($is3d && $isPlaying) {
     if ($currentLightScene ne "3d_movie") {       
        Log 3, "Speichere aktuellen Zustand als temporäre Szene und ändere kino_licht scene auf 3d_movie...";
        fhem("set kino_licht save tmp_pre_movie_state;");
        fhem("set kino_licht scene 3d_movie;");       
     }
  } elsif ($is3d && $currentLightScene eq "3d_movie") {
     Log 3, "Der Film ist pausiert oder zu Ende, ändere LightScene zurück auf tmp_pre_movie_state...";
     fhem("set kino_licht scene tmp_pre_movie_state;");
     fhem("set kino_licht remove tmp_pre_movie_state;");
  }
}


Ziemlich cool :)

Was bleibt ist dann noch die generelle Frage zum langsamen, definierten Übergang. Siehe "Problem C" im Initialpost.

Titel: Antw:Fragen zu LightScene
Beitrag von: P.A.Trick am 26 Januar 2015, 00:17:19
Cool habe ich direkt mal übernnommen :) Danke!
Titel: Antw:Fragen zu LightScene
Beitrag von: Enlightning Man am 01 Februar 2015, 15:30:48
Freut mich, dass es Anklang findet.
Als Hinweis: Im neuesten XBMC Modul Update ist "is3DFile" umbenannt worden in "3dfile". Heißt, man muss

my $is3d = ReadingsVal("wz_xbmc","is3DFile","n/a") eq "on";

ersetzen durch:

my $is3d = ReadingsVal("wz_xbmc","3dfile","n/a") eq "on";

Habe es im Snippet oben jetzt angepasst.

Kann mir irgendjemand nen Tipp geben in Richtung ob/wie man die Statusübergänge mit LightScene genauer kontrollieren kann?
Titel: Antw:Fragen zu LightScene
Beitrag von: P.A.Trick am 01 Februar 2015, 15:35:23
Und ich habe das ins Wiki übernommen :-)

http://www.fhemwiki.de/wiki/XBMC#Lichtsteuerung_durch_KODI_oder_PLEX