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