FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: roedert am 08 November 2017, 23:19:59

Titel: Global symbol "$EVTPART1" requires explicit package name
Beitrag von: roedert am 08 November 2017, 23:19:59
Was der Fehler bedeutet ist klar, aber irgendwie muss man doch ein notify bauen können was einen Parameter haben kann, aber nicht muss.

In meinem Fall ein Dummy xyz mit Attribut SetList SETALMON SETALMOFF SETALMTIME GETALMTIME

Und dazu ein Notify
xyz.* {
  if ($EVTPART0 eq 'SETALMON' || $EVTPART0 eq 'SETALMOFF')
    {system('curl http://xxxx/'.$EVTPART0)}
  elsif ($EVTPART0 eq 'SETALMTIME')
    {system('curl http://xxx/SETALMTIME?time='.$EVTPART1)}
}


Doch nun funktioniert das notify beim set-Aufruf mit SETALMON nicht mehr (wegen dem nicht vorhandenen $EVTPART1), obwohl in diesem if-Zweig $EVTPART1 dies ja gar nicht benötigt wird.

Wie kann man das umgehen?
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: dev0 am 09 November 2017, 09:12:17
ZitatWie kann man das umgehen?
$EVENT benutzen und selbst splitten oder mehrere notify benutzen und die regex entsprechend setzen, dass die erwarteten $EVTPARTx auch vorhanden sind.
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: kadettilac89 am 09 November 2017, 09:43:43
Zitat von: roedert am 08 November 2017, 23:19:59
In meinem Fall ein Dummy xyz mit Attribut SetList SETALMON SETALMOFF SETALMTIME GETALMTIME


Doch nun funktioniert das notify beim set-Aufruf mit SETALMON nicht mehr (wegen dem nicht vorhandenen $EVTPART1), obwohl in diesem if-Zweig $EVTPART1 dies ja gar nicht benötigt wird.

Wie sieht das Event aus (Eventmonitor)? Gibt es überhaupt ein EVTPART0 + EVTPART1? Ich könnte mir vorstellen, dass der Wert schon in $EVTPART0 steht und **1 gar nicht gefüllt ist. Du schreibst, dass du das im Dummy machst.

Poste mal ein List deines Dummy und was im Eventmonitor steht wenn du schaltest
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: marvin78 am 09 November 2017, 11:06:53
Wenn EVTPART1 nicht immer gefüllt ist, hin und wieder aber schon (das kann durchaus vorkommen) muss man eben auf Perl-Ebene auf defined prüfen.
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: roedert am 09 November 2017, 11:09:45
Zitat von: kadettilac89 am 09 November 2017, 09:43:43
Gibt es überhaupt ein EVTPART0 + EVTPART1?

Ja, das passt schon - das was in dem Auswahlfeld steht (die Werte kommen aus attr setList) wird als $EVTPART0 geliefert, was ich evtl. noch dahinter in das Eingabefeld schreibe, kommt an $EVTPART1 an.
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: roedert am 09 November 2017, 11:33:55
Zitat von: marvin78 am 09 November 2017, 11:06:53
Wenn EVTPART1 nicht immer gefüllt ist, hin und wieder aber schon (das kann durchaus vorkommen) muss man eben auf Perl-Ebene auf defined prüfen.

Das habe ich auch schon versucht, jedoch erfolglos.
Ein
if (defined $EVTPART1) { $tmpvar = $EVTPART1 }
liefert den gleichen Fehler ... scheinbar ist der FHEM-interne Parser da irgendwie mit überfordert.
$EVENT von Hand zu splitten scheint dann wohl der richtige Weg zu sein.
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: dev0 am 09 November 2017, 18:42:42
Zitat von: marvin78 am 09 November 2017, 11:06:53
auf defined prüfen.
Das funktioniert nicht, wenn $EVTPARTx nicht deklariert ist.
Titel: Antw:Global symbol "$EVTPART1" requires explicit package name
Beitrag von: viegener am 09 November 2017, 19:06:46
Es gibt wohl eine hässliche Methode das in diesem Fall zu verhindern:


no strict "vars";
...
use strict "vars";


Allerdings muss dann auch die Variable "fully qualified" sein also vermutlich hier $main::EVTPART1

Trotzdem muss natürlich dann auf defined geprüft werden, sonst gibt es die nächste Meldung.

Besser wäre es aber wirklich per split(...) den Event selber aufzuteilen