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

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

Vorheriges Thema - Nächstes Thema

ftsinuglarity

Hallo liebe Gemeinde,

Ich habe ein Ediplug Stromschalter, an dem eine Musikanlage hängt.
defmod Musik EDIPLUG 192.168.0.144

Das Device "Musik" hat ein Notify "nMusik", und ruft darüber eine per *.pm definierte Funktion "media_wz($EVENT)" auf.
defmod nMusik notify Musik:(on|off|error) {media_wz($EVENT);;}

Das funktioniert an sich sehr gut. Nur ist es so, das wenn ich das Gerät (auch direkt in der Web-ui) anschalte, das zuerst die Funktion media_wz durchlaufen wird, und erst danach das eigentliche Device, also der Ediplug und damit die Anlage, geschaltet wird.
Das führt dazu, das sich nach Knopfdruck erst nach einigen Sekunden etwas tut, sprich die Anlage angeht. Das ist ein wenig irritierend, da ich nicht weiß, ob der Knopfdruck von fhem registriert wurde und ich jetzt einfach warten muß (ca 4 Sekunden), oder nichts ankam und nocheinmal gedrückt werden müsste.

Die Frage: sollte es nicht so sein, daß das Device eingeschaltet wird, und erst DANACH das Notify durch das Device-Event angetriggert wird. Also sprich erst wird die Anlage eingeschaltet, danach dann die Funktion aufgerufen, die noch einiges mit den Lichtern und ähnlichem Drumherum macht.
Hab ich wieder was noch nicht verstanden ? :)

ftsinuglarity

#1
achso .. wenn ich das Notify disable, wird die Anlage sofort geschaltet. Liegt eindeutig am ausgeführten Notify, das so spät geschaltet wird.
Die Verzögerung durch das An-/Ausschalten des Ediplugs an sich hält sich bei reinem Schalten bei ungefähr einer halben Sekunde.

Alle anderen Aufrufe, zB durch die Fenbedienung, schalten letztlich direkt das Device "Musik". Das läuft blitzschnell bis zum Device durch, wie ich im Log erkennen kann. Da behindert auch nichts.
Den gleichen Verzögerungseffekt habe ich auch, wenn ich das Device direkt im Web-UI schalte.

Der eigentlich Device Aufruf, der Ablauf der Funktion .. .all das sieht gut aus. Da wird auch nichts doppelt aufgerufen/angetriggert oder ähnliches. (aus den Logs ersichtlich)

CoolTux

Zeig bitte die Funktion. Kann es sein das dort blockierend Aufrufe drin sind?
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

Da wirds ein wenig komplexer. Nur die Funktion würde nicht reichen, weil die noch andere aufruft. Es wird nicht nur Licht geschaltet...es wird auch gecheckt ob die Netzwerkgeräte an sind, online sind, ob Internet an ist und entsprechend reagiert  ...solche Sachen. Das kann ich hier nicht alles reinhängen.
Non blocking sleeps (also fhem ("sleep 2;nochwas") sind enthalten und vlt hab ich noch was übersehen.
Aber trotzdem, sollte nicht ERST das Device geschaltet, und durch dessen erzeugtem Event erst das Notify auslösen? Was in den Funktionen steht sollte doch dann erst nach dem Schalten relevant werden. Oder was verchecke ich hier?


CoolTux

Im Normalfall gebe ich Dir Recht. Kommt aber immer darauf an wie der Entwickler das Modul und vor allem das setzen der Readings umgesetzt hat.
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

CoolTux

Mach mal den Eventmonitor auf und schaue welche Events es gibt wenn du schaltest.
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

#6
Sorry, aber ich sagte schon, das ich in den Logs alles überprüft habe. Das läuft rund, nur eben "falsch" herum. Ich wüsste nicht, was mir der Eventmonitor zeigen sollte, das ich in den Logs nicht viel ausführlicher sehen könnte.
Wie ist denn die eigentliche Frage zu beantworten? Sollte es nicht anders herum laufen wie oben schon mehrfach beschrieben? Ansonsten habe ich wohl grundlegend etwas falsch verstanden wie die Event Weitergabe funktioniert.

Also: Schalten des Device Musik. Das schalten löst das Event "on" aus, und triggert damit das Notify "nMusik". Erst dann kann ausgeführt werden, was im Notofy steht. So mein bisheriges Verständnis.  Falsch?

CoolTux

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

#8
Hm, aver wie kann es dann sein, das es bei mir anders läuft? Das wäre doch dann eigentlich nixht möglich.  Confused  :o

Sorry CoolTux, wollte dich nicht anpampen. Nur bringt mir eine Antwort nichts, die mir sagt schau in den Eventmonitor, wenn ich vorher schon meinte, ich schaue in die Logs. Verstehst'de ? Nicht bös sein.

Ich hab inzwischen mal die Funktion nur einen anderen Aktor schalten lassen und ein setreading setzen lassen. Das gleiche Ergebnis. Da blockiert garantiert nichts. Ich checks nicht. Was ist da los ?

marvin78

Wenn dir jemand sagt, du sollst in den Eventmonitor schauen, damit du Anhaltspunkte zur Problemlösung beitragen kannst, dann hat der Helfer sicher einen guten Grund für diese Bitte. Da du hier schon 2 mal die Angabe von tatsächlich benötigten Infos verweigert hast (die sub wäre gut), ist es schwer, noch Leute zu finden, die dir helfen möchten. Denn es ist  Raterei. Das macht niemand gerne.

Hast du mal den Modulautor gefragt? Hast du mal das Device durch einen dummy ersetzt und geschaut, ob der Effekt der gleiche ist?

So das war mein Beitrag zum Ratespiel. Ich bin gespannt, ob du Hilfe möchtest oder nicht.

CoolTux

Was Du siehst kann was anderes sein was ich oder andere sehen.

Ein list vom Device laso dem Plug und eine Ausschnitt aus dem Eventmonitor wärend des Schaltzustandes kann anderen eventuell mehr zeigen.
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

Ist okay. Wollte euxh nur nicht mit unnltigem Zeugs zuschütten, das nichts zur sache tut. Bin noch unterwegs und mach das gleich von zu haus

ftsinuglarity

#12
Ich poste jetzt mal eine Verkürzte Version der Funktion. Sie macht jetzt nichts weiter, als ein Struct von Lampen einzuschalten. Ich will ja nur die Zeitliche Abfolge haben.

Das ganze sieht dann so aus:
Ediplug Device Musik -> list Musik

Internals:
   .attreocr-thresholdcurrent 0.0055
   .firststart 0
   CFGFN      ./configs/wz.cfg
   DEF        192.168.0.144
   ERROR      read from http://192.168.0.144:10000 timed out
   ERRORCOUNT 0
   ERRORTIME  2018-03-08 00:35:33
   INTERVAL   900
   LASTCMD    power
   MODEL      SP2101W
   NAME       Musik
   NR         483
   POWER      ON
   STATE      State: on | akt. Verbrauch: 0.07 W | Monatsverbrauch: 1.854 kWh
   TYPE       EDIPLUG
   addr       http://192.168.0.144:10000
   auth       1
   buf       
   code       200
   compress   1
   conn       
   data       '<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><NOW_POWER/></CMD></SMARTPLUG>'
   displayurl http://admin:903oXutRg@192.168.0.144:10000/smartplug.cgi
   host       192.168.0.144
   httpheader HTTP/1.0 200 OK
Content-Type: application/xml; charset=utf-8
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 572
Connection: close
Date: Thu, 08 Mar 2018 22:55:21 GMT
Server: lighttpd/1.4.31-devel-299
   hu_blocking 0
   hu_filecount 603
   hu_port    10000
   hu_portSfx :10000
   loglevel   4
   path       /smartplug.cgi
   port       10000
   protocol   http
   pwd        903oXutRg
   redirects  0
   timeout    10
   url        http://admin:903oXutRg@192.168.0.144:10000/smartplug.cgi
   user       admin
   READINGS:
     2018-03-08 21:55:12   current         0.0055 A
     2018-03-08 21:55:12   last_Toggle_Time 22:55:18 08.03.2018
     2018-03-08 16:00:33   oldstate        off
     2018-03-08 21:55:12   onoff           on
     2018-03-08 21:55:12   power_day       0.130 kWh
     2018-03-08 21:55:12   power_month     1.854 kWh
     2018-03-08 21:55:12   power_now       0.07 W
     2018-03-08 21:55:12   power_week      1.215 kWh
     2018-03-08 21:55:12   state           ON / 0.07 W / 0.0055 A
   helper:
     current    0.0055
     power      0.07
     list:
       
       
       
       
       
       
       
       
   sslargs:
Attributes:
   alias      Musik Ediplug
   devStateIcon ON.*:ios-on-green OFF:ios-off on.*:ios-on-green
   event-on-change-reading current.*:.*,last_Toggle.*,onoff.*,power.*
   group      Multi-Media
   icon       it_television
   interval   900
   model      SP2101W
   password   903oXutRg
   read-only  0
   room       - Strommessung,- Wohnzimmer
   sortby     1
   st_type_devices st_Alle_Geraete
   st_type_devices_map ON.*:on OFF:off
   st_type_mix st_Alle_Geraete_Excl
   st_type_mix_map ON.*:on OFF:off
   st_type_room stWZ
   stateFormat State: onoff | akt. Verbrauch: power_now | Monatsverbrauch: power_month
   timeout    10
   user       admin
   userattr   st_type_devices st_type_devices_map st_type_mix st_type_mix_map st_type_room st_type_room_map structexclude
   verbose    5



Das Notify nMusik:
Internals:
   .COMMAND   {media_wz($EVENT);}
   CFGFN      ./configs/wz.cfg
   DEF        Musik:(on|off|error) {media_wz($EVENT);}
   NAME       nMusik
   NR         490
   NTFY_ORDER 50-nMusik
   REGEXP     Musik:(on|off|error)
   STATE      2018-03-08 21:55:09
   TYPE       notify
   READINGS:
     2018-03-08 15:07:08   state           active
Attributes:
   icon       edit_settings
   room       - Notify,- Wohnzimmer
   userattr   st_type_mix st_type_mix_map structexclude



Die Funktion media_wz :
sub media_wz{
    Log 4, "##########################";
    Log 4, "media_wz(@_) aufgerufen";

    fhem("set stWZ_Media_Licht on");
    return 1;
}



Das gleiche Ergebnis: Die Lampen werden zuerst eingeschaltet, danach erst Musik.

In den Eventmonitor habe ich nochmal geschaut. Beim besten Willen, ich sehe da wesentlich weniger als in den Logfiles.
Das mache ich zB mit:
tail -f log/fhem-2018-03.log



ftsinuglarity

Zitat von: CoolTux am 08 März 2018, 20:11:19
Was Du siehst kann was anderes sein was ich oder andere sehen.
Da kann ich dir nicht widersprechen .. hast Recht


Der Logausschnitt kommt gleich

CoolTux

Der Eventmonitor gibt alle Events wieder. Das setzen eines Readings macht nicht alleine ein Event. Auch ein set Befehl kann ein Event auslösen. Möglich das deine RegEx nicht auf das Reading reagiert, also der Bestätigung das das Device geschalten hat sondern auf den Event des Schaltbefehls
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