Notify - RegEx

Begonnen von Talkabout, 10 Juli 2015, 15:09:13

Vorheriges Thema - Nächstes Thema

Talkabout

Hallo zusammen,

ich habe immer öfter das Problem, dass ein einfacher RegEx im Notify wie

TV:activity

nicht mehr greift. Ich muss ihn stattdessen so schreiben damit sie greifen:

TV:.*activity.*

Kann es sein, dass ab und zu die Notifies tatsächlich mit Leerzeichen kommen? Also in der Form

"TV: activity" oder "TV:activity "

Das scheint auch nicht immer so zu sein, nur bei bestimmten Devices. Ich habe das Problem bei mir einerseits bei einer Homematic Steckdose mit Leistungsmessung und jetzt auch beim harmony-Modul. Kann das ein globales Problem sein (FHEM liefert die Notifies mit Leerzeichen aus) oder muss es direkt in den Modulen schief laufen? Und ist es so gewollt?

Danke!

Gruss

rudolfkoenig

Ich glaube nicht daran, dass es ein globales Problem ist, es gaebe mehr beschwerden, ausserdem habe ich an dieser Stelle seit laengerem nichts geaendert.
Ich wuerde die fraglichen Daten in einem FileLog sammeln, und da nach Leerzeichen suchen.
Und danach dem betroffenen Modulautor auf dem Geist gehen.

Talkabout

Zitat von: rudolfkoenig am 10 Juli 2015, 15:18:11
Ich glaube nicht daran, dass es ein globales Problem ist, es gaebe mehr beschwerden, ausserdem habe ich an dieser Stelle seit laengerem nichts geaendert.
Ich wuerde die fraglichen Daten in einem FileLog sammeln, und da nach Leerzeichen suchen.
Und danach dem betroffenen Modulautor auf dem Geist gehen.
Hallo Rudi,

das bedeutet, dass die Ausgabe im FHEM Log genau das ist, was auch das Notify Modul als String bekommt? Ich habe im Log Einträge in der Form:

TV currentActivity: Fernsehen
TV activity: Fernsehen

usw.

Würde ja nach Deiner Aussage bedeuten, dass auch das Notify Modul den String "currentActivity: Fernsehn" bekommt, richtig?

Gruss

rudolfkoenig

notifyFn und FileLog sind aus dieser Hinsicht bei der Pruefung identisch.

Details:

- readings*Update fuegt die Events zu den CHANGED Array hinzu, in der Form "$readingName: $value". Ausnahme ist $readingName eq "status", in diesem Fall wid nur $value hinzugefuegt.

- die notifyFn des Moduls holt dieses Array via deviceEvents() ab, je nach Parameter kriegt sie CHANGED direkt, oder eine Kopie mit zusaetzlichen "state: $hash->{READINGS}{state}{VAL}". Letzteres ist nur bei FileLog relevant, falls man addStateEvent gesetzt hat.

- sowohl das Modul notify, als auch FileLog pruefen $regexp im notifyFn gegen $name und gegen $name:$event, wobei $regexp bei der Pruefung mit ^ und $ ergaenzt wird, und $event jeweils eine Zeile aus dem deviceEvents Array ist.

Talkabout

Zitat von: rudolfkoenig am 10 Juli 2015, 15:48:08
notifyFn und FileLog sind aus dieser Hinsicht bei der Pruefung identisch.

Details:

- readings*Update fuegt die Events zu den CHANGED Array hinzu, in der Form "$readingName: $value". Ausnahme ist $readingName eq "status", in diesem Fall wid nur $value hinzugefuegt.

- die notifyFn des Moduls holt dieses Array via deviceEvents() ab, je nach Parameter kriegt sie CHANGED direkt, oder eine Kopie mit zusaetzlichen "state: $hash->{READINGS}{state}{VAL}". Letzteres ist nur bei FileLog relevant, falls man addStateEvent gesetzt hat.

- sowohl das Modul notify, als auch FileLog pruefen $regexp im notifyFn gegen $name und gegen $name:$event, wobei $regexp bei der Pruefung mit ^ und $ ergaenzt wird, und $event jeweils eine Zeile aus dem deviceEvents Array ist.
Hallo Rudi,

Deine Erklärung würde meiner Ansicht nach bedeuten, dass nach Auflösung der Variablen $name und $event die Überprüfung in notifyFn gegen den String

$name:$readingsName $value

geht, sehe ich das korrekt? Demnach ist ein Notify auf

TV:currentActivity

ja schon falsch, da hinter "currentActivity" ja noch der Wert kommt. Die Definition müsste demnach so aussehen:

TV:currentActivity.*

Oder machen dass dann die Module so, dass sie $event splitten und nur den Reading-Namen verwenden? Ich glaube aber das ist dann eher eine Frage an den Modul-Verantwortlichen, nicht an Dich :)

Danke Dir!

Gruss

rudolfkoenig

TV:currentActivity.* waere in deinem Fall fuer notify und FileLog richtig. Fuer diese beiden Module bin ich auch zustaendig.

Talkabout

Zitat von: rudolfkoenig am 10 Juli 2015, 16:32:16
TV:currentActivity.* waere in deinem Fall fuer notify und FileLog richtig. Fuer diese beiden Module bin ich auch zustaendig.
Alles klar.