FHEM Forum

FHEM => Automatisierung => Thema gestartet von: CoolTux am 10 März 2016, 22:07:45

Titel: notify und nicht definiertes EVTPART1
Beitrag von: CoolTux am 10 März 2016, 22:07:45
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
Titel: Antw:notify und nicht definiertes EVTPART1
Beitrag von: Hans Franz am 10 März 2016, 23:31:37
Hallo,
wenn du es partout nicht in deiner sub abfangen willst, vlt. so:
dummyRadiosender:(play|stop|restart).* { $EVENT=~s/ /,/;multiroomradio($EVENT); }
ungetestet

Gruß
Hans
Titel: Antw:notify und nicht definiertes EVTPART1
Beitrag von: CoolTux am 11 März 2016, 05:20:22
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
Titel: Antw:notify und nicht definiertes EVTPART1
Beitrag von: CoolTux am 11 März 2016, 06:49:15
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
Titel: Antw:notify und nicht definiertes EVTPART1
Beitrag von: CoolTux am 11 März 2016, 07:05:02
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" );
}