Hilfe bei Ablösung von Notify zu doif

Begonnen von Kai-Alfonso, 24 Januar 2016, 17:37:01

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Hi,

ich habe per Notify meine Sonos Boxen (bzw die Sonos Gruppe) nach x Minuten ausgeschaltet (bzw die dementsprechende Steckdose), wenn eine bestimmte Zeit lang, der Transportstate der Gruppe/der Box auf STOPPED/PAUSED_PLAYBACK steht. Der Code dazu sah so aus

Sonos_Wohnzimmer_Play3:transportState.*(STOPPED|PAUSED_PLAYBACK) {
  fhem ("delete wohnzimmer_Sonos_Idle_Off_Timer");
  fhem ('define wohnzimmer_Sonos_Idle_Off_Timer at +00:30:00 {
    my @member = SONOSPLAYER_GetSlavePlayerNames("Sonos_Wohnzimmer_Play3");;
foreach my $player (@member) {
        fhem("set steckdose.$player off");;
}
fhem("set steckdose.Sonos_Wohnzimmer_Play3 off");; }
  ');
  fhem("attr wohnzimmer_Sonos_Idle_Off_Timer room Zeitpläne");
  fhem("attr wohnzimmer_Sonos_Idle_Off_Timer alias Abschaltzeit Sonos Wohnzimmer")
}



jetzt würde ich gerne aus dem Konstrukt (Notify erzeugt Timer/löscht Timer) ein Doif machen und hab folgendes definiert:

Zitatdefine doif.Wohnzimmer.Sonos doif ([Sonos_Wohnzimmer_Play5:transportState] eq "PAUSED_PLAYBACK" or [Sonos_Wohnzimmer_Play5:transportState] eq "STOPPED")
({
my @member = SONOSPLAYER_GetSlavePlayerNames("Sonos_Wohnzimmer_Play5");;
foreach my $player (@member) {fhem("set steckdose.$player off");;}
fhem("set steckdose.Sonos_Wohnzimmer_Play5 off");; })
DOELSEIF
([Sonos_Wohnzimmer_Play3:transportState] eq "PAUSED_PLAYBACK" or [Sonos_Wohnzimmer_Play3:transportState] eq "STOPPED")
({
my @member = SONOSPLAYER_GetSlavePlayerNames("Sonos_Wohnzimmer_Play3");;
foreach my $player (@member) {fhem("set steckdose.$player off");;}
fhem("set steckdose.Sonos_Wohnzimmer_Play3 off");; })

attr doif.Wohnzimmer.Sonos wait 120




Leider macht er überhaupt nicht, was er soll. Mal geht er in der gewünschten Zeit aus, machmal gar nicht und manchmal früher. Wo habe ich denn den Fehler gemacht?
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Ellert

ZitatLeider macht er überhaupt nicht, was er soll. Mal geht er in der gewünschten Zeit aus, machmal gar nicht und manchmal früher. Wo habe ich denn den Fehler gemacht?

Könntest Du das präziser formulieren damit wir dem Fehler auf die Spur kommen können?

Zustand aller Parameter vor dem Fehlverhalten, Parameteränderung, erwartetes Verhalten, tatsächliches Verhalten, am Besten mit Zeitstempel.
Tritt während Befehlszweig 1 gewartet/ausgeführt wird ein Ereignis ein, dass den anderen Bedingungszweig wahr werden lässt?

Soweit ich sehe hast Du nur eine Wartezeit für Befehlszweig 1 angegeben. Ist das gewollt?

Sonos_Wohnzimmer_Play5:transportState und Sonos_Wohnzimmer_Play3:transportState scheinen unabhängig voneinander zu sein, daher können sich die Bedingungszweige sich gegenseitig beeinflussen. Entweder die Bedingungszweige gegeneinander über and [<doifname>] eq "cmd_<anderer Befehlszweig>" verriegeln oder 2 DOIF definieren.

[Sonos_Wohnzimmer_Play5:transportState] eq "PAUSED_PLAYBACK" or [Sonos_Wohnzimmer_Play5:transportState] eq "STOPPED" könntest Du auch so [Sonos_Wohnzimmer_Play5:transportState] =~ "PAUSED_PLAYBACK|STOPPED" schreiben.







Kai-Alfonso

Hi,

sorry, Du hast natürlich Recht. Vielleicht schreib  ich mal (unabhängig von dem quatsch, was ich geschrieben hab ;-)) was das Ziel ist.


Also, ich habe im Wohnzimmer 2 Sonos Boxen stehen - Sonos_Wohnzimmer_Play5 und Sonos_Wohnzimmer_Play3.

Beide Boxen schalte ich zusammen mit einer Structure ein und füge über ein Notify beide Boxen zu einer Gruppe zusammen.  Jetzt würde ich gerne herausfinden, wer der Gruppenmaster (die Slaves haben leider nicht den aktuellen transportState) ist und welchen transportState er hat (PLAYING|PAUSED_PLAYING|STOPPED). Sollte er auf PAUSED_PLAYING oder STOPPED wechseln sollen die Steckdoses des Masters und der Slaves nach einer Zeit X ausgeschaltet werden (zBsp SONOSPLAYER DEVICE heißt Sonos_Wohnzimmer_Play5 und die dementsprechende Steckdose steckdose.Sonos_Wohnzimmer_Play5) - es sei denn, der transportState wechselt wieder auf PLAYING - dann soll das Spiel von vorne los gehen

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)