[Gelöst] - Ausführungsreihenfolge Device und Notify

Begonnen von ftsinuglarity, 08 März 2018, 16:11:20

Vorheriges Thema - Nächstes Thema

ftsinuglarity

#45
Zitat von: CoolTux am 09 März 2018, 15:23:56

2018-03-08 23:33:22 EDIPLUG Musik on

Beispiel aus deinem Eventmonitor. Das ist das Event zum set Befehl. Behaupte ich mal mit großer Sicherheit.
Korrekt

Zitat von: CoolTux am 09 März 2018, 15:23:56

Musik:(on|off|error)

Das Regex würde auf alle Fälle auf das obere Event reagieren.
Denn Dein state sieht ja ganz anders aus

2018-03-08 21:55:12   state           ON / 0.07 W / 0.0055 A

Das ist Dein state Reading
Ebenso verstanden. Das Notify hat mit ziemlicher Wahrscheinlichkeit auf das Event von "set Musik on" reagiert. Muß ich als Tatsache hinnehmen.

Es tut mir leid wenn ich mich wiederhole und das nervt, aber es will nicht in meinen Kopf.
Auch das "set Musik on" muss durch das definierte Device laufen. In diesem ist definiert, das nur event-on-change Readings als Event an das Notify weitergereicht werden, und nichts weiter (bisher so verstanden)
Wenn mein Notify offensichtlich nicht erst auf das Setzen=Event eines Readings reagiert hat, sondern schon auf "set Musik on", wird dieses Event doch irgendwie an der Device-Definition oder zumindest den Event-Filtern vorbeigeschleust ? Ich raffs nich.  "Musik" hätte mit meiner alten Notify Definition eigentlich gar nicht reagieren dürfen.

ftsinuglarity

#46
Edit: Fein, ich kann jetzt konkret werden. Ich hab jetzt den Fall, wo genau das relevant wird. (Frag mich langsam, warum ich nicht schon früher drüber gestolpert bin)

Der oben beschriebene Ediplug war ein SP2101W. Die messen auch den Stromverbrauch und schreiben das in den "state". Deshalb wird dort das Hilfs-reading "onoff" mit sauberem state on oder off genommen.
Jetzt konfiguriere ich einen SP1101W. Die schalten nur, messen keinen Strom. Im "state" steht dann auch das reine on/off, so das state direkt verwendet werden kann.
Das führt wieder dazu, das erst das Notify und damit die Funktion ausgeführt, und erst danach das Schalten des Ediplugs ausgelöst wird. Diesmal kann ich es aber nicht "umgehen", in dem ich ein anderes Reading abfrage (onoff im oberen Fall):
SP2101W: Musik:onoff:.* { media_wz($EVTPART1);}

Für diesen Ediplug sieht das so aus:
SP1101W: Schreibtisch:(on|off|error) { schreibtisch_wz($EVENT);; }
Da greift dann wieder das set Event, und nicht erst das Event vom Reading
Sowas wie:
Schreibtisch:state:.* funktioniert ja nicht.

Wie gehe ich damit um?  (und frage mich wirklich, warum ich erst jetzt ein Problem damit bekomme)


Erstmal der momentane Stand:
Device Schreibtisch:
Internals:
   .firststart 0
   .lastTimestate 1520615195.55154
   CFGFN      ./configs/wz.cfg
   CHANGED   
   DEF        192.168.0.143
   ERROR      write to http://192.168.0.143:10000 timed out
   ERRORCOUNT 0
   ERRORTIME  2018-03-09 03:15:04
   INTERVAL   120
   LASTCMD    status
   MAC        74DA384B0A0F
   MODEL      SP1101W
   NAME       Schreibtisch
   NR         452
   PName      EdiplugDesktop
   POWER      ?
   STATE      on
   TYPE       EDIPLUG
   VERSION    2.02
   addr       http://192.168.0.143:10000
   auth       1
   buf       
   code       200
   compress   1
   conn     
   data       '<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><Device.System.Power.State/></CMD></SMARTPLUG>'
   displayurl http://admin:xxx@192.168.0.143:10000/smartplug.cgi
   host       192.168.0.143
   httpheader HTTP/1.0 200 OK
Content-Type: application/xml; charset=utf-8
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 149
Connection: close
Date: Fri, 09 Mar 2018 19:10:34 GMT
Server: lighttpd/1.4.31-devel-299
   hu_blocking 0
   hu_filecount 630
   hu_port    10000
   hu_portSfx :10000
   loglevel   4
   path       /smartplug.cgi
   port       10000
   protocol   http
   pwd        Pcri1voL
   redirects  0
   timeout    10
   url        http://admin:xxx@192.168.0.143:10000/smartplug.cgi
   user       admin
   READINGS:
     2018-03-04 17:20:05   oldstate        off
     2018-03-09 18:10:24   state           on
   helper:
     current   
     power     
     list:
     
     
     
   sslargs:
Attributes:
   alias      Schreibtisch - Ediplug
   devStateIcon on.*:ios-on-green off:ios-off
   event-min-interval state:1800
   event-on-change-reading state
   group      PCs
   icon       it_pc
   interval   120
   model      SP1101W
   password   xxx
   read-only  0
   room       - Wohnzimmer
   sortby     1
   st_type_devices st_Alle_Geraete
   st_type_mix st_Alle_Geraete_Excl
   st_type_presence stRouter_Devices
   st_type_room stWZ
   timeout    10
   user       admin
   userattr   st_type_devices st_type_devices_map st_type_mix st_type_mix_map st_type_presence st_type_presence_map st_type_room st_type_room_map structexclude



Notify Schreibtisch

Internals:
   .COMMAND   { schreibtisch_wz($EVENT); }
   CFGFN      ./configs/wz.cfg
   DEF        Schreibtisch:(on|off|error) { schreibtisch_wz($EVENT); }
   NAME       nSchreibtisch
   NR         460
   NTFY_ORDER 50-nSchreibtisch
   REGEXP     Schreibtisch:(on|off|error)
   STATE      2018-03-09 18:24:19
   TYPE       notify
   READINGS:
     2018-03-09 18:22:34   state           active
Attributes:
   icon       edit_settings
   room       - Notify,- Wohnzimmer
   st_type_mix stWZ_Media
   userattr   st_type_mix st_type_mix_map structexclude



EventMonitor:

2018-03-09 18:31:52 structure stWZ_Media_Licht off
2018-03-09 18:31:52 structure stWZ off
2018-03-09 18:31:52 structure stWZ_Licht off
2018-03-09 18:31:52 structure stWZ_Licht_Warm off
2018-03-09 18:31:52 structure st_Alle_Geraete off
2018-03-09 18:31:52 structure st_Alle_Lichter off
2018-03-09 18:31:52 structure st_Alle_Lichter_Excl_Pathlicht off
2018-03-09 18:31:52 IT WZ_Licht_Stromleiste_Sofa off
2018-03-09 18:31:53 structure stWZ off
2018-03-09 18:31:53 structure stWZ_Licht off
2018-03-09 18:31:53 structure stWZ_Licht_Warm off
2018-03-09 18:31:53 structure stWZ_Schreibtisch_Licht off
2018-03-09 18:31:53 structure st_Alle_Lichter off
2018-03-09 18:31:53 IT WZ_Licht_bei_Terrarium off
2018-03-09 18:31:53 structure stWZ_Game_PC off
2018-03-09 18:31:53 structure stWZ off
2018-03-09 18:31:53 structure stWZ_Geraete off
2018-03-09 18:31:53 structure st_Alle_Geraete off
2018-03-09 18:31:53 structure st_Alle_Geraete_Excl off
2018-03-09 18:31:53 structure stWZ_Geraete_Excl off
2018-03-09 18:31:53 structure stWZ_Schreibtisch on
2018-03-09 18:31:53 EDIPLUG Schreibtisch off




CoolTux

Du kannst beim Notify addStateEvent auf 1 setzen, dann kannst Du genau die von Dir erwähnte state RegEx verwenden.
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

ftsinuglarity

#48
Zitat von: CoolTux am 10 März 2018, 09:15:30
Du kannst beim Notify addStateEvent auf 1 setzen, dann kannst Du genau die von Dir erwähnte state RegEx verwenden.

Guten Morgen CoolTux. Lange Frage, knackige Antwort :)  Das wars, funktioniert. Danke !!!

Ich versuche das gerade mit definierten Events, kannst du die Syntax nochmal kurz hier reinschmeißen bitte ? Mir ist die Syntax noch nicht eingängig.
Notify nMusik => AddStateEvent  1
Schreibtisch:state:.* { schreibtisch_wz($EVTPART1); } => funktioniert

Bisheriger Versuch zB:
Schreibtisch:state:(on|off|error)  { schreibtisch_wz($EVTPART1); }  => geht so nicht




CoolTux


Schreibtisch:state:.(on|off|error)

Du musst das Leerzeichen in der Regex mit abfangen. Schau im Eventmonitor wie der Event ausschaut.
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

ftsinuglarity

#50
Zitat von: CoolTux am 10 März 2018, 09:55:08

Schreibtisch:state:.(on|off|error)

Du musst das Leerzeichen in der Regex mit abfangen. Schau im Eventmonitor wie der Event ausschaut.

Ich war schon bei Versuch: Schreibtisch:state:on|state:off  :D

Vielen lieben Dank. So funktioniert das jetzt:
Schreibtisch:state:.(on|off|error) {schreibtisch_wz($EVTPART1)}

Damit wird mir jetzt auch der Punkt . in der allgemeinen Definition klar:
DEVICE:READING:.VALUE

Den hatte ich nur aufs VALUE bezogen, nicht auf READING.VALUE und mich deshalb gewundert, was der Punkt in einer allg. Definition zu suchen hat.
Wenn "READING VALUE" als ganzer String übermittelt wird, macht das auf einmal Sinn.

Man, das war ja mal ne Runde Sache .. ich glaube damit ist alles für mich offene geklärt.

Nocheinmal vielen Dank an alle, die bereit waren Ihre Zeit zu opfern, und speziell CoolTux, der sich viel Zeit genommen hat zu antworten, auch wenns vlt. langsam nervte weils nicht recht ankam !!  Den Thread setze ich auf "Gelöst"

ftsinuglarity

#51
Ergänzung: die Beschreibung von addStateEvent steht auch im Wiki unter:
https://wiki.fhem.de/wiki/Event

Ebenso in der Commandref:
https://192.168.0.150:1973/fhem/docs/commandref_DE.html#addStateEvent

.. hab ich wohl schön überlesen.
Ist alles da, aber manchmal nicht zu finden, wenn ich nicht so recht weiß, wonach ich eigentlich suche, wenn ich etwas spezielles lösen möchte.

Bleibt aber: genauer ins Wiki / Commandref schauen .. meist stehts drin, auch wenn das oft erst im Nachhinein klar wird.

nils_

Zitat von: ftsinuglarity am 10 März 2018, 10:51:40
Ebenso in der Commandref:
https://192.168.0.150:1973/fhem/docs/commandref_DE.html#addStateEvent

also irgendwie funzt dein link nicht  ::) :P
http://commandref.fhem.de/commandref_DE.html#addStateEvent


schön das jetzt alles funktioniert wie du willst, und dein verständnis für Events, regex und damit FHEM "besser" geworden ist. (das meine ich wirklich so!)
viele Wege in FHEM es gibt!

ftsinuglarity

Zitat von: nils_ am 12 März 2018, 10:40:21
also irgendwie funzt dein link nicht  ::) :P
http://commandref.fhem.de/commandref_DE.html#addStateEvent


schön das jetzt alles funktioniert wie du willst, und dein verständnis für Events, regex und damit FHEM "besser" geworden ist. (das meine ich wirklich so!)

Danke und .. Öhm, geht doch? Na egal, da stehts jedenfalls auch.
Hat mir tatsächlich bei weitaus mehr geholfen als nur bei diesem speziellen Problem. War mir vorher nicht so explizit klar, wie wichtig die RegEx ist, ebenso war mir die Syntax nicht wirklich eingängig.
Ganz durch bin ich mit dem Thema anscheinend aber nicht. Entweder sind die Ediplugs ein wenig .. speziell, oder ich übersehe immer noch etwas. (ich versuche noch selbst drauf zu kommen)
Die Edis scheinen ein "on" Event auszulösen, wenn sie nur abgefragt werden. Wenn ich fhem neu starte, mein Schreibtisch-Edi schon an ist, löst er ein Event aus und will nochmal anschalten (also "on" Event). Leider ist nicht ersichtlich bisher, ob das ein "normales" Verhalten der Edis ist, und die das einfach so machen ( ich kanns ja im Notify abfangen), oder ob ich da irgendwo noch nen Dreher habe.
Sauber definiert ist das Notify ja jetzt :D
Also, ganz durch bin ich noch nicht, versuchs aber erstmal selbst drauf zu kommen.

nils_

Zitat von: ftsinuglarity am 12 März 2018, 12:04:10
Danke und .. Öhm, geht doch? Na egal, da stehts jedenfalls auch.
geht doch?? aber nur bei dir bzw. bei jedem dessen fhem unter 192.168.0.150 zu erreichen ist (portnummer muss natürlich auch passen :) )

Zitat von: ftsinuglarity am 12 März 2018, 12:04:10
Die Edis scheinen ein "on" Event auszulösen, wenn sie nur abgefragt werden. Wenn ich fhem neu starte, mein Schreibtisch-Edi schon an ist, löst er ein Event aus und will nochmal anschalten (also "on" Event). Leider ist nicht ersichtlich bisher, ob das ein "normales" Verhalten der Edis ist, und die das einfach so machen ( ich kanns ja im Notify abfangen), oder ob ich da irgendwo noch nen Dreher habe.
sorry da kenne ich die "Edis" nicht, evtl. wird nach dem neustart ein status-request gemacht ?! löst der den event aus...?
aber du bist ja auf der suche danach....
viele Wege in FHEM es gibt!

ftsinuglarity

#55
Zitat von: nils_ am 12 März 2018, 12:10:52
geht doch?? aber nur bei dir bzw. bei jedem dessen fhem unter 192.168.0.150 zu erreichen ist (portnummer muss natürlich auch passen :) )
sorry da kenne ich die "Edis" nicht, evtl. wird nach dem neustart ein status-request gemacht ?! löst der den event aus...?
aber du bist ja auf der suche danach....

Oh, stimmt :D ... der Link war lokal .. nich aufgepasst

Edit: abseits von Verbose Leveln gabs doch noch einen, ich glaube global attr, das nochmal mehr Debug Infos angezeigt hat. Ich finds grad nicht. Hast du ne Ahnung was ich meine und weißt es zufällig?
nochmal Edit: na klar, kaum geschrieben, schon gefunden: stacktrace meinte ich ..  bezieht sich aber nur auf Perl Warnings .. vlt nicht ganz was ich suche.