Mail bei zu grosser Soll / Ist Abweichung

Begonnen von Grizzly, 08 Februar 2015, 15:17:50

Vorheriges Thema - Nächstes Thema

Grizzly

Hallo zusammen,
ich möchte gerne eine Email erhalten wenn die Temperaturdifferenz zwischen soll und ist länger als X minuten größer Y ist.

Könnt ihr mir da helfen? Ich habe noch keine Ahnung wie ich das anstellen soll.

Raspberry Pi,
FHZ1000PC
fht80b
fht8v

TomWest

Habe ich irgendwo im Forum und/oder wiki gefunden, macht fast, was Du willst. Vorher muss ein dummy definiert werden

define minTemp.dum dummy
attr minTemp.dum setList on off
danach kannst Du über ein Notify die Mail verschicken lassen. Der Dummy sorgt hier dafür, dass man maximal jede halbe Stunde eine Mail bekommt.

.*measured-temp:.* {
if ((ReadingsVal("minTemp.dum","state","off") eq "off") && ($TYPE ne "readingsGroup")) {
if (($EVTPART1<=10)||($EVTPART1>=30)) {
fhem("set minTemp.dum on");
fhem("define at.minTemp.dum.off at +00:30:00 set minTemp.dum off");
Log3 $NAME, 1, "Temperaturalarm: Device $NAME, Temperatur liegt bei $EVTPART1 Grad";
DebianMail('ich@hier.de', 'Temperaturalarm', "Alarm: Device $NAME, Temperatur liegt bei $EVTPART1");
}
}
}
FHEM on R-π - HM-TC-IT-WM-W-EU - HM-LC-Sw1-FM - HM-SCI-3-FM - HM-CC-RT-DN

Grizzly

Tut mir leid wenn das doof klingt, aber wo lege ich min Temp fest? Und wie das ist doch wahrscheinlich ein fester Wert, oder? Wie mache ich das denn mit der Temperatur Differenz?

devil77

Wer liefert denn übehaupt die Werte soll und ist Temperatur?

Weisswurstverkäufer

Ich habe etwas ähnliches für den CO2 Gehalt im Wohnzimmer, der IST-Wert kommt dabei von Netatmo.

Hierfür habe ich mir ein Notify gemacht (gekürzt, ich habe noch eingebaut dass ich zuhause sein muss und noch nicht notifiziert wurde):

netatmo_wohnzimmer:co2.* {
my $co2= $EVTPART1;
if ($co2 > 1000) {
prowl("Lüften", "CO2 Wert liegt bei " . $co2 . "ppm", 0);
}
}


prowl ist auch eine Methode die mir eine Push-notification auf iPhone/iPad sendet, das lässt sich sicher auch durch eine E-Mail ersetzen.

Musst allerdings beachten, dass du jetzt immer wieder eine neue Nachricht bekommst bis der SOLL-Wert wieder unterschritten ist

devil77

Könnte man da nicht mit threshold und doif arbeiten? Das sollte jeweils bloß einmal auslösen.

Grizzly


Puschel74

Und min und max gibst du vor - wer auch sonst  :)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Grizzly


Puschel74

#9
Schau dir nochmal den Code von TomWest an.
Dort findest du das Zeichen kleiner gleich und größer gleich - das wäre dann dein gesuchtes min und max.

Edith: Arrgh - sorry.
Zitatwenn die Temperaturdifferenz zwischen soll und ist
Die Differenz lässt sich ja mit Solltemperatur-Isttemperatur ausrechnen.
Zitatlänger als X minuten größer Y ist.
Evtl. geht das mit einem watchdog - da bin ich aber nicht so firm drin.
Alternativ würde ich mir im Code bei einem überschreiten der minimal zulässigen Abweichung ein at definieren das die Nachricht schickt.
Sollte innerhalb der Zeit die Differenz kleiner werden würde ich das at wieder löschen.

Edith2:
Gedankenschubs (NICHT fertig und voller Fehler und NICHT für die fhem.cfg gedacht - es sei den du stehst auf Fehlermeldungen  ;) ):
define <beliebiger_Name> notify .*measured-temp:.* {
  my $measured_temp=ReadingsVal("$NAME","measured-temp",99);
  my $desired_temp=ReadingsVal("$NAME","desired-temp",99);
  my $Abweichung=$desired_temp-$measured_temp;
  if ($Abweichung >= 2) {
    fhem("define $NAME_message at +00:10:00 xxxxxxxxx") if(("$NAME_message") eq "");
  }
  if ($Abweichung <= 1) {
    fhem("delete $NAME_message") if(("$NAME_message") ne "");
  }
}

- Ein notify das auf alles "hört" was measured-temp sendet
- da wir mit $NAME das Gerät wissen legen wir uns 2 Variablen an die Soll- und Isttemperatur beinhalten.
  (der Name der Variablen ist egal und ich weiß auch noch nicht ob das mit $NAME IM Variablenname so klappt - im ReadingsVal sollte es so gehen)
- in $Abweichung wird die Differenz berechnet
- das erste if prüft ob die Abweichung > 2 beträgt und erstellt ein at mit $NAME im Namen das in 10 Minuten ausgeführt wird WENN es nicht bereits angelegt ist (sonst meckert FHEM rum und die nächste Frage kommt bestimmt  ;D )
- mit dem xxxxxxxxxx bin ich mir noch nicht sicher ob ein Macro triggern oder in die 99_myUtils verzweigen besser ist, ich weiß nur noch nicht wie ich $NAME über die 10 Minuten retten kann
- im zweiten if wird geprüft ob die Differenz kleiner gleich 1 und wenn ja wird das at (zu DIESEM Device) wieder gelöscht WENN es existiert.
$NAME habe ich deswegen verwendet da du vermutlich mehr als einen FHT hast und somit das at nichtmehr eindeutig wäre.
So wird für jeden FHT (dessen Differenz zu groß ist) ein eigenes at angelegt und FHEM kann nicht meckern das ein at bereits existiert.

Edith3: $NAME aus dem Variablennamen entfernt da unnötig.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.