Notify Code wirft fehler: Global symbol "$EVTPART0" requires explicit package

Begonnen von herrmie, 27 Oktober 2016, 20:18:50

Vorheriges Thema - Nächstes Thema

herrmie

Hallo,

ich habe mir die WhatsApp - Funktion eingerichtet und diese funktioniert auch. Nun wollte ich ein Notify schreiben welches mir über die Sonos Lautsprecher etwas ausgibt. Beim Reload der utils kommt es aber zur Fehlermeldung:
ZitatGlobal symbol "$EVTPART0" requires explicit package name at ./FHEM/99_MyUtils.pm line 76.
Global symbol "$EVTPART1" requires explicit package name at ./FHEM/99_MyUtils.pm line 77.
Global symbol "$EVTPART1" requires explicit package name at ./FHEM/99_MyUtils.pm line 80.
Global symbol "$EVTPART1" requires explicit package name at ./FHEM/99_MyUtils.pm line 83.

Folgender Code in der 99_MyUtils.pm


package main;

use strict;
use warnings;
use POSIX;

sub
MyUtils_Initialize($$)
{
  my ($hash) = @_;
}
[...]
define SonosNachricht notify WhatsAppSteffen:message.* {
    if ($EVTPART0 eq 'Sonos') {
if($EVTPART1 eq 'Buero') {
fhem("set Sonos_Buero Speak 30 de Hallo");
}
        elsif ($EVTPART1 eq 'Kueche') {
            fhem("set Sonos_Kueche Speak 30 de Hallo");
        }
elsif ($EVTPART1 eq 'Wohnzimmer') {
            fhem("set Sonos_Wohnzimmer Speak 30 de Hallo");
        }
    }
}


Vielleicht hat ja einer eine Lösung oder ich sehe den Wald vor lauter Bäumen nicht mehr.

Danke und Grüße,
herrmie

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

herrmie

Hallo,

ich habs selber gemerkt, als ich den Beitrag abgesendet habe. Habs nun in der fhem.cfg, aber leider ist der Fehler gleich.

Grüße,

justme1968

$EVENT, $EVNTPART, ... sind keine globalen variablen sondern nur während der ausführung des notify bekannt.

du musst sie aus dem notify an deine sub übergeben. am besten nur $EVENT und dann selber splitten.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmie

Hallo,

also soll in die fhem.cfg sowas wie:
define SonosNachricht notify WhatsAppSteffen:message.* { SonosNachrichtDo($EVENT) }

Und in meine Utils mache ich dann die sub rein und splitte mir EVENT. Wie greife ich denn das notify dann ab, damit ich auf $EVNTPART1 zugreifen kann?


Grüße,

justme1968

ja. genau so.

ZitatWie greife ich denn das notify dann ab, damit ich auf $EVNTPART1 zugreifen kann?
das verstehe ich nicht. die event teile sind doch dein gesplittetes $EVENT von oben.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmie

Hallo,

okay, ich habe es aus der commandref anders verstanden.
Ich dachte ich kann auf $EVNTPART1 direkt zugreifen.
Also ist es so, dass $EVENT mein ganzer String ist und ich selber ein Split machen muss, damit ich das in einem Array habe.
Richtig?

Grüße,

justme1968

$EVENT zu übergeben und selber zu splitten ist das kürzeste.

du kannst natürlich auch $EVNTPART0 und $EVNTPART1 übergeben.  und $EVNTPART2 und ...

gruss
   andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmie

ZitatGlobal symbol "$nachricht" requires explicit package name at ./FHEM/99_MyUtils.pm line 79.

fhem.cfg:
=======
define SonosNachricht notify WhatsAppSteffen:message.* { SonosNachrichtDo($EVENT) }

99_MyUtils.pm
===========
sub SonosNachrichtDo($nachricht)
{
  fhem("set Sonos_Buero Speak 40 de $nachricht");

}

justme1968

parameter übergabe in perl funktioniert anders. z.b. so:sub SonosNachrichtDo($)
{
  my ($nachricht) = @_;

  fhem("set Sonos_Buero Speak 40 de $nachricht");

}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmie

Hallo,

danke sehr. Ich sollte mir mal ein perl tutorial durchlesen. :)


Grüße,