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?
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.
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
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.
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.
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.
Zitat von: marvin78 am 09 November 2017, 11:06:53
auf defined prüfen.
Das funktioniert nicht, wenn $EVTPARTx nicht deklariert ist.
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