FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: foxmulder am 16 November 2014, 13:16:12

Titel: Mail bei unterschreiten einer Temperatur
Beitrag von: foxmulder am 16 November 2014, 13:16:12
Hallo zusammen,

ich hab da mal eine vermutlich dumme Frage aber auch mit der Suche komme ich gerade nicht so recht weiter. :-(

Ich habe einen Temperatursensor über den GPIO4 Port des RPi angeschlossen und lese die Messungen via FHEM aus. Soweit sogut....alles klappt bestens. :-)

Nun möchte ich noch eine Infomail verschicken wenn eine gewisse Temperatur unterschritten wurde. Also z.b. wenn ein Messwert unter 5 Grad fällt soll einmalig eine Mail versendet werden.

Hier der aktuelle Sensor:
# TemperaturSensoren
define Temperatur GPIO4 10-000802b66763
attr Temperatur alias aktuelle Temperatur
attr Temperatur fp_Erdgeschoss 32,324,1,
attr Temperatur group Wettervorhersage
attr Temperatur icon icoTempBaum
attr Temperatur model DS18S20
attr Temperatur pollingInterval 300
attr Temperatur room Wetter



Ich habe bereits andere Aktoren im Einsatz und lasse da Mails über einen "notify" und "DebianMail" versenden...das klappt gut.
In dem Fall habe ich schon gelesen...könnte das auch gehen...nur müsste man wohl einen Zähler (UserReadings) mit einbauen der den Zähler beim versenden der Mail auf 1 setzt...sonst gibt es SPAM Mails. ;-)
Beim Überschreiten der 5 Grad müsste dieser Zähler dann wohl wieder zurück gesetzt werden.

Könnt ihr mich hierbei bitte unterstützen?

Vielen lieben Dank im Voraus und viele Grüße
Fox
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: bergadler am 16 November 2014, 13:49:08
Hallo,

ich habe das per DOIF gelöst.
Verschickt bei mir zwar keine Mails, sondern macht 'ne Ansage, aber das ist ja schlussendlich wurscht.

define Hzg_Wz_alarm DOIF ([Hzg_Wz:measured-temp] < 17) (set nexus_webview ttsSay Das Wohnzimmer hat nur noch 17 Grad.
Und die Ansage kommt nur einmal.  ;)

Gruß
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: foxmulder am 16 November 2014, 14:05:35
Hallo,

danke für die schnelle Antwort....
also quasi so dann?

define Temperatur_alarm DOIF ([Temperatur:temperature] < 10) ({ DebianMail('info@@all4everyone.de','FHEM-Temperatur','ACHTUNG - Temperatur zu niedrig!');;;; })

Klappt glaub noch nicht so ganz..:-/
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: foxmulder am 21 November 2014, 08:51:49
Hallo zusammen,

hier noch zum Abschluss wie es jetzt funktioniert. ;-)

define Temperatur_alarm DOIF ([Temperatur:temperature] < 5.0) ({ DebianMail('mail@mail.de','FHEM-Temperatur-Alarm','ACHTUNG - die Außentemperatur ist unter 5 Grad gefallen!');;;; })

Vielen Dank noch mal für den Tipp mit "DOIF" ! ;-)

LG
Fox
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: superdoek am 22 November 2014, 15:18:18
Sehr schön!
Ich rätsel seit 3 Tagen vergeblich an einer Variante, in der mir der Temperaturwert in der Nachricht mitgeteilt wird.
Wer kann mir das umschreiben?
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: foxmulder am 22 November 2014, 18:24:52
Gute Frage....das wäre noch ein nützliches Feature. :-)

Hier gabs schon mal sowas ähnliches...aber habs irgendwie auch noch nicht damit hinbekommen...:-/

http://forum.fhem.de/index.php?topic=25121.0
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: paintyourworld am 18 Januar 2017, 13:31:58
Nunmehr 120 Tage später kommt evtl. ein Ansatz.

define Temperatur_alarm DOIF ([Temperatur:temperature] < 5.0)
({ DebianMail('mail@mail.de','FHEM-Temperatur-Alarm','ACHTUNG - die Außentemperatur ,ReadingsVal("Temperatur", "temperature", "30")');;;; })
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: r00t2 am 18 Januar 2017, 13:58:17
Zitat von: paintyourworld am 18 Januar 2017, 13:31:58
Nunmehr 120 Tage später kommt evtl. ein Ansatz.
...
ReadingsVal könnte klappen. Ich habe in einem at mal etwas ähnliches gemacht. Dort waren es aber so viele Werte, dass ich mir die alle vorher in Variablen habe schreiben lassen - der Übersicht halber.

Also so in etwa (ungetestet!):
define Temperatur_alarm DOIF ([Temperatur:temperature] < 5.0) ({
  # Variablen sammeln
  my $Temperatur = ReadingsVal("Temperatur", "Temperatur");;
  my $ZweiterMesswert = ReadingsVal("Anderes_Geraet", "ZweiterMesswert ");;
  # usw.
 
  # Mail senden
  DebianMail('mail@mail.de','FHEM-Temperatur-Alarm',"ACHTUNG - die Außentemperatur ist gering (" . $Temperatur . " °C) - zweiter Messwert: " . $ZweiterMesswert");;
})
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: paintyourworld am 18 Januar 2017, 15:31:52
Mhhh.. hab es mal mit deiner Beschreibung versucht.
Leider geht keine Email raus. Evtl. einen TIP was nicht stimmt..

*15:25:00 ({my $Temperatur = ReadingsVal("Innentemperatur", "state");; DebianMail('test123@gmx.de,'FHEM-Aktuelle Temperatur,"Die Aktuelle Temperatur ist : (" . $Temperatur . " °C)  ");;
})

( Ich hole mir den Temperaturwert aus der LOGO8! Diese wird mir als "state" in das S7-DRead geschrieben. )
DebianMail funktioniert normalerweise einwandfrei !

gruß pYw
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: r00t2 am 18 Januar 2017, 15:42:18
Zitat von: paintyourworld am 18 Januar 2017, 15:31:52
Mhhh.. hab es mal mit deiner Beschreibung versucht.
Leider geht keine Email raus. Evtl. einen TIP was nicht stimmt...
Was steht denn im Log?
Wie gesagt: Der Code ist ungetestet, da ich gerade nicht an der FHEM sitze.

Edit:
Hier mal ein Auszug aus meinem Code (ist wie gesagt ein at und kein doif):
*08:00:00 {
  # Tägliche Mail zum Systemzustand senden via sendMail
  # Uptime System (FHEM)
  my $uptime = ReadingsVal("sys_Raspberry","uptime_text","");;
  my $fhemuptime_text = ReadingsVal("sys_Raspberry","fhemuptime_text","");;

  # Load average
  my $loadavg = ReadingsVal("sys_Raspberry","loadavg","");;

  # CPU Werte
  my $cpu_freq_stat = ReadingsVal("sys_Raspberry","cpu_freq_stat","");;
  my $cpu_temp = ReadingsVal("sys_Raspberry","cpu_temp","");;
  my $cpu_temp_avg = ReadingsVal("sys_Raspberry","cpu_temp_avg","");;

  # Speicherplatz
  my $ram = ReadingsVal("sys_Raspberry","ram","");;
  my $fs_boot = ReadingsVal("sys_Raspberry","fs_boot","");;
  my $fs_root = ReadingsVal("sys_Raspberry","fs_root","");;

  DebianMail('me@ahost.com','FHEM Daily Mail','Begin FHEM Daily Mail\n---\nSystem Uptime: ' . $uptime . ' (FHEM: ' . $fhemuptime_text . ')\n\nLoad average: ' . $loadavg . '\n\nCPU Temperature: ' . $cpu_temp . ' °C (average: ' . $cpu_temp_avg . ' °C)\nCPU Frequency Statistic: ' . $cpu_freq_stat . '\n\nMemory (RAM): ' . $ram . '\n\nFile System (boot): ' . $fs_boot . '\nFile System (root): ' . $fs_root . '\n---\nEnd FHEM Daily Mail','');;
}


Denke die Struktur sollte ersichtlich sein.
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: pcbastler am 18 Januar 2017, 20:37:28
Zitat von: paintyourworld am 18 Januar 2017, 15:31:52
*15:25:00 ({my $Temperatur = ReadingsVal("Innentemperatur", "state");; DebianMail('test123@gmx.de,'FHEM-Aktuelle Temperatur,"Die Aktuelle Temperatur ist : (" . $Temperatur . " °C)  ");;
Mein Mail macht das einfacher:

DebianMail('irgendeine@mail.de',"Info vom FHEM System","Fritzbox-IP: $dslip, Temperatur: $temperatur, Wohnzimmer: $WZ_temperatur");}

Die Variablen (vorher wie bei dir zugewiesen) werden also direkt ersetzt.

Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: r00t2 am 19 Januar 2017, 10:02:48
Zitat von: pcbastler am 18 Januar 2017, 20:37:28
Mein Mail macht das einfacher:
...
Die Variablen (vorher wie bei dir zugewiesen) werden also direkt ersetzt...
Das funktioniert aber nur, wenn Du doppelte Anführungszeichen ["] verwendest - und nicht bei Einfachen ['].
Denn nur dann wird per Interpolation der Wert der zuvor zugewiesenen Variable richtig in den Ausdruck gesetzt. :)
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: Otto123 am 19 Januar 2017, 10:28:09
Zitat von: paintyourworld am 18 Januar 2017, 15:31:52
Leider geht keine Email raus. Evtl. einen TIP was nicht stimmt..
... DebianMail('test123@gmx.de,'FHEM-Aktuelle
Hi,

da fehlt im markierten Bereich mindestens ein " und das Komma steht falsch!

Gruß Otto
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: r00t2 am 19 Januar 2017, 10:34:49
Stimmt, da fehlen sogar zwei Anführungszeichen, wenn ich richtig gezählt habe (dann steht das Komma auch wieder richtig):

...DebianMail('test123@gmx.de,'FHEM-Aktuelle Temperatur,"Die Aktuelle Temperatur ist : (" . $Temperatur . " °C)  ");;

Sollte eher so sein:
...DebianMail('test123@gmx.de','FHEM-Aktuelle Temperatur',"Die Aktuelle Temperatur ist : (" . $Temperatur . " °C) ");;

Das hätte aber spätestens beim Betrachten der Log-Einträge durch DebianMail auffallen müssen...
Titel: Antw:Mail bei unterschreiten einer Temperatur
Beitrag von: paintyourworld am 19 Januar 2017, 10:47:56
Da stimme ich zu... so funktioniert es wunderbar... aber Danke für die Info!

Kleiner Auszug:
Der Merker M5 wird mit einem Schwellwertblock (Grenzwert) in der LOGO8! beschrieben.
Sobald der Schwellwert über bzw. unterschritten wird, übergibt der M5 an FHEM die Wertigkeit.
( *S7 Connection vorausgesetzt* S7_DRead ** define <Name> S7_DRead {inputs|outputs|flags|db} <DB> <byteaddress>.<bitaddress>  ->> define SPS_M5_Read S7_DRead db 0 1104.4 )
Auch hier sollte im SPS_M5_Read  "attr event-on-change-reading" auf "state" gesetzt werden, sonst bekommt mal je nach *Connection Intervall* immer wieder eine Email, solange die Wertigkeit ansteht!


define LOGO8_M5 notify SPS_M5_Read:on
{
my $Temp = ReadingsVal("Innentemperatur", "state", "30");;
DebianMail('test1223@mail.de','LOGO8! Grenzwert >Max',"Aktuelle: $Temp");;
}