[Gelöst]Benötige Hilfe bei Störmeldungsversand (event-on-change-reading)

Begonnen von cubiator, 27 August 2019, 21:22:19

Vorheriges Thema - Nächstes Thema

cubiator

Hallo zusammen,

ich habe mehrere ESPEasy Devices die ich auf Ausfall überwachen möchte.
Diese werden per presence-Check überwacht und wenn der Status auf "absent" wechselt möchte ich mir eine eMAil senden lassen.

Dieses habe ich an einer zweiten Sonoff mit diesem Code gelöst:



define Ausfall_Sonoff2 notify ESPEasy_Sonoff_2_Relais:absent {DebianMail("meineemail\@meinprovider.com","Subject","Steckdose Sonoff_2 ausgefallen","")}
setuuid Ausfall_Sonoff2 5d604d2c-f33f-6e93-a821-bf35f747e7b843f6
attr Ausfall_Sonoff2 room Alarm


Dieses funktioniert zwar, spamt mir aber das eMail-Konto voll da bei jeder "absent" Erkennung ein Mail generiert wird.
Nun habe ich einige Versuche gestartet das mir nur EINE email bei Statuswechsel auf "absent" gesendet wird.

Ich denke mit  dem Befehl "event-on-change-reading" bin ich hier auf dem richtigen Wege, benötige aber einmal Eure Hilfe beim Umsetzten.
Von dieser WEBSITE https://www.computerhilfen.de/info/fhem-temperatur-warnung-mit-push-benachrichtigung-auf-dem-handy.html habe ich ein Grundgerüst genommen und es
für mich versucht anzupassen, leider versteht Fhem nicht was ich von ihm/ihr will.;-)

Dieses ist mein Code mit dem ich es gerade versuche, hier ist der Sendeteil mit der eMail noch nicht enthalten. Zur Zeit arbeite ich daran den Status von meinem Device "StoerungDummy" sinnvoll zu füllen, bisher ist der Status nur ??? und erwartet wird "present" oder "absent".


#[Test Störmeldung]

define StoerungDummy dummy
setuuid StoerungDummy 5d6442ca-f33f-6e93-3082-85037bfe29d4c907
attr StoerungDummy event-on-change-reading state
attr StoerungDummy room Alarm

define Stoerung_Sonoff_1 notify ESPEasy_Sonoff_1_Relais:presence:.* { if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") = absent) { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}
setuuid Stoerung_Sonoff_1 5d6442ca-f33f-6e93-5ac9-57917685db7fba15
attr Stoerung_Sonoff_1 room Alarm
define Stoerung_Sonoff_1Alert notify StoerungDummy:zuwarm { fhem("set myMPD playfile temperatur-kuehlschrank-kueche.mp3 ;; set Push message Achtung, der Kühlchrank in der Küche ist zu warm: ".ReadingsVal("LaCrosse_2A","temperature","")."°C! | Temperatur-Warnung") }
setuuid Stoerung_Sonoff_1Alert 5d6442ca-f33f-6e93-78e5-3d4c296017828df2
attr Stoerung_Sonoff_1Alert room Alarm


Hier einmal die Devices die damit zusammen hängen:



list StoerungDummy

Internals:
   FUUID      5d6442ca-f33f-6e93-3082-85037bfe29d4c907
   NAME       StoerungDummy
   NR         225
   STATE      ???
   TYPE       dummy
Attributes:
   event-on-change-reading state
   room       Alarm

Hier ist der state auch immer nochauf ??? wobei ich von dem Device welches überwacht werden soll ein absent bekommen müsste.
Hier das Device welches den Status in den Dummy schreiben soll:


list Stoerung_Sonoff_1

Internals:
   DEF        ESPEasy_Sonoff_1_Relais:presence:.* { if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") = absent) { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}
   FUUID      5d6442ca-f33f-6e93-5ac9-57917685db7fba15
   NAME       Stoerung_Sonoff_1
   NOTIFYDEV  ESPEasy_Sonoff_1_Relais
   NR         227
   NTFY_ORDER 50-Stoerung_Sonoff_1
   REGEXP     ESPEasy_Sonoff_1_Relais:presence:.*
   STATE      active
   TYPE       notify
   READINGS:
     2019-08-27 19:08:14   state           active
Attributes:
   room       Alarm


Stört Euch bitte nicht an dem "zuwarm" das wird noch geändert in eine sinnvolle Ausgabe, auch die Weiterverarbeitung mit dem Mailversand ist noch nicht gegeben.
Mir geht es aber erst einmal darum Schritweise weiter zu kommen und nu erst einmal den StoerungsDummy zu füllen.

Ich denke das ich einen Denkfehler mache und ich den falschen Lösungsansatz habe, könnt Ihr mir einmal unter die Arme greifen?

Gruß
Cubiator

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cubiator

Hallo Otto123,

wie ich eben das Log noch anhängen wollte stand es da drin un das habe ich gerade geändert.
Das hat es aber nicht gelöst allerdings wird im Log auch ein Bareword angemeckert.
Nur ich verstehe nicht was diese Fehlermeldung soll.

Mögt Ihr mal schauen?



Bareword "absent" not allowed while "strict subs" in use at (eval 128) line 1.
2019.08.27 19:28:31 3: Stoerung_Sonoff_1 return value: Can't modify non-lvalue subroutine call of &main::ReadingsVal in scalar assignment at (eval 128) line 1, near "absent) "

Bareword "absent" not allowed while "strict subs" in use at (eval 128) line 1.
2019.08.27 19:28:31 1: ERROR evaluating my $NAME='ESPEasy_Sonoff_1_Relais';my $EVTPART0='presence:';my $TYPE='ESPEasy';my $EVTPART1='absent';my $SELF='Stoerung_Sonoff_1';my $EVENT='presence: absent';{ if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") = absent) { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}: Can't modify non-lvalue subroutine call of &main::ReadingsVal in scalar assignment at (eval 128) line 1, near "absent) "
2019.08.27 19:28:31 3: eval: my $NAME='ESPEasy_Sonoff_1_Relais';my $EVTPART0='presence:';my $TYPE='ESPEasy';my $EVTPART1='absent';my $SELF='Stoerung_Sonoff_1';my $EVENT='presence: absent';{ if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") = absent) { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}
2019.08.27 19:28:31 1: PERL WARNING: Found = in conditional, should be == at (eval 128) line 1.
2019.08.27 19:28:29 2: Backup with command: tar czf ./backup/FHEM-20190827_192829.tar.gz "./MAINTAINER.txt" "./log" "./fhem.cfg.demo" "./www" "./configDB.pm" "./docs" "./fhem.cfg" "./FHEM" "./fhem.pl" "./fhem.cfgorig" "./demolog" "./restoreDir" "./README_DEMO.txt" "./CHANGED" "./contrib" "./unused"


:

kadettilac89

{ if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") = absent) { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}

... = ist eine Zuweisung

verwende ... if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") eq "absent" )

eq vergleicht Strings. Außerdem muss absent in Hochkomma

cubiator

Ah Du bist mein Held! Wir sind einen Schritt weiter!
Nachdem ich alles entsprechend Deinen Tipp geändert hatte lief es zumindest teilweise.
So sieht meine Zeile nun aus:


{ if(ReadingsVal("ESPEasy_Sonoff_1_Relais","presence","") eq "absent") { fhem("set StoerungDummy zuwarm") } else { fhem("set StoerungDummy ok") }}


Ich bekomme im "StoerungDummy"  den Status zuwarm wenn mein Device sich 300 Sekunden nicht meldet.
Allerdings habe ich diesen Teil--> else { fhem("set StoerungDummy ok") }} <-- so verstanden das wenn "absent" nicht erkannt wird soll der Status im "StoerungDummy" "ok" sein. Dieser Status bleibt aber auf zuwarm und geht nicht auf ok zurück, was muss ich hier tun?

kadettilac89

#5
du hast ein notify auf ESPEasy_Sonoff_1_Relais:presence:.* - jedesmal wenn ein Event hierzu erstellt wird sollte das ausgeführt werden. Siehst du im Eventmonitor ein Event das dazu passt. Es wird nur ausgeführt wenn auch ein Event generiert wurde.

Dein Konstrukt sieht allgemein abenteuerlich aus. Schau dir mal watchdog an, damit kannst du es wahrscheinlich eleganter lösen.

https://wiki.fhem.de/wiki/Watchdog


cubiator

Ihr seid super!
Keine Ahnung warum es beim ersten Mal nicht klappte, nun geht es!
Morgen geht es weiter mit dem eMAil versand und ich befürchte das ich Euch noch einmal benötige;-)

Ein Dickes Danke an Euch!

cubiator

Hallo zusammen,

da meine Devices nun die Störmeldung absetzen möchte ich mich noch einmal bedanken.
Ich setzte den Threat nun auf gelöst.

Danke!