FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ftsinuglarity am 08 März 2018, 16:11:20

Titel: [Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 16:11:20
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 ? :)
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 16:17:06
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)
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 16:27:12
Zeig bitte die Funktion. Kann es sein das dort blockierend Aufrufe drin sind?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 16:53:13
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?

Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 17:54:12
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 17:57:40
Mach mal den Eventmonitor auf und schaue welche Events es gibt wenn du schaltest.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 19:40:55
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?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 19:42:38
Ja Du hast Recht.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 19:47:58
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 ?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 20:11:19
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 20:49:39
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
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 22:02:48
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


Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 22:09:02
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
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 08 März 2018, 22:16:49

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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 22:25:56
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.


Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 22:42:56
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 ?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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.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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: betateilchen am 08 März 2018, 22:57:24
@CoolTux: Popcorn? Oder doch lieber etwas härteres, um ruhig zu bleiben?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 23:01:54
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 ;)
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 23:04:07
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 23:13:26
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 ;) ..
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 08 März 2018, 23:34:15
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.

Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 00:02:45
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

Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 00:45:52
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 09 März 2018, 05:58:26
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
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: Wzut am 09 März 2018, 07:50:26
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. 
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: marvin78 am 09 März 2018, 08:50:32
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: nils_ am 09 März 2018, 10:59:37
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:)
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 12:54:05
Vielen Dank für Eure Antworten und Hinweise.
Eins nach dem anderen ... :)
Zitat von: nils_ am 09 März 2018, 10:59:37
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:)

Das Thema der direkten Bearbeitung hatte ich ziemlich am Anfang schon einmal ausführlichst hier diskutiert. Damit ging gleich die Popcorntüte durch die Hände von Rudlof/Tux und betateilchen (sorry dafür)
Hat mir nochmal ein paar Vor und Nachteile gezeigt, ich hab die Vorteil der Guibearbeiung durchaus schätzen gelernt.  Seitdem arbeite ich überwiegend damit, aber nicht ausschließlich. Es gibt ein paar Details (umbennenunungen zb), die über die Oberfläche nicht gemacht werden können (weil sich nicht alles betroffene mit umbennent)
Um dann weiter anzupassen muß ich wissen wo was steht.
Zum Umbenennen hab ich mir ein Script dazu gebastelt, was in den betreffenden Dateien sucht und ersetzt. Inclusive der *pm Dateien, ich lagere fast alles aus. Da käme die UI überhaupt nicht ran normalerweise ... Haken ans Umbennen Problem.

Ich hab grad spaßenshalber mal die Zeilen nur in den cfg's gezählt: (ohne Leerzeilen und Kommentare, der reine Code)
cat *cfg |sed /^$/d|grep -v '#' |wc -l
2349 Zeilen
Das ist ohne fhem.cfg. Wenn ich das nicht sinnvoll aufteile, wirds extrem unübersichtlich (und ja, ist zusätzliche Arbeit und kann auch mal einen Reihenfolgenfehler geben .. muß einem klar sein was passieren kann und wo man dann sucht => Erfahrung.
Also ich fahre sehr gut damit, Fehler sind äußerst selten geworden. Für mich passt das perfekt. Zumal wie gesagt einiges mit UI nicht so vollkommen funkioniert. (Ich gebe gern auch mal ein konkretes Beispiel wenn gewünscht, müsste ich aber erst nachstellen)

Ein Sonderfall für die explizite Auslagerung in eine cfg sind Homematic Geräte.  Die haben die Eigenart, wenn ich den fhem-server starte, der RPC Server (vermeintlich) nicht erreichbar ist, fhem mal eben die konfigurierten Homematic Geräte einfach rausschmeißt. Wehe dem, der dann aus Versehen "save" klickt.
Also hab ich eine cfg nur mit dem Homematic Kram, der taucht sonst nirgends auf. Wenn der fhem-dienst startet, prüft er, ob der RPC erreichbar ist. Wenn nicht, includiert er die homematic.cfg nicht und erzeugt dafür einen Timer, der alle 10 Minuten schaut, ob der RPC erreichbar ist. Ist er das, wird die homematic.cfg includiert und fhem neu gestartet.
So reagiere ich jetzt dynamisch. Das geht nur! über eine ausgelagerte cfg.
Also .. es kann auch durchaus richtig sinnvoll sein auszulagern.
Vielleicht gibt es noch eine elegantere Lösung. So funktionierts erstmal gut, kümmer ich mich später drum, es gibt grad zu viele andere Baustellen.




Edit: Das Umbenennen per Script soll keine Aufforderung zur manuellen Bearbeitung sein, in welcher Form auch immer!!
Gerade am Anfang ist die Web-Ui wirklich zu empfehlen, sonst funktionert ganz schnell mal gar nichts mehr, wenn man sich aus Versehen grob Vertut. Ist mir zumindest nicht nur einmal passiert. Wenn ihr es partou nicht lassen könnt, bitte immer! ein (fhem-Voll)Backup vorher, sonst kanns schnell selbstverschuldet frustig werden. Ich spreche aus leidiger Erfahrung. Mittlerweile mache ich das meiste auch über die Oberfläche, weils normalerweise komplett reicht und als Bonus ne Menge Fehler abfängt.
Das immer wieder darauf hingewiesen wird, NICHT manuell zu bearbeiten sollte ernst genommen werden.
Ich bin da auch immer unbelehrbar, dadurch war es aber auch einen unnötig harte Schule, die mich viel Zeit gekostet hat und die Nerven anderer hier im Forum.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 13:23:52
Zitat von: marvin78 am 09 März 2018, 08:50:32
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.

Ersteinmal .. du hast prinzipiell recht, mit guter Begründung!
>  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.
Nehme ich mir zu Herzen. Ich hatte Anfängerfragen absichtlich ausgewählt, da ich dachte, der Fehler wäre leicht zu fixen und was gundsätzliches, was ich einfach nur noch nicht gecheckt habe.
Ich hör mal auf da Vorrauszudenken und poste im richtigen Abteil.

> ... 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 ... Die Infos, die du hier lieferst, sind aus meiner Sicht noch immer zu fragmentiert.
Ist Nachvollziehbar. Auch da versuch ich das mal koordinierter mit list's und direkteren Antworten.

> Es ist im Grunde egal, ob du dir zutraust, selbst zu entscheiden, was wichtig ist, warum das so ist, hast du hier gesehen.
Da widerspreche ich dir, auch wenn du im Kern recht hast. Ich nehme mal das Beispiel sub's. Was nützt es, mehrere 100 Zeilen Code des subs zu posten, wenn ich feststelle, das ich auch einen komplett andere Funktion aufrufen kann und der gleiche "Fehler" passiert. Somit liegt es eindeutig nicht an der sub. Ich hätte euch aber mit ner Menge Code zugeballert, der nix zu Sache beiträgt. Da haben wir alle besseres zu tun, als uns durch Code zu wühlen, der nicht mal was mit der Ursache zu tun hat.
Das ist denke ich schon eine Entscheidung, (natürlich mit kurzer Begründung), die ich treffen kann.


Abgesehen von diesem Einwand, ich verstehe deine Einwände, finde sie nachvollziehbar und werde mich versuchen mehr daran zu halten. Dank dir.


Edit : Oh, das noch :
>  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.
Bevor das falsch verstanden wird: Ich meinte das ich in anderen Foren oft die Erfahrung gemacht habe, das Leute ohne zu lesen einfach irgendwas geantwortet haben. Und das bei einigen Antworten hier mir schnell mal der selbe Gedanke kommt (zB. EventMonitor vs Logs) . Deswegen meine "Verweigerungshaltung" ... hat sich schönerweise als mein Fehler rausgestellt. Schön im Sinne von: Nein, es war keine sinnlose Frage nach dem EventMonitor und hier wird gelesen.

Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 14:21:17
Zitat von: Wzut am 09 März 2018, 07:50:26
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.

Mal zurück zum eigentlichen "Problem" ;)
Danke für die Spezifizierung Wzut. Das bei den Ediplugs zumindest eine Rückantwort abzuwarten ist, und das auf die zeitliche Abfolge einen Einfluß hat, dachte ich mir dann im Laufe der Ausführungen hier.
Von den IT's kommt im Gegenbeispiel ja nix. Da wird gesendet, obs ankommt weiß man nicht, es gibt keine Antwort. Somit muß auf die Antwort auch nicht gewartet werden. Sollte dann ein wenig schneller durchlaufen.




Zitat von: CoolTux am 09 März 2018, 05:58:26
Guten Morgen,
Zu erst einmal, schön das Du den Fehler weg bekommen konntest.

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


Wenn ich dich dazu nochmal mit ein, zwei Fragen nerven darf... das Problem ist zwar gefixt, aber ich verstehe immer noch nicht so ganz warum.
Ich gehe es mal von vorn, mit deiner Erläuterung an.

>Readings haben in der Regel folgenden Event (kurz gefasst)
> DEVICE READING: VALUE
Check

>Daraus ergibt sich eine Regex
> DEVICE:READING:.VALUE
Warum der Punkt nach :. ?

> Um nun auf alle VALUES zu reagieren
> DEVICE:READING:.*
Check. Hier gehört der Punkt zur Perl-Wildcard: .* => entspricht allen Values von Reading: 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) 
Check. Prinzipiell. (und wieder der Punkt nach DEVICE?) Hier wird auf "state" "on/off" reagiert. 
Ich hätte schreiben müssen:
> DEVICE:onoff:*
Wie wäre das in deiner Notation?  DEVICE:onoff:(VALUE1|VALUE2) ? (noch nicht probiert)

Bis hierher ist mir der Punkt unklar. Die korrekte Notation ist mir auch nicht wirklich zugänglich. Irgendwas macht da noch nicht richtig klick im Kopf, obwohls ersteinmal funktioniert.
Auch ist mir unklar, warum das Notify überhaupt reagiert hat. Das Device "Musik" hat doch eindeutig definiert, was als Event gilt:
event-on-change current,last_Toggle,onoff,power

"state" ist hier nicht definiert. Somit sollte das Event von "state" nicht beim Notify ankommen, und Musik:(on|off|error) hätte ohne Event eigentlich gar nichts machen dürfen.

Eine Erklärung für mich wäre, das "state" auch in der Hinsicht ein Ausnahmefall ist und einfach immer ein Event schickt, egal ob definiert oder nicht.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: marvin78 am 09 März 2018, 14:23:39
Das ist ein Regex. Der Punkt steht für ein beliebiges Zeichen (auch Leerzeichen). Enthält das Event ein Leerzeichen hinter dem Doppelpunkt regext man das am besten mit dem Punkt (oder \<LEER>).

Ich empfehle:

https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 14:34:01
Zitat von: ftsinuglarity am 09 März 2018, 00:45:52
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.

Um mir meine eigene Frage zu beantworten: Wenn ich das jetzt mal gecheckt habe, habe ich damit "state" außen vor gelassen.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: CoolTux am 09 März 2018, 14:39:00
Zitat von: ftsinuglarity am 09 März 2018, 14:21:17
"state" ist hier nicht definiert. Somit sollte das Event von "state" nicht beim Notify ankommen, und Musik:(on|off|error) hätte ohne Event eigentlich gar nichts machen dürfen.

Eine Erklärung für mich wäre, das "state" auch in der Hinsicht ein Ausnahmefall ist und einfach immer ein Event schickt, egal ob definiert oder nicht.

Ein Event wird so gut wie immer erzeugt, es sei denn der User unterdrückt es.


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


Musik:(on|off|error)

Deine Regex hätte hier nicht triggern dürfen, hat sie aber auch nicht. Zu mindest nicht auf das Event zum schreiben des Readings state.
Ich bin der festen Meinung das es auf den Event des set Befehles reagiert hat. Und der kommt noch bevor überhaupt der Code im Modul die Verbindung zum Endgerät aufbaut. So wie mein Beispiel mit dem Volume.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 14:45:06
Zitat von: marvin78 am 09 März 2018, 14:23:39
Das ist ein Regex. Der Punkt steht für ein beliebiges Zeichen (auch Leerzeichen). Enthält das Event ein Leerzeichen hinter dem Doppelpunkt regext man das am besten mit dem Punkt (oder \<LEER>).

Ich empfehle:

https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/ (https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/)

Danke erstmal für den Link. Mit Perl hab ich zum ersten Mal so direkt hier in fhem zu tun. Gute Tuts sind mir sehr willkommen, ich kratze da immer noch an der Oberfläche.

Klar soweit ist die Perl RegEx:
Punkt . = ein beliebiges Zeichen oder auch kein Zeichen
Punkt Stern .* = ein beliebiges Zeichen, beliebig oft wiederholt... sprich alles was gibt

Dann dient der Punkt als "Sicherheitsplatzhalter" , falls es vor dem eigentlichen Wert noch ein Leerzeichen oder ähnliches gibt. Mehr heist's nicht. Korrekt ?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: marvin78 am 09 März 2018, 14:57:23
Nicht ganz. . steht immer für ein Zeichen. Er steht nicht für kein oder ein Zeichen.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 15:09:24
Zitat von: marvin78 am 09 März 2018, 14:57:23
Nicht ganz. . steht immer für ein Zeichen. Er steht nicht für kein oder ein Zeichen.

Oh. Stimmt. Gerade in deinem Tut nachgelesen.
> Marius .*Osterhase 
> Die im Einzelnen bedeutet: "Marius", danach ein Leerzeichen gefolgt von einem beliebigen Zeichen (dafür steht der Punkt!) beliebig oft (also evtl. auch gar keins) und anschließend der Nachname. Das trifft auf
> "Marius Osterhase" genau so wie auf "Marius Müller Osterhase".

"Gar keins" bezieht sich also nur auf die kombinierte Verwendung mit Wildcard .*

Aber dann macht doch der Punkt als allg. Definiton keinen Sinn ?
DEVICE:READING:.VALUE
Nicht jedes Reading hat ein Leerzeichen an erster Stelle im Value
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 15:16:31
Zitat von: CoolTux am 09 März 2018, 14:39:00
Ein Event wird so gut wie immer erzeugt, es sei denn der User unterdrückt es.

Ok, hab mich falsch ausgedrückt. Genauer meinte ich : Ein Event, das auch zum Notify durchgelassen wird.
Mit event-on-change sag ich welche ich möchte. Deswegen meine bisherige Vorstellung: "state" erzeugt zwar ein Event (wie so ziemlich alles andere auch), das Notify reagiert aber nur auf die definierten.
Was ja prinzipiell möglich wäre durch Musik:(on|off|error)
... weiter ..

Zitat von: CoolTux am 09 März 2018, 14:39:00
Deine Regex hätte hier nicht triggern dürfen, hat sie aber auch nicht. Zu mindest nicht auf das Event zum schreiben des Readings state.
Ich bin der festen Meinung das es auf den Event des set Befehles reagiert hat. Und der kommt noch bevor überhaupt der Code im Modul die Verbindung zum Endgerät aufbaut. So wie mein Beispiel mit dem Volume.

Genau da hakts bei mir.
Ich gebe den Befehl:
set Musik on
Das Event "on" wäre " Event des set Befehles", was mein Notify und damit meine Funktion vermutlich ausglöst hat. Möglich war das durch die Definition:
Musik:(on|off|error)

Nur warum kommt das set Event überhaupt beim Notify durch? Es ist doch anders definiert in "Musik". Ist das "set Musik on" irgendwie mehr Low-Level oder sowas ?
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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.


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
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: marvin78 am 09 März 2018, 15:25:54
Zitat von: ftsinuglarity am 09 März 2018, 15:09:24

Nicht jedes Reading hat ein Leerzeichen an erster Stelle im Value

Das Reading oder sein Wert ist belanglos. Es geht um das Event. Deshalb immer der Hinweis auf den Eventmonitor. Dort sieht man das entsprechende Event. Wenn du ausdrücken willst, dass ein beliebiges Zeichen da sein könnte oder nicht, dann verwende das ?

Peter.?Muster

matcht  "Peter Muster" aber auch "PeterMuster".

Bitte meinem Link folgen und durchlesen. Das erübrigt viele Fragen hier. Regex hat NICHTS mit Perl direkt zu tun. Es ist aber wichtig, um richtig auf Events zu reagieren.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 15:32:59
Zitat von: marvin78 am 09 März 2018, 15:25:54
Bitte meinem Link folgen und durchlesen. Das erübrigt viele Fragen hier. Regex hat NICHTS mit Perl direkt zu tun. Es ist aber wichtig, um richtig auf Events zu reagieren.
Ist vollkommen richtig. Ich muß mich mal genauer ausdrücken. Sorry. Dann sag ich mal besser Perl Substitutionen oder sowas. Ich bin zwar relativ frisch in Perl, es hat aber viele Anlehnungen an andere Programiersprachen oder auch der bash. Neu ist mir das Thema nicht. Nur mal so als Abholpunkt. Aber Perl ist auch .. herrje... da geht was. Der Blick ins Tut tut not. (scheiß Witz)

Zitat von: marvin78 am 09 März 2018, 15:25:54
Das Reading oder sein Wert ist belanglos. Es geht um das Event. Deshalb immer der Hinweis auf den Eventmonitor. Dort sieht man das entsprechende Event. Wenn du ausdrücken willst, dass ein beliebiges Zeichen da sein könnte oder nicht, dann verwende das ?
Peter.?Muster
matcht  "Peter Muster" aber auch "PeterMuster".
Ebenso richtig.

Ich war nur verwirrt durch die anscheinend als allg. gütlig gedachte Definition mit Punkt DEVICE:READING:.VALUE. Hat dann also keine besondere Bedeutung in der gezeigten Definition. Ok. Danke!
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: marvin78 am 09 März 2018, 15:36:17
Es ist alles kein Hexenwerk, wenn man die entsprechende Doku liest und ein wenig Regex kann. Man muss den Unterschied zwischen Event und Reading verstehen, Events generell verstehen, ein wenig logisch denken können. Mehr ist es nicht. Mach es nicht so kompliziert, denn das ist es schlicht nicht.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 15:48:10
Zitat von: marvin78 am 09 März 2018, 15:36:17
Es ist alles kein Hexenwerk, wenn man die entsprechende Doku liest und ein wenig Regex kann. Man muss den Unterschied zwischen Event und Reading verstehen, Events generell verstehen, ein wenig logisch denken können. Mehr ist es nicht. Mach es nicht so kompliziert, denn das ist es schlicht nicht.

Offen gesagt macht mir diese Art zu programmieren echt Schwierigkeiten. Das ist mal komplett anders zu verstehen als sequenzielle oder statische Abläufe. Je mehr ich in fhem stecke, um so mehr wird mir klar, aber um so mehr Detailfragen stellen sich dann. Ich geb dir Recht, eigentlich ist zu Events und Readings nicht viel zu sagen. Und dann laufe ich auf solche Probleme wie hier im Thread, und ich merke das mir da doch noch was fehlt und es mehr Feinheiten gibt, als mir klar war.
Vieles umgehe ich sicher mit alten Methoden, die eigentlich überflüssig wären oder anders viel einfacher funktionieren würden. Oft genug festgestellt. Ich bin jetzt seit rund 5 Monaten dabei ... das wird ;)

Was ich anfangs in Schleifen gelaufen bin, weil ich das getrigger noch nicht so auf dem Schirm hatte ..man man .. Struckturen sind da richtig geil :D
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 09 März 2018, 16:02:53
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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 10 März 2018, 09:08:01
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



Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 10 März 2018, 09:44:43
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



Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag 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.
Titel: Antw:Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 10 März 2018, 10:36:29
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"
Titel: Antw:[Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 10 März 2018, 10:51:40
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.
Titel: Antw:[Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: nils_ am 12 März 2018, 10:40:21
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!)
Titel: Antw:[Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 12 März 2018, 12:04:10
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 (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.
Titel: Antw:[Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: nils_ am 12 März 2018, 12:10:52
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....
Titel: Antw:[Gelöst] - Ausführungsreihenfolge Device und Notify
Beitrag von: ftsinuglarity am 12 März 2018, 12:47:44
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.