Hallo Zusammen,
ich bräuchte mal etwas PERL-Nachhilfe! Folgender Code in myUtils:
sub fadeout($) {
my ($device) = @_;
if ($device =~ /alle/) {
my @player=devspec2array('TYPE=SONOSPLAYER:FILTER=STATE!=disappaered');
if (@player) {
foreach my $player (@player) {
fhem("msg push Player fadeout: $player");
fhem("set $player Volume 0 1");
}
}
}
else {
fhem("msg push Player fadeout: $device");
fhem("set $device Volume 0 1");
}
}
Der else-Teil funktioniert, aber beim foreach-Teil wird nur die Nachricht geschickt, der set-Befehl an die Player sieht so aus:
set openautomation/ios-on-blue.png Volume 0 1
Aus dem Log:
2020.04.18 10:50:08 5: Cmd: >set openautomation/ios-on-blue.png Volume 0 1<
2020.04.18 10:50:08 3: set openautomation/ios-on-blue.png Volume 0 1 : Please define openautomation/ios-on-blue.png first
2020.04.18 10:50:08 5: Cmd: >msg push Player fadeout: play1_bu<
2020.04.18 10:50:08 5: Cmd: >set fhembot message Player fadeout: play1_bu<
2020.04.18 10:50:08 5: Cmd: >set openautomation/ios-on-blue.png Volume 0 1<
2020.04.18 10:50:08 3: set openautomation/ios-on-blue.png Volume 0 1 : Please define openautomation/ios-on-blue.png first
2020.04.18 10:50:08 5: Cmd: >msg push Player fadeout: play1_bz<
2020.04.18 10:50:08 5: Cmd: >set fhembot message Player fadeout: play1_bz<
2020.04.18 10:50:08 5: Cmd: >set openautomation/ios-on-blue.png Volume 0 1<
2020.04.18 10:50:08 3: set openautomation/ios-on-blue.png Volume 0 1 : Please define openautomation/ios-on-blue.png first
2020.04.18 10:50:08 5: Cmd: >msg push Player fadeout: play1_wz<
2020.04.18 10:50:08 5: Cmd: >set fhembot message Player fadeout: play1_wz<
Ich verstehe das nicht. Der msg-Befehl funktioniert, nicht aber der set-Befehl für die SONOSPLAYER... :-\
VG Sebastian
im else-Teil hast du eine variable, deren wert du bestimmst. Mit $_ eine Perl "special variable", die vermutlich im 1. fhem-Aufruf, anders als Du erwartest, verändert wird.
Wie rufst du die Sub den auf? $device scheint aus irgend einem Grund den Iconnamen zu enthalten...
Gesendet von iPhone mit Tapatalk
Zitat von: KölnSolar am 18 April 2020, 11:21:44
im else-Teil hast du eine variable, deren wert du bestimmst. Mit $_ eine Perl "special variable", die vermutlich im 1. fhem-Aufruf, anders als Du erwartest, verändert wird.
Dann einen fhem() Aufruf machen?
fhem("msg push Player fadeout: $_;;set $_ Volume 0 1");
Aber ich habe noch die Idee: Mit Hochgeschwindigkeit Sonos befeuern (hier Volume ändern bei allen Playern) das will das Sonos System nicht. Ich mache zwischen Sonos Befehlen immer eine Pause. Je nach dem was man tut, z.B. bei Gruppenbildung bis zu 10 sec.
Aber mit Volume habe ich das nicht probiert.
Gruß Otto
Danke für die schnellen Antworten :)
ZitatWie rufst du die Sub den auf? $device scheint aus irgend einem Grund den Iconnamen zu enthalten...
Einfach in Eingabefeld eingegeben. Sie funktionieren aber genauso im PERL-Code aus notify etc.
{fadeout('play1_wz')}
{fadeout('alle')}
Zitatim else-Teil hast du eine variable, deren wert du bestimmst. Mit $_ eine Perl "special variable", die vermutlich im 1. fhem-Aufruf, anders als Du erwartest, verändert wird.
Ich habe noch mehr subs die so arbeiten. Alle funktionieren (HUEDevice, LightScene, IT), bis auf diese hier mit dem SONOSPLAYER.
ZitatDann einen fhem() Aufruf machen?
Das ist nur ein Aufruf. Die msg push ist nur zum debuggen gewesen...
ZitatAber ich habe noch die Idee: Mit Hochgeschwindigkeit Sonos befeuern (hier Volume ändern bei allen Playern) das will das Sonos System nicht. Ich mache zwischen Sonos Befehlen immer eine Pause. Je nach dem was man tut, z.B. bei Gruppenbildung bis zu 10 sec.
Aber mit Volume habe ich das nicht probiert.
Denke auch dass es am SONOSPLAYER-Device liegt. Gruppierungen gehen problemlos mit den drei.
Ich probiers mal mit kleinen Pausen dazwischen.
VG Sebastian
Mitfhem("sleep 0.1; set $player Volume 0 1");
funktioniert der Code in der foreach-Schleife!
Danke an alle! Schönes Wochenende noch und bleibt gesund! :)
VG Sebastian