DebianMail nach readingsval (gelöst)

Begonnen von uron, 18 März 2019, 12:52:03

Vorheriges Thema - Nächstes Thema

uron

Nachdem ich mindesten den halben Sonntag mit Grundlagenrecherchen zu den beiden o.g. Stichworten verbracht habe, gebe ich hierzu mein Selbststudium auf und bitte um Hilfe.
Aufgabenstellung ist die, dass ich den Fehlerstatus meiner Viessmannheizung auslesen möchte und mir (und nicht meinem Heizungsbauer) fehlerabhängig ein Debianmail zusenden möchte.
Ich glaube, dass mein Problem in der Syntax liegt, da ich gundsätzlich ein Mail versenden kann.
Nachdem ich verschiedentlich herumprobiert habe, hänge ich bei folgendem Code (in diesem Besipiel habe ich testweise die WW-Speichertemperaturen ausgewertet):
define Testmail32 at +*00:30:00 {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >>= 50 and <<= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 50 und 58 Grad')}}
Im "Endausbau" werde ich aber sicher notify verwenden.
Die Fehlermeldung im Logfile lautet:
2019.03.18 11:52:41.886 3: eval: {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >>= 50 and <<= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 50 und 58 Grad')}}
2019.03.18 11:52:41.886 1: ERROR evaluating {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >>= 50 and <<= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 50 und 58 Grad')}}: Can't find string terminator "" anywhere before EOF at (eval 75939) line 1.
2019.03.18 11:52:41.887 3: Testmail32: Can't find string terminator "" anywhere before EOF at (eval 75939) line 1.


Ich finde einfach den Syntaxfehler nicht, obwohl ich in einem anderen Beispiel
define Testmail24 at +*00:30:00 { if (ReadingsNum("Gasheizung","WW-Isttemperatur",0) >= 55) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher:','>55')}} ein Mail erhalte.
Wo ist der Unterschied oder habe ich einen Gedankenfehler?

Wenn ich z.B.
define Testmail33 at +*00:30:00 {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 and <= 58 ) {DebianMail('vormane@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}
schreibe bekomme ich den Fehler
2019.03.18 12:37:34.393 1: ERROR evaluating {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 and <= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}: Unterminated <> operator at (eval 76795) line 1.
2019.03.18 12:37:34.394 3: Testmail33: Unterminated <> operator at (eval 76795) line 1.


Ist es richtig, dass ich für mein Ausgangsziel, den Fehlercode meiner Heizung auszuwerten das Beispiel mit den Temperaturen verwenden kann?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

Byte09

Was mir auf die schnelle auffällt:

Du nutzt für vergleichsoperatoren mal <<= , mal <=. Es sollte letzteres sein.

Eine Verknüpfung im perlteil machst du mit 'and'. In perl lautet die 'und Verknüpfung' '&&'.

Noch einiges mehr aber Kurz da mobil.

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk

uron

Ok, klare Fehler, ich sehe scheinbar den Wald vor lauter Bäümen nicht. Habe es nun mit
define Testmail35 at +*00:05:00 {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && <= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}probiert.
Irgendetwas stimmt mit der Abfrage, also den >- und <-Zeichen doch noch nicht (Unterminated <> operator)!?
Die komplette Fehlermeldung:
ERROR evaluating {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && <= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}: Unterminated <> operator at (eval 77849) line 1.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Zitat von: uron am 18 März 2019, 13:32:53
Ok, klare Fehler, ich sehe scheinbar den Wald vor lauter Bäümen nicht. Habe es nun mit
define Testmail35 at +*00:05:00 {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && <= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}probiert.
Irgendetwas stimmt mit der Abfrage, also den >- und <-Zeichen doch noch nicht (Unterminated <> operator)!?
Die komplette Fehlermeldung:
ERROR evaluating {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && <= 58 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 45 und 58 Grad')}}: Unterminated <> operator at (eval 77849) line 1.

ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && <= 58 )

Das ist Unsinn.
ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && ReadingsVal("Gasheizung","WW-Isttemperatur",0)  <= 58 )
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

pataya

Bzw.:

my $WWist = ReadingsVal("Gasheizung","WW-Isttemperatur",0);;
[...]
if ($WWist >= 45 && $WWist <= 58 )

uron

Wow CoolTux, das war es!
ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 45 && ReadingsVal("Gasheizung","WW-Isttemperatur",0)  <= 58 )
Hätte doch besser gestern schon nachgefragt - mit Lesen kam ich nicht weiter. Danke.

Bin gespannt, ob das grundsätzlich auch mit der Auswertung des Fehlercodes der Heizung geht.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Gut jetzt weißt Du was Du bei Deiner Bedingungsabfrage falsch gemacht hast. Jetzt nimmst Du Dein at und schmeißt es so weit weg wie Du nur kannst.

FHEM arbeitet Event basiert. Es ist in diesem Fall vorsichtig gesagt Unnötig alle 30min eine Abfrage zu machen. Statt dessen reagiert man auf die Events des Devices und wertet diese dann aus.

Lege Dir also ein Notify an welches auf das Reading WW-Isttemperatur vom Device Gasheizung triggert und im Notify machst Du dann die Auswertung, oder besser noch Du startest darin eine sub welche Du in einer 99_myUtils unter bringst.
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

uron

Danke CoolTux für die Tipps.
Ich hatte ja eingangs bereits erwähnt, dass ich ein notify einbauen will, nur zu Testzwecken erfolgte die Abfrage mit 'at', da ich ja eine Aktion hervorrufen wollte und nicht auf Events warten will.
Wie gesagt, eigentlich will ich Fehlercodes der Heizung auslesen und per Mail melden, ich wollte mich nur an dieser Syntax mit readingsval und Debianmail probieren und verstehen lernen. Beides war mir bisher nicht geläufig. Ich bin wirklich ein bemühter Laie und versuche, spontane Ideen umzusetzen.

Den Hinweis mit der 'sub' in einer 99_myUtils nehme ich gerne in meinen Themenspeicher auf, aber ehrlich, eh ich das auf die Reihe bekomme, brauche ich wahrscheinlich noch ein paar Lehrstunden. Da fehlen mir gänzlich die Zusammenhänge - sicher wirst du lachen, aber nur wenn man weiß wie es geht, ist alles einfach.
Danke trotzdem, ich schaue jetzt mal nach dem notify.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Hat ja keiner was von heute und morgen gesagt. Aber so hast Du schon mal davon gehört.

Im übrigen bist Du herzlich eingeladen wenn Du magst
https://forum.fhem.de/index.php/topic,98701.0.html
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

uron

Das mit dem Webinar ist ja super. Leider bin ich am 2.4. im Ausland, habe mir den Kalender aber abonniert, sicher gibt es derartige Seminare öfter einmal. Das Video vom letzten Mal werde ich mir ansehen.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Wir haben da auch noch Ende jeden Monats einen Monatsrückblick. Gibt es da auch als Video.
Da kann man dann auch mal bei kleinen Fragen um Hilfe bitten.
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

uron

So, jetzt muss ich nochmals nachaken, da ich das Ganze nun in einem einfachen Beispiel mit notify zusammengebaut habe:
define notify_WW_Temperatur notify Gasheizung {if (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 57 && ReadingsVal("Gasheizung","WW-Isttemperatur",0) <= 62 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher:','Die WW-Speichertemperatur liegt zwischen 57 und 62 Grad')} elsif (ReadingsVal("Gasheizung","WW-Isttemperatur",0) >= 47 && ReadingsVal("Gasheizung","WW-Isttemperatur",0) <= 52 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher :','Die WW-Speichertemperatur liegt zwischen 47 und 52 Grad')}}
Wenn ich 'notify' richtig verstehe, müsste ich bei jeder Temperaturänderung (auch um jedes Zehntel) ein Mail bekommen, was mich über den aktuelle Temperaturbereich informiert.
Ich weiß, das ist nicht praxisnah, aber bei dieser Konstellation habe ich möglichst viele Änderungen, auf die notify ja reagieren müsste.
Dies kann ich später dann auf die Fehlercodes übertragen.
Im Moment kommt aber noch nichts!  >:(
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

pataya

Sollte an sich funktionieren.
Generiert dein Device denn Events?
Beobachte mal im Event monitor ob bei Änderung entsprechend was angezeigt wird.

Zum testen des Notifys ansonsten mal:

trigger Gasheizung


Wenn das funktioniert, musst du für's Device vermutlich ein Event-on-change-reading setzen.

CoolTux

Kann man so machen ist aber Unnötige


define notify_WW_Temperatur notify Gasheizung:WW-Isttemperatur:.* { if ( $EVTPART1 >= 57 && $EVTPART1 <= 62 ) {DebianMail('vorname@name.com','Temperatur Warmwasserspeicher:','Die WW-Speichertemperatur liegt zwischen 57 und 62 Grad')} elsif ( ...
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

uron

Nochmals mein Dank an CoolTux - soeben sind die ersten Mails eingetrudelt!!
Auf diese Syntax im Device-Namen mit :.*muss man erst einmal kommen.
Ich habe es im Moment nur im Wiki (notify) gefunden.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Notify arbeitet mit RegEx. Dazu findet man so einiges im Netz.
Du kannst auch den Eventmonitor nehmen, das Event markieren und dann create drücken.
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

pataya

Zitat von: CoolTux am 18 März 2019, 17:18:00
Kann man so machen ist aber Unnötige

Verständnisfrage:
Klar ist "Gasheizung:WW-Isttemperatur:.*" sinnvoller, allerdings hätte das notify doch bereits auf alle Events mit "Gasheizung" reagieren müssen, oder?

CoolTux

Meines Wissens nicht. Müsste ich aber selbst noch mal ganz genau klären wie es ist wenn man nur den DEVICENAME mit an gibt.
Bei DEVICENAME.* hätte es auf jeden Fall getriggert.
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

pataya

Hab's nämlich mal mit dem dummy ausprobiert, mit dem es funktioniert hat. Aber vielleicht verhält der sich ja auch noch mal anders. Naja...

CoolTux

Eigentlich nicht. Wie gesagt durchaus möglich das es auch nur mit DEVICENAME geht. Aber ich würde es als unsauber bezeichnen.
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

uron

#20
Im Moment laufen ständig Mails ein, so etwa mindestens jede Minute eines.
Anzunehmen ist, dass jeder kleinste WW-Temperatur-Abweichung getriggert wird.
Leider kann ich das im Event Monitor nicht verfolgen, da er (möglicherweise wegen meines NAS von Synology) nichts anzeigt.
Für meine 'Ursprungsaufgabe', den Fehlercode der Heizung zu triggern wäre das aber kein Problem, weil die Werte doch ziemlich statisch sind.
Will man aber wirklich einen Messwert wie in meinem Beispiel klassifizieren, müssten man ggf. runden können.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Nun in der Regel möchtest Du bei einem bestimmten Ereignis informiert werden.
Zum Beispiel Benachrichtigung bei unter/überschreiten von Schwellenwerten.
In diesem Fall generiert man mit dem Attribut userReadings ein neues Reading.


attr Gasheizung userReadings infoIsttemp:WW-Isttemperatur:.* { ReadingsVal($name,'WW-Isttemperatur','hoelle') > 57 ) { 'gemuetlich' } elsif( ReadingsVal($name,'WW-Isttemperatur','hoelle') < 37 ) { 'scheisse kalt' } }


Und dann passt du nur noch dein notify an. Reading infoIsttemp wird überwacht und du reagierst auf scheiße kalt oder gemuetlich.
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

uron

Interessante Vorgehensweise, Danke für die Erläuterungen  ::)
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

Nun habe ich das Gelernte zu später Stunde doch noch auf mein Ursprungsproblem übertragen: der Überwachung des Fehlercodes meiner Heizung.
Der Standardwert ist "0", d.h. keine Probleme.
Beispielhaft habe ich im elsif den Fehlercode "EF" dargestellt, der das Fehlen der Gasverzufuhr anzeigt - diesen Fehler kann ich problemlos durch Abstellen der Gasleitung simulieren.

Der Code lautet deshalbdefine nf_WW_Fehlercode notify Gasheizung:Brenner_Fehlercode:.* { if ( $EVTPART1 == "0") {DebianMail('vorname@name.com','Status Gasheizung:','Es liegt keine Fehlermeldung vor!')} elsif ( $EVTPART1 == "EF" ) {DebianMail('vorname@name.com','Fehlermeldung Gasheizung:','Brenner auf Störung! Flammenverlust direkt nach Flammenbildung! Gasversorgung prüfen!')}}

Nun hatte gedacht, dass notify nur den Fehlercode triggert und dieser ist ja ohne Auftreten eines Fehlers statisch.
Leider erreichen mich erneut minütlich Mails mit dem Hinweis auf den Fehlercode "0".

Erst nach Modifizierung des notify wie folgt (Löschen von :.*)
define nf_WW_Fehlercode notify Gasheizung:Brenner_Fehlercode { if ( $EVTPART1 == "0") {DebianMail('vorname@name.com','Status Gasheizung:','Es liegt keine Fehlermeldung vor!')} elsif ( $EVTPART1 == "EF" ) {DebianMail('vorname@name.com','Fehlermeldung Gasheizung:','Brenner auf Störung! Flammenverlust direkt nach Flammenbildung! Gasversorgung prüfen!')}} lässt die Mailflut verstummen.
Ich hebe es mir für morgen auf, den Fehlerfall zu testen, und werde hier berichten, ob diese Veränderung Erfolg hatte und überhaupt noch ein Mail versandt wird - Methode: Trial and Error.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

CoolTux

Zitat von: uron am 19 März 2019, 00:08:13
Ich hebe es mir für morgen auf, den Fehlerfall zu testen, und werde hier berichten, ob diese Veränderung Erfolg hatte und überhaupt noch ein Mail versandt wird - Methode: Trial and Error.

Oder Dich ein wenig mehr mit dem Thema durch lesen beschäftigen.
Ein einfaches event-on-change-reading hätte hier geholfen.
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

uron

@CoolTux,
natürlich hätte ein einfaches Lesen des Themas 'event-on-change-reading' geholfen.
Nachdem du aber diesen Hinweis von pataya
Zitat von: pataya am 18 März 2019, 17:00:36
Zum testen des Notifys ansonsten mal:

trigger Gasheizung

Wenn das funktioniert, musst du für's Device vermutlich ein Event-on-change-reading setzen.
verworfen hattest:
Zitat von: CoolTux am 18 März 2019, 17:18:00
Kann man so machen ist aber Unnötige
war das Thema nicht meine erste Wahl.
Zitat von: CoolTux am 19 März 2019, 06:08:50
Oder Dich ein wenig mehr mit dem Thema durch lesen beschäftigen.
Ein einfaches event-on-change-reading hätte hier geholfen.
Am Ende hilft event-on-change-reading und es gehen nur noch eventbasierte Mails bei mir ein.
Danke an beide Helfer.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker