Syntax - Verständnisproblem mit $EVTPART

Begonnen von Bender78, 27 April 2018, 16:43:44

Vorheriges Thema - Nächstes Thema

Bender78

Hallo zusammen.

Ich hoffe das ich hier richtig bin. Derzeit stehe ich komplett auf dem Schlauch und weiß nicht warum es nicht funktioniert.

Über das  PRESENCE Modul (Name: internet_watchdog) möchte ich über Lan-Ping den DNS (8.8.8.8) von Google anpingen um meine Internetverbindung zu testen ob ich "online" bin.
Dies funktioniert auch wunderbar und ich bekomme die beiden Statusmeldungen "present" und "absent".
Über ein Notify möchte ich nun, ganz simpel, eine zwei farben LED (rot/grün) ansteuern wenn diese Verbindung nicht mehr gegeben ist und ich quasi "offline" bin.
Dieses schaut wie folgt aus.

internet_watchdog:state:.*{
       if ($EVTPART1 eq "present") {
           fhem("set LED_gruen on);
           fhem("set LED_rot off);
   }
       elsif ($EVTPART1 eq "absent") {
           fhem("set LED_gruen off");
           fhem("set LED_rot on")
   }
       else {     
   }       
    }


Über FHEM kann ich ich die LED`S problemlos ansteuern. Und im $EVTPART1 sollte doch eigentlich der "Zustand" stehen oder?

Vielen Dank im voraus


DeeSPe

Entweder nimmst Du das ":state" aus dem notify raus oder Du gibst ihm das Attribut "addStateEvent 1" hinzu.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Bender78

Zitat von: DeeSPe am 27 April 2018, 16:50:06
Entweder nimmst Du das ":state" aus dem notify raus oder Du gibst ihm das Attribut "addStateEvent 1" hinzu.

Gruß
Dan

Jap... jetzt ist die Verwirrung komplett
Sorry ich bin blutiger Anfänger und kämpfe mich gerade mit dem FHEM PDF und allem durch. addStateEvent habe ich beim Notify nun auf 1 aber leider weiß ich nun nicht warum es nun funktionieren soll (was es auch noch nicht macht)
und mit dem :state "weglassen habe ich es auch schon mit allen varianten was $EVTPART1 + $EVTPART0 angeht versucht.. :-\
internet_watchdog:.*{
       if ($EVTPART1 eq "present") {
           fhem("set LED_gruen on);
           fhem("set LED_rot off);
   }
       elsif ($EVTPART1 eq "absent") {
           fhem("set LED_gruen off");
           fhem("set LED_rot on")
   }
       else {     
   }       
    }


Wuehler

Moin,

Da fehlt ein Semikolon am Ende des elsif-Blocks.


CoolTux

Öffne bitte den Eventmonitor und schaue Dir das Event an. Am besten hier posten. Dann kann man auch was zu sagen. So kann man nur raten ob es überhaupt ein EVTPART1 geben kann oder nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bender78

#5
Danke für Eure Antwort.

Ja das Semikolon fehlte nur hier. Das habe ich wohl versehentlich gelöscht beim Code einfügen. Aber in FHEM ist es drin.

Folgender Text kommt im Event Monitor
Zitat2018-04-28 07:01:52 PRESENCE internet_wachtdog absent
2018-04-28 07:01:52 PRESENCE internet_wachtdog presence: absent
2018-04-28 07:02:55 PRESENCE internet_wachtdog present
2018-04-28 07:02:55 PRESENCE internet_wachtdog presence: present

CoolTux


2018-04-28 07:01:52 PRESENCE internet_connect absent

Wenn du diesen Event beim Notify verwendest, dann hast Du kein EVTPART1


2018-04-28 07:01:52 PRESENCE internet_connect presence: absent

Bei diesem Event bekommst Du ein EVTPART1


Das liegt daran wie der Event aufgebaut ist. Beim ersten ist das der Event

absent


Beim zweiten sieht der Event so aus

presence: absent
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bender78

Zitat von: CoolTux am 28 April 2018, 07:20:14

2018-04-28 07:01:52 PRESENCE internet_connect absent

Wenn du diesen Event beim Notify verwendest, dann hast Du kein EVTPART1


2018-04-28 07:01:52 PRESENCE internet_connect presence: absent

Bei diesem Event bekommst Du ein EVTPART1


Das liegt daran wie der Event aufgebaut ist. Beim ersten ist das der Event

absent


Beim zweiten sieht der Event so aus

presence: absent


Vielen Dank für die schnelle Antwort und Erklärung!
Leider funktioniert es noch immer nicht. Habe es nun wie folgt
internet_connect presence:.*{
       if ($EVTPART1 eq "present"){
           fhem("set LED_gruen on);
           fhem("set LED_rot off);
   }
       else {   
           fhem("set LED_gruen off");
           fhem("set LED_rot on");
   }           
    }




(ach ja um die Verwirrung aufzuklären  einmal "internet_connect" und einmal "internet_watchdog"...Da ich zwischenzeitlich alles mögliche versucht habe mit die $EVTPART 0 &1 anzuzeigen wollte ich mir diese via telegram aufs Handy schicken um zu sehen was da drin steht. Vor lauter Frust dann alles wieder gelöscht und neu angefangen. Daher die unterschiedlichen Bezeichnungen).

TomLee

#8
Zitatinternet_connect:presence:.*

Bender78

Zitat von: TomLee am 28 April 2018, 08:11:45


funktioniert leider auch nicht :-\

Wenn ich jedoch das hier mache, leuchtet die LED sobald ich die Internetverbindung wieder aufbaue

internet_connect:presence:.present set LED_gruen on

TomLee

Weil da wsl. noch zwei Anführungszeichen fehlen:

Zitatinternet_connect presence:.*{
       if ($EVTPART1 eq "present"){
           fhem("set LED_gruen on");
           fhem("set LED_rot off");
   }
       else {   
           fhem("set LED_gruen off");
           fhem("set LED_rot on");
   }           
    }

CoolTux


internet_connect.(present|absent) {
       if ($EVENT eq "present"){
           fhem("set LED_gruen on");
           fhem("set LED_rot off");
   }
       else {   
           fhem("set LED_gruen off");
           fhem("set LED_rot on");
   }           
    }


Bitte richtig abschreiben
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bender78

Zitat von: CoolTux am 28 April 2018, 08:36:12

internet_connect.(present|absent) {
       if ($EVENT eq "present"){
           fhem("set LED_gruen on");
           fhem("set LED_rot off");
   }
       else {   
           fhem("set LED_gruen off");
           fhem("set LED_rot on");
   }           
    }


Bitte richtig abschreiben

Vielen Vielen Dank euch!!!
So funktioniert es. Sehr cool. Jetzt muss ich nur noch den unterschied in zusammenhang mit der Syntay verstehen zwischen EVTPART und EVENT

rudolfkoenig

ZitatBitte richtig abschreiben
Ungluecklich war in diesem Fall, dass wg. dem ersten Leerzeichen in "internet_connect presence:.*{..." das notify Modul "presence:.*{..." als Befehl angenommen hat, es deswegen diesen nicht als Perl-Befehl erkannt hat, und deswegen die Perl Syntaxpruefung auch nicht zugeschlagen hat.

ZitatJetzt muss ich nur noch den unterschied in zusammenhang mit der Syntay verstehen zwischen EVTPART und EVENT
http://fhem.de/commandref.html#notify

TomLee

Noch ein Tipp,

Zitat von: TomLee am 28 April 2018, 08:30:17
Weil da wsl. noch zwei Anführungszeichen fehlen:

heißt schlussfolgernd das du die fhem.cfg von Hand editierst.

Beim bearbeiten über den DEF-Editor hättest einen Fehler beim modify angezeigt bekommen der auf die fehlenden Anführungszeichen hinweist .