Hallo,
Ich habe folgendes notify
dummyRadiosender:(play|stop|restart).* { multiroomradio($EVTPART0,$EVTPART1); }
Nun ist es so das ich $EVTPART1 nur in einem Fall habe. Nämlich bei play, bei stop und restart gibt es kein $EVTPART1, und es wird zu Recht gemeckert das die globale Variable $EVTPART1 nicht definiert ist. Wie kann ich sowas am besten in diesem Notify abfangen, ich mag da ungern mit zwei Notifys arbeiten. Und bitte keine DOIF Empfehlung, es geht mir darum das globale Variablen Problem zu lösen.
Grüße
Hallo,
wenn du es partout nicht in deiner sub abfangen willst, vlt. so:
dummyRadiosender:(play|stop|restart).* { $EVENT=~s/ /,/;multiroomradio($EVENT); }
ungetestet
Gruß
Hans
Hallo Hans,
Vielen Dank für Deine Antwort. Ich hatte es schon mal mit $EVENT versucht und an meine Sub übergeben. Wie ich dann meine Übergabe auslesen wollte erhielt ich als Antwort 1, keine Ahnung wieso. Hatte es da so gemacht
dummyRadiosender:(play|stop|restart).* { multiroomradio($EVENT); }
Grüße
Ich konnte mein Problem nun lösen. Irgendwie bestand bei mir die Herausforderung darin heraus zu bekommen wie $EVENT genau aufgebaut ist bzw. übergeben wird.
Mein Notify
dummyRadiosender:(play|stop|restart).* { multiroomradio($EVENT); }
Meine sub
sub multiroomradio($) {
my @data = split( ' ', $_[0] );
my $cmd = $data[0];
my $sender = $data[1] if( $data[1] );
my @monitored=devspec2array("(Nexus7Wohnzimmer|Nexus7Schlafzimmer|Nexus7Steven|DesireHD_Flur):FILTER=intentRadioAktiv=1");
my $cnt_devs=@monitored;
my $i = 0;
my $device = "";
foreach(@monitored) {
$device .= $_;
if ($i <= $cnt_devs - 2) {
$device .= "|";
}
$i++;
}
fhem "set $device sendIntent org.smblott.intentradio.PLAY ".ReadingsVal( "dummyRadiosender", $sender, 0 ) if( $cmd eq "play" );
fhem "set $device sendIntent org.smblott.intentradio.STOP" if( $cmd eq "stop" );
fhem "set $device sendIntent org.smblott.intentradio.RESTART" if( $cmd eq "restart" );
}
Ich hatte immer versucht das gesamte Array zu splitten weil ich dachte es gibt da mehr wie ein Element. Dem ist aber nicht so. Mein Array besteht aus genau einem Element und den Inhalt dieses einen Elementes gilt es zu splitten.
Grüße
Leon
So und nun meine Sub noch mal auf ein vernünftiges Maß gekurzt
sub multiroomradio($) {
my @data = split( ' ', $_[0] );
my $cmd = $data[0];
my $sender = $data[1] if( $data[1] );
my $device = join( "|",devspec2array("TYPE=AMAD:FILTER=intentRadioAktiv=1") );
fhem "set $device sendIntent org.smblott.intentradio.PLAY ".ReadingsVal( "dummyRadiosender", $sender, 0 ) if( $cmd eq "play" );
fhem "set $device sendIntent org.smblott.intentradio.STOP" if( $cmd eq "stop" );
fhem "set $device sendIntent org.smblott.intentradio.RESTART" if( $cmd eq "restart" );
}