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

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

Vorheriges Thema - Nächstes Thema

CoolTux


2018-03-08 22:11:38 AMADDevice HandyMarko volume 2
2018-03-08 22:11:45 AMADDevice HandyMarko lastSetCommandState: setCmd_done
2018-03-08 22:11:45 AMADDevice HandyMarko volume: 2

Beispiel. Ich habe hier das volume mit set DEVICE volume 2 gesetzt.
Als erstes der Event für den set Befehl als letztes die Bestätigung das der Befehl erfolgreich am Device angewendet wurde durch Schreiben des neuen Wertes ins Reading.
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

#16
Kurz vorweg ... Man ey Tux, ich nehm mal alles zurück und entschuldige mich. Ich wollte eben wie gewünscht den Eventmonitorausschnitt zusammenstellen.
2 Dinge:
- zum einen ist es, wie ich gerade festgestellt habe, eher ein zuviel in den Logs gewesen wie es aussieht. Ich fange an Gefallen am Monitor zu finden. Also sorry, dein Einwand war vollkommen korrekt.
- das wiederum brachte mich zum 2. Ich habe relative viele Struckturen. Aus irgendeinem Grund werden vor dem Schalten des Musik Device nicht nur "stWZ_Media_Licht" wie von der Funktion aufgerufen, sondern auch andere Struckturen angesprochen, die eigentlich gar nicht beteiligt sein sollten. (so gesehen im EventMonitor) Da ist irgendwo der Wurm drin. Das muß ich mir jetzt mal in Ruhe reinziehen.
Deine beiden letzten Posts ebenso.



ftsinuglarity

#17
Zitat von: CoolTux am 08 März 2018, 22:14:22
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

Ok, verstehe was du meinst.

Mein event-on-change current.*:.*,last_Toggle.*,onoff.*,power.*    ... Wenn ich "set Musik on" aufrufe, wird eigentlich der state gesetzt, richtig ? "state" ist gar nicht in meiner event-on-change-liste. Somit wird wahrscheinlich erst das intern gesetzte "onoff" (Ediplug spezifisch) - (oder irgendeines der anderen aufgeführten Readings) erst als Event ausgewertet und damit das Notify aufgerufen. Auch korrekt ?

Bleibt immer noch die Frage, warum nicht erst das Device angeschaltet wird, egal was letztlich triggert und das Notify aufruft. Sehe ich das denn überhaupt richtig ?

CoolTux

event-on-change current.*:.*,last_Toggle.*,onoff.*,power.*


Eigentlich werden immer nur die Readings durch Komma getrennt eingetragen. Oder .* für alle Readings.Das state Reading ist beim Thema Event eine Ausnahme. Eigentlich sind die Events von Readings so aufgebaut.
DEVICE READING: VALUE
Der Doppelpunkt ist wichtig.

Der state sollte nicht durch set DEVICE on gesetzt werden, sondern durch das auswerten einer Antwort vom Device auf den set Befehl.
Ich sage der Lampe geh an, aber erst wenn sie an geht oder zu mindest der Befehl zum an gehen erfolgreich abgesetzt wurde ändert sich der state.
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

betateilchen

@CoolTux: Popcorn? Oder doch lieber etwas härteres, um ruhig zu bleiben?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ftsinuglarity

Zitat von: marvin78 am 08 März 2018, 20:11:11
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.

Marvin, ich möchte deinen Post nicht unbeantwortet lassen.
Ich hab schon zu oft in Foren die Erfahrung gemacht, das einfach drauflos geantwortet wird, ohne zu lesen, was vorher schon aufgeführt wurde. Das mit dem EventMonitor musste ich gerade mit mir selbst korrigieren, Tux hatte vollkommen recht. Die sub .. das beliefe sich mit den entsprechenden Unterfunktionen auf mehrere hundert Zeilen Code .. das will ich niemandem antun, und tat aus meiner Sicht nichts zur Sache. Auch wenn ich eine andere kurze Funktion aufrufe, habe ich den gleichen Effekt. Es hatte also nichts mit der Funktion an sich zu tun. Das hatte ich so ähnlich oben schon erwähnt glaub ich, deswegen ... trau mir auch ein wenig Verstand zu, sinnvolles und sinnloses voneinander trennen zu können.  Wobei ich mich da auch total irren kann, wie man mit dem EventMonitor sieht :D ...
Ich geb mir Mühe, alles relevante zu posten. Diese Art zu programmieren ist allerdings etwas .. anders mit all seinem getriggere, warten auf  Ereignisse etc. Dewegen verschätze ich vlt., was benötigt wird.
Also, ich sehe zu das ein wenig transparenter zu machen und gezielter auf Fragen zu reagieren ... ist auch ein lernprozess ;)

ftsinuglarity

Zitat von: betateilchen am 08 März 2018, 22:57:24
@CoolTux: Popcorn? Oder doch lieber etwas härteres, um ruhig zu bleiben?

Hab mich doch entschuldigt, Tux hatte ja recht. Da war ich zu verbohrt.

ftsinuglarity

Man, so'n Spruch macht mir ja echt n schlechtes Gewissen. Ich scheine ein Talent für ... aufreizende Fragen oder Antworten zu haben. Tut mir echt leid, ist das letzte was ich möchte. Ihr macht hier tolle Arbeit, sage ich nicht zum ersten Mal. So ein Feedback hab ich noch nirgends erlebt, sogar wenns Zeit fürs Popcorn wird ;) ..

ftsinuglarity

Zitat von: CoolTux am 08 März 2018, 22:50:35
event-on-change current.*:.*,last_Toggle.*,onoff.*,power.*
Eigentlich werden immer nur die Readings durch Komma getrennt eingetragen. Oder .* für alle Readings.
Shit, richtig, ist noch eine meiner ersten Definitionen überhaupt :D
Korrigiert zu: event-on-change current,last_Toggle,onoff,power

Zitat von: CoolTux am 08 März 2018, 22:50:35
Das state Reading ist beim Thema Event eine Ausnahme. Eigentlich sind die Events von Readings so aufgebaut.
DEVICE READING: VALUE
Der Doppelpunkt ist wichtig.

Der state sollte nicht durch set DEVICE on gesetzt werden, sondern durch das auswerten einer Antwort vom Device auf den set Befehl.
Ich sage der Lampe geh an, aber erst wenn sie an geht oder zu mindest der Befehl zum an gehen erfolgreich abgesetzt wurde ändert sich der state.

Okay .. neue Sichtweise für mich.  "set DEVICE on" löst dann an sich gar kein Event aus, sondern erst "state", wenn es seinen Zustand wechselt.


ftsinuglarity

Zitat von: ftsinuglarity am 08 März 2018, 22:25:56
..
- das wiederum brachte mich zum 2. Ich habe relative viele Struckturen. Aus irgendeinem Grund werden vor dem Schalten des Musik Device nicht nur "stWZ_Media_Licht" wie von der Funktion aufgerufen, sondern auch andere Struckturen angesprochen, die eigentlich gar nicht beteiligt sein sollten. (so gesehen im EventMonitor) Da ist irgendwo der Wurm drin. Das muß ich mir jetzt mal in Ruhe reinziehen.

Habs mir in Ruhe reingezogen, und ist doch korrekt.
Das ist das Log vom EventMonitor vom Bestätigen des Deviceschalters für "Musik" webcmd "on" in der Web-UI

2018-03-08 23:33:21 structure stWZ_Media_Licht on
2018-03-08 23:33:22 structure stWZ off
2018-03-08 23:33:22 structure stWZ_Licht off
2018-03-08 23:33:22 structure stWZ_Licht_Warm on
2018-03-08 23:33:22 structure st_Alle_Geraete off
2018-03-08 23:33:22 structure st_Alle_Lichter off
2018-03-08 23:33:22 structure st_Alle_Lichter_Excl_Pathlicht off
2018-03-08 23:33:22 IT WZ_Licht_Stromleiste_Sofa on
2018-03-08 23:33:22 structure stWZ off
2018-03-08 23:33:22 structure stWZ_Licht off
2018-03-08 23:33:22 structure stWZ_Licht_Warm on
2018-03-08 23:33:22 structure stWZ_Schreibtisch_Licht on
2018-03-08 23:33:22 structure st_Alle_Lichter off
2018-03-08 23:33:22 IT WZ_Licht_bei_Terrarium on
2018-03-08 23:33:22 structure stWZ off
2018-03-08 23:33:22 structure stWZ_Geraete off
2018-03-08 23:33:22 structure st_Alle_Geraete off
2018-03-08 23:33:22 structure st_Alle_Geraete_Excl off
2018-03-08 23:33:22 structure stWZ_Geraete_Excl off
2018-03-08 23:33:22 structure stWZ_Media off
2018-03-08 23:33:22 EDIPLUG Musik on


Hier wurden Struckturen angefasst, die ich eigentlich nicht aufgerufen hatte. Dachte ich. Ich hatte per Notify eine Funktion aufgerufen, die nur
fhem("set stWZ_Media_Licht on")
enthielt.  War aber doch richtig.
Die Strucktur "stWZ_Media_Licht" selbst und all ihre in der Strucktur enthaltenen Lampen stecken auch in den Struckturen, die oben abgearbeitet wurden. Was im EventMonitor zu sehen ist, entsteht durch die Definition der structs. (Wenn ein Gerät im Struct "off" ist, ist die ganze Strucktur "off" zum Beispiel)

Was wird da eigentlich an die Struckturen weitergegeben ? Ein richtiges "set structur_test off" würde ja schalten. Das passiert aber nicht.  Sonst säße ich nach dem Anschalten der Anlage im Dunkeln :D
2018-03-08 23:33:22 structure st_Alle_Lichter off


ftsinuglarity

#25
Zitat von: CoolTux am 08 März 2018, 22:14:22
... 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
Sieht fast so aus ?

2018-03-08 23:33:22 EDIPLUG Musik on.. wird zuletzt aufgerufen. Irgendein Event ruft das Notify anscheinend schon vorher auf. Davon ist im EventMonitor allerdings nichts zu sehen, auch nicht im Log.
(Was wäre hier der Event des Schaltbefehls ?)

Device "Musik" kann ein Event durch :
event-on-change current,last_Toggle,onoff,power
erzeugen.

Das Notify "nMusik" ist mit RegEx so definiert: (hoffe das meinstest du mit RegEx CoolTux)
defmod nMusik notify Musik:(on|off|error) {media_wz($EVENT);;}
Das Notify dürfte somit nur auf das Event "on" reagieren, wenn das Reading "onoff" im Device Musik auf "on" gesetzt wird. (Die anderen Readings haben komplett andere Werte)
Auch auf "state" sollte das Notify nicht reagieren!?
So hatte ich das bisher verstanden.

Hier nicht auf "state" zu reagieren ist ein special der Ediplugs. Die schreiben in den "state" sowas hier:
ON / 9.36 W / 0.1681 A. Deswegen wird das Reading "onoff" ausgewertet.


Edit: die angepasste RegEx von "nMusik" schaltet jetzt wie sie soll, das war es tatsächlich CoolTux. Danke!!
defmod nMusik notify Musik:onoff:.* {media_wz($EVTPART1);;}
Ich glaube, ich sollte da mal ein paar Devices durchgehen .. ähm ..

Was ist dieses ominöse " Event des Schaltbefehls" ?. Anders gefragt ist mir nicht ganz klar, WAS ich da eigentlich abgefangen habe. Ich hab die RegEx eigentlich nur deutlicher definiert und damit irgendwas draußen gelassen. Mir ist nur noch nicht klar was.

Danke für eure Nerven.

CoolTux

Guten Morgen,

Zu erst einmal, schön das Du den Fehler weg bekommen konntest.


Zitat von: ftsinuglarity am 09 März 2018, 00:45:52
Das Notify "nMusik" ist mit RegEx so definiert: (hoffe das meinstest du mit RegEx CoolTux)
defmod nMusik notify Musik:(on|off|error) {media_wz($EVENT);;}
Das Notify dürfte somit nur auf das Event "on" reagieren, wenn das Reading "onoff" im Device Musik auf "on" gesetzt wird. (Die anderen Readings haben komplett andere Werte)
Auch auf "state" sollte das Notify nicht reagieren!?
So hatte ich das bisher verstanden.

Wie das gelesen hatte wusste ich was Du eigentlich wolltest und das Deine Regex nicht zur Aussage passt. Ich hatte ja versucht es Dir schon ein paar Posts weiter oben zu erklären.
Allerdings hast Du Recht mit der Aussage das die Regex nicht hätte früher anspringen dürfen. Um das nun ganz genau zu klären müsste man sich die Timestamps im Device, im Notify und im Eventmonitor anschauen.


Noch mal kurz
Readings haben in der Regel folgenden Event (kurz gefasst)
DEVICE READING: VALUE

Daraus ergibt sich eine Regex
DEVICE:READING:.VALUE

Um nun auf alle VALUES zu reagieren
DEVICE:READING:.*


Die große Ausnahme bildet das state Reading. Hier ist es eigentlich
DEVICE VALUE
Was ja zu Deiner ersten Deiner Regex passen sollte
DEVICE.(VALUE1|VALUE2)

Was da nun genau schief lief damit da noch mehr passiert kann ich Dir leider nicht sagen. Möglich wären nicht sichtbare Sonderzeichen durch das direkte editieren der Konfigdatei. Aber das bringt zu 99,9 Prozent eher eine Fehlermeldung.




Grüße
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

Wzut

Zitat von: CoolTux am 08 März 2018, 22:50:35
Der state sollte nicht durch set DEVICE on gesetzt werden, sondern durch das auswerten einer Antwort vom Device auf den set Befehl.
Ich sage der Lampe geh an, aber erst wenn sie an geht oder zu mindest der Befehl zum an gehen erfolgreich abgesetzt wurde ändert sich der state.
Das EDIPLUG Modul macht das auch so, es wird in der Callback Funktion des http Aufrufs die XML Antwort des Device ausgewertet und zusammen mit den anderen Readings in einem  readingsBulkUpdate Block gesetzt. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

marvin78

Zitat von: ftsinuglarity am 08 März 2018, 23:01:54
Marvin, ich möchte deinen Post nicht unbeantwortet lassen.
Ich hab schon zu oft in Foren die Erfahrung gemacht, das einfach drauflos geantwortet wird, ohne zu lesen, was vorher schon aufgeführt wurde. Das mit dem EventMonitor musste ich gerade mit mir selbst korrigieren, Tux hatte vollkommen recht. Die sub .. das beliefe sich mit den entsprechenden Unterfunktionen auf mehrere hundert Zeilen Code .. das will ich niemandem antun, und tat aus meiner Sicht nichts zur Sache. Auch wenn ich eine andere kurze Funktion aufrufe, habe ich den gleichen Effekt. Es hatte also nichts mit der Funktion an sich zu tun. Das hatte ich so ähnlich oben schon erwähnt glaub ich, deswegen ... trau mir auch ein wenig Verstand zu, sinnvolles und sinnloses voneinander trennen zu können.  Wobei ich mich da auch total irren kann, wie man mit dem EventMonitor sieht :D ...
Ich geb mir Mühe, alles relevante zu posten. Diese Art zu programmieren ist allerdings etwas .. anders mit all seinem getriggere, warten auf  Ereignisse etc. Dewegen verschätze ich vlt., was benötigt wird.
Also, ich sehe zu das ein wenig transparenter zu machen und gezielter auf Fragen zu reagieren ... ist auch ein lernprozess ;)

Du musst einfach nur die Fragen beantworten und alle Infos liefern. Das ist nicht schwer. Infos selbst filtern ist NIE eine gute Idee, auch nur Teile von subs, Definitionen oder Code zu posten, ist keine gute Idee. Du postest hier in Anfängerfragen, also kannst du immer davon ausgehen, dass jemand, der bestimmte Informationen zur möglichen Lösung haben möchte, es besser beurteilen kann, welche Infos benötigt werden. Das ist nicht Teil eines Lernprozesses, sondern eine einfache logische Folge. Hier gibt es auch keine Abhängigkeit von deinem Kenntnisstand.  Es ist im Grunde egal, ob du dir zutraust, selbst zu entscheiden, was wichtig ist, warum das so ist, hast du hier gesehen. Du sagst selbst, dass dir Kenntnisse fehlen, also gehe davon aus, dass jemand der dir helfen möchte, diese hat und aus gutem Grund nach etwas fragt. Davon auszugehen, dass der Helfer deinen Post nicht richtig gelesen hat, ist erstmal falsch. Das heißt nicht, dass es nicht sein kann, denn es kommt vor, davon auszugehen ist aber falsch.

Die Infos, die du hier lieferst, sind aus meiner Sicht noch immer zu fragmentiert. Deine Antwort liegt aber vermutlich im state.

nils_

ich will gar nicht den ganzen thread o.ä. auseinandernehmen.
deinen "Fehler" hast du ja gefunden, oder?

aber das hier
Internals:
   CFGFN      ./configs/wz.cfg

ist nicht unbedingt die bevorzugte bearbeitungsmethode für deine .cfg
das händische editieren kann zu fehlern führen, die dich zur verzweiflung treiben werden:)
viele Wege in FHEM es gibt!