Notify-Erstellung: bekomme RegExp nicht richtig abgefragt

Begonnen von walterschmitz, 13 August 2017, 11:40:39

Vorheriges Thema - Nächstes Thema

walterschmitz

Hallo zusammen,

habe die Funktion DebianMail unter MyUtils implementiert, getestet und auch in FHEM direkt mal ausgelöst.
Die Emails kommen an --> Funktioniert!

Jetzt hab ich vor einen Notify zu bauen... hab aber dauernd einen Denkfehler drin. Ihr schaut vermutlich drauf und denkt ist der doof, aber ich finde den Fehler grad nicht.

define Fensterüberwachung notify .Bad.Fensterkontakt:state.* {\ DebianMail('test@test.com',"StatusMeldung Badezimmer-Fenster",'Das Badzimmerfenster wurde soeben geöffnet bzw. geschlossen!');;\}

Das Notify sollte Fensterüberwachung heißen
das Device: Bad.Fensterkontakt und ist von MAX
das Reading, welches mir anzeigt, ob das Fenster auf und Zu ist, wäre State und gibt opened und closed zurück.

Irgendwo hab ich einen Fehler bei den RegExp denke ich.

Eigentlich müsste das ja nach DEVICE:READINGS abgefragt werden, d.h. Bad.Fensterkontakt:state
aber das führt leider in jeglicher Kombination nicht zum Erfolg.

Was bedenke ich hier gerade nicht!
Es gibt auch INTERNALS, die den Status senden könnten. Was sollte ich davon richtigerweise nutzen / abfragen?

Danke für's drüberschauen!

CoolTux

Internals lösen kein Event aus.
state hat als Reading Sonderfunktion. Will man es wie ein Reading behandeln muss man das explizit als Attribut sagen. Es hilft in solchen Fällen immer die Commandref.

Fensterüberwachung notify .Bad.Fensterkontakt.(open|closed)

Hier eine Möglichkeit.
Bitte mal versuchen selber zu denken und entsprechend an Deine Gegebenheiten an zu passen.
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

walterschmitz

Hallo und vielen Dank für den Hinweis.

Commandref durchsuchen nach was? RegExp bringt dort gar nichts meiner Meinung, weil es dort kaum richtig erklärt wird. Irgendwo habe ich das gelesen (evtl. auch im WIKI), dass es so aufgebaut ist wie DEVICE.READING - müsste ich auch neu raussuchen, wo ich das gefunden habe. Ich meine aber in der Commandref leider nicht so richtig (evtl. hier: https://fhem.de/commandref_DE.html#devspec )

Und wie kann aus der Commandref (es geht ja um MAX-Bauteile -> https://fhem.de/commandref_DE.html#MAX ) entnehmen, dass das Reading "state" eine Sonderfunktion hat. Da steht meiner Meinung nach nichts dazu drin.

Alternativ könnte man ja auch noch das Reading onoff nutzen, was als Wert 1 oder 0 ergibt. Auch dazu steht in der Commandref nichts drin, ob es jetzt auch Spezialfall wird oder nicht.

Und wo kann ich dann auch nachsehen, welche Werte ein Reading ausgeben kann. Auch das bräuchte ich ja, um bei einem Notify entsprechend auswerten zu können. Das kann ich eigentlich nur aus der Log-Datei holen und (unterstellen), dass dort alle möglichen Readings aufgelistet sind, ggf. auch mit einem Wert und dann versuchen herauszubekommen, welche Werte hier möglich sein könnten. Auch das steht meiner Meinung nach wieder nicht ausführlich in der commandref drin. Bei Fenster Auf / ZU könnte man unterstellen, dass man die Möglichkeiten erahnen kann.
Bei anderen Elementen, die komplexere Sachen ausführen könnte das aber schon wieder schwieriger werden.

Ich schau gerne vor ab nach... nur die Commandref ist meiner Meinung nach nicht hilfreich... bei diesem Problem zumindest nicht. Und ich habe vorab geschaut... und habe auch versucht, aber wie ich schon geschrieben habe, finde ich den kleinen Fehler nicht. Daher dachte ich, dass in einem Selbsthilfeforum man genau für sowas auch Hilfe bekommen könnte. Daher meine Frage!

Jetzt muss ich aber nochmal nachfragen... die schreibst ja (open|closed) . In der Log steht aber "opened". Soll das der Wert sein, den man in der Log auch findet oder ist das erneut was, was nur bei Fensterkontakten so abgefragt wird. Ansonsten muss ich ja (opened|closed) abfangen, oder nicht? Das ist aber jetzt nur vom Lesen her vermutet... das probier ich naher gerne auch noch mal in Ruhe aus.

Danke dir trotzdem für die mögliche Antwort... falls ich nicht klar kommen würde, würde ich mich nochmal melden.

CoolTux

Readings sollten im besten Fall in der Commandref zu jedem Modul erklärt sein. Es ist ja Modul spezifisch.

Meins war nur ein Beispiel und muss angepasst werden. Was genau für Events erzeugt werden wenn du Fenster auf und Fenster zu machst, kannst Du im Eventmonitor sehen.

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

walterschmitz

genau... sollten im besten Fall (...) beschrieben werden.

Ich hätte tatsächlich eine Bitte... da ich ja was davon haben möchte und evtl. ja auch für die Zukunft was draus lernen möchte... und auch ich manchmal Tomaten auf den Augen habe.

Es wird (fast immer) auf die Commandref verwiesen - wie auch in diesem Fall.

Kannst du mir bitte anhand der Commandref einmal erklären, wie ich es dort hätte rausbekommen sollen.
Vermutlich nutze ich sie einfach falsche, weshalb ich gerade darum bitte, dass du es mir mal genau erklärst... evtl. wäre das dann für mich zukünftig einfacher zunächst dort nachzulesen - und dort auch die richtigen Stellen zu finden.

Meine Herangehensweise in diesem Fall war wie folgt:
1.) Ziel: Notify mit Emailversand erzeugen --> Commandref --> Notify (https://fhem.de/commandref_DE.html#notify)
2.) Darin erwähnt: Suchmuster und Anweisungen --> 1.) Suchmuster verstehen, 2.) Anweisungen verstehen
Suchmuster lt. Commandref:
Auszug aus der commandref bei Notify - Define - Hinweise:
ZitatHinweise:
<Suchmuster> ist entweder der Name des auslösenden ("triggernden") Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event.
Das <Suchmuster> muss exakt (!) entweder dem Gerätenamen entsprechen oder der Zusammenfügung aus Gerätename:Event. Events lassen sich mit "inform" in Telnet oder durch Beobachtung des "Event-Monitors" in FHEMWEB ermitteln.
Also... den Auszug aus der Event-Liste herbeigezogen:
2017-08-13 18:05:03 MAX Bad.Fensterkontakt battery: ok
2017-08-13 18:05:03 MAX Bad.Fensterkontakt onoff: 0
2017-08-13 18:05:03 MAX Bad.Fensterkontakt closed
2017-08-13 18:05:03 MAX Bad.Fensterkontakt RSSI: -75


hier gibt es nur Bad.Fensterkontakt closed? Ich hätte auch onoff anscheinend nutzen können, state - wie ich es versucht habe, weil es ein Reading war, war anscheinend der falsche Hinweis, den ich irgendwo gefunden habe.
Frage: Was könnte sonst noch empfangen werden kann ich so genau nicht herausfinden. Wie gesagt beim Fenster einfach und denkbar, bei komplexeren Geräten schwieriger.
Also... muss das Suchmuster dann immer so aussehen:
Bad.Fensterkontakt:onoff oder Bad.Fensterkontakt:RSSI, usw., wenn ich das richtig versteh
Es geht aber noch nicht so richtig hervor, wenn ich Bad.Fensterkontakt:onoff nutzen würde darüber die Fallunterscheidung machen möchte.

Dann steht da noch:
ZitataddRegexpPart <device> <regexp>
Fügt ein regexp Teil hinzu, der als device:regexp aufgebaut ist. Die Teile werden nach Regexp-Regeln mit | getrennt. Achtung: durch hinzufügen können manuell erzeugte Regexps ungültig werden.
Device wäre bei mir Bad.Fensterkontakt und regexp? Aber eigentlich möchte ich ja gar keine eigene RegExp erzeugen, sondern aus dem vorhandenen Readings (bzw. eher Events) etwas ableiten und auslösen.

Also... nicht ganz für mich verständlich in der Commandref - wie ich finde.

2.) Anweisung verstehen:
Das hab ich anhand der Funktion, die ich unter MyUtils.pm gespeichert habe, kann ich diese aufrufen - aber in geschweiften Klammern. Wo würde ich jetzt dazu was hilfreiches finden in der Commandref? Okay, aber das hab ich noch hinbekommen... in dem ich das ableiten konnte. Aber grundsätzlich. Das Problem hat sich aufgetan, eine richtige Antwort habe ich zumindest nicht gefunden... vermutlich hab ich es auch nur übersehen :-(

Jetzt hatte ich zuvor folgendes Wiki genutzt:
https://wiki.fhem.de/wiki/E-Mail_senden
Punkt 1.5
Habe dann, da keine Emails verschickt worden, die Problemlösunge von https://wiki.fhem.de/wiki/E-Mail_senden#Probleme genutzt --> somit war ich sicher, dass das alles funktionierte.

Wenn ich dann aber auf https://wiki.fhem.de/wiki/E-Mail_senden#Raspberry_Pi wieder schaue, wird mir dort ein ein Beispiel gezeigt:
define Sonstiges at *01:00:00 {\
DebianMail('email@email.domain,email2@email.domain',"Subject","Text","'Anhang1' 'Anhang2' ...");;\
}
oder define Sonstiges notify Fenster:Window:.*,.*Low.Batt*. {\
DebianMail("email\@email.domain","Subject","Text","'Anhang1' 'Anhang2' ...");;\
}


Beide erzeugen unspezifische Fehlermeldungen:
Am Beispiel: define Sonstiges at *01:00:00 {\
DebianMail('email@email.domain,email2@email.domain',"Subject","Text","'Anhang1' 'Anhang2' ...");;\
}


Fehlermeldung direkt am FHEM nach der Eingabe:
Zitatsyntax error at (eval 287) line 1, at EOF
--> meiner Meinung nach erst einmal nichts aussagend. Also ein Blick in die Event-Monitor / Log-Übersicht:
Zitat2017.08.13 18:20:22 1 : ERROR evaluating {return undef; {\ DebianMail('email@email.domain,email2@email.domain',"Subject","Text","'Anhang1' 'Anhang2' ...");\ }}: syntax error at (eval 287) line 1, at EOF
2017.08.13 18:20:22 1 : define Sonstiges at *01:00:00 {\ DebianMail('email@email.domain,email2@email.domain',"Subject","Text","'Anhang1' 'Anhang2' ...");\ }: syntax error at (eval 287) line 1, at EOF

Sagt mir erneut nichts...

So... Problem:
1.) Suchmuster ist nicht 100%ig klar geworden (aus dem Grundlagendokument commandref)
2.) RegExp ebenfalls erneut nicht ganz klar in der Commandref
3.) Anweisungen --> nichts dazu in der Commandref gefunden, vermutlich muss ich nach einem anderen Text dort suchen und würde eher fündig (sicherlich meine Blödheit)
4.) Ein Projekt aus dem FHEM-eigenen Wiki genutzt --> danach agiert --> Fehler erzeugt --> keine Erklärung zu den Fehlern im Eventmonitor... dazu eigentlich nichts zu finden.

4 Probleme und wenn ich anfange zu Googlen bzw. im Forum zu suchen, finde ich 100te Einträge... aber keiner der sich auf mein Problem übertragen lässt - alles wäre von mir nur ausprobieren und gerate, da ich ja nicht 100% verstanden habe, an welchem Schräubchen ich schrauben müsste

Fazit: ich habe nur offizielle Hinweis- und Nachschlagewerke von FHEM genutzt (denke ich) und komme trotzdem nicht zum Ende. Anschließend nutze ich das Selbsthilfeforum und werde auf die Grundlagendokumente verwiesen.

Wenn ich hier nicht Denkfehler drin habe, dann dreh ich mich eigentlich im Kreis und grundsätzlich finde ich, dass in einem Forum Hinweise (wie du es gemacht hast) gegeben werden könnten, ohne immer (oder ganz oft, wie man es hier liest) mit dem erhobenen Finger (so hab ich zunächst zumindest aufgefasst) auf die Commandref zu verweisen.

Ich glaube, dass genau wie ich - einige FHEM nutzen, aber trotzdem nicht die totalen IT-Cracks sind und daher nicht immer mit rein technischen Beschreibungen oder Dokumentationen klar kommen bzw. dadurch auch mal Fehler machen. Dafür gibt es ja ein Forum, neben Wiki und Commandref! Genau diese User haben teilweise versucht sich einzulesen und zu suchen... und finden abschließend nicht den richtigen Hinweis. Daher fragen sie dann.

Und in meinem Fall ist es wohl so, dass im Wiki der Code falsch dargestellt wurde.
Habe ich die \ und ;; entfernt und schon ging es dann... aber sowas sollte in einem solchen Wiki doch auch nicht passieren - hoffe ich zumindest.

War mein Herangehen grundsätzlich richtig, oder hast du Hinweise für mich, wie ich das besser (oder auch anders) machen sollte bzw. könnte.

Ich würde mich freuen, wenn du mich kurz korrigierst - sofern du dazu Lust (und natürlich Zeit hast).

Danke im voraus - sowohl für den Tipp noch einmal als auch für deine evtl. Mühe.

Schönen Abend noch.

CoolTux


2017-08-13 18:05:03 MAX Bad.Fensterkontakt closed

Das hier ist Dein Ansatz. Wenn Du im Eventmonitor diesen Teil makierst und dann auf create gehst sollte ein entsprechend passendes Notify erstellst werden.
Alternativ hilft es RegEx zu verstehen (gibt im Netz diverse Dings dazu) dann kommt in Deinem Fall raus

Bad.Fensterkontakt closed

Ein Leerzeichen( beliebiges Zeichen) wird in regex als Punkt dargestellt

Bad.Fensterkontakt.closed

somit würden wir nun nur auf den Event

Bad.Fensterkontakt closed

triggern. Du möchtest aber noch open oder opend oder was auch immer der Eventmonitor aus spuckt mit dazu haben. Daher eine Auswahl was noch kommen kann. Es ändert sich nur alles nach dem Punkt, daher wird das in () gesetzt.

Bad.Fensterkontakt.(closed|open)

smoit triggert es nun auf

Bad.Fensterkontakt closed

und auf

Bad.Fensterkontakt open

Danach kommt Deine Mail geschichte. Da ich mich damit nicht auskenne würde ich erstmal schauen ob das Notify so triggert
Mail könnte so sein

{\ DebianMail('test@test.com',"StatusMeldung Badezimmer-Fenster",'Das Badzimmerfenster wurde soeben $EVENT!');;\}



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

walterschmitz

also könnte ich ihm Eventmonitor auch die RegExp nutzen...
z.B. Filtern nach (Wohzimmer|Bad).Wandthermostat:*

Oder führt das nicht zum gewünschten Ergebnis, die Filter auf Wohnzimmer ODER Bad - Events der Wandthermostate zu erhalten?
Und... es wird als zwischen Device und Reading / Event mit einem . (Punkt) getrennt und nicht mit : ? Macht es da Probleme, dass ich bei mir die Device schon mit . im Devicenamen habe? Also Wohnzimmer.Wandthermostat o.ä. wären da die Device

CoolTux

Ja du kannst im Eventmonitor auch RegEx anwenden. Das mit dem Punkt ist egal denke ich. Zeichen ist Zeichen. Im Eventmonitor kannst Du ein : als RegEx einsetzen wenn auch ein : vorhanden ist. Als notify RegEx dient das : als Trenner zwischen Device und Reading.
Zwischen. Reading und value sieht man es ja wieder im Eventmonitor. Da dient es sichtbar als Trenner.

(Wohzimmer|Bad).Wandthermostat:*

Das geht in der Tat. Damit erfasst du alles Events vom Wohnzimmer.Wandthermostat und vom Bad.Wandthermostat
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

walterschmitz

eine kurze Nachfrage hab ich noch.

aktuell habe ich das so gemacht, bekomme dann aber IMMER ein Notify, wenn das Element ausgelöst wird.
Logischerweise möchte ich aber nur dann ein Notify bekommen, wenn das Element verändert wurde.

Meine Idee dazu:
1. Dazu müsste ich im DEVICE entweder event-on-change einstellen und dahinter dann onoff notieren?
Und dann würde aber auch KEIN andere Reading / Event protokolliert bzw. ausgelöst?`
Die anderen Readings, die ich abfangen möchte, müsste ich dann noch mal explizit in einem event-on-update eintragen, oder?
Threshold würde ich in dem Fall ja nicht eintragen / benötigen, denke ich

2. Idee... aber das bekomm ich nicht hin, wg. zu wenig Erfahrung muss ich zugeben: Ich könnte vermutlich auch im Notify abfragen, ob zuvor der Wert != jetzt aktueller Wert sei und nur dann das Notify auslösen.

Welche Variante davon wäre die bessere... ich seh persönlich noch keinen richtigen Unterschied, wenn beide funktionieren würden / könnten... das 1.) ist evtl. für einen Laien einfacher umsetzbar als das 2.)

Gibt es hierzu Empfehlungen?

Gruß

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

walterschmitz

damit dann nichts verloren geht, muss ich aber alle READINGS dort eintragen...

CoolTux

Nein musst du nicht. Du kannst RegEx verwenden um auf alles zu matchen.
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

walterschmitz

okay, werde ich versuchen... aber erst nächste Woche, weil grad was wichtigeres dazwischen gekommen ist.

Vielen Dank für deinen Hinweis.
Falls ich was hab, melde ich mich wieder oder frag nochmal :-P