FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Agamemnon am 09 Januar 2014, 13:45:13

Titel: notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: Agamemnon am 09 Januar 2014, 13:45:13
Hallo zusammen,
ich wollte mir gerne eine Mail Warnung bei hoher Luftfeuchtigkeit schicken.
So weit ja recht einfach mit notify (in diesem Beispiel zum debug nur mit Log).


.*:humidity.* {
  if($EVTPART1 > 65) {
   Log 2,"ACHTUNG: Hohe Luftfeuchtigkeit bei $NAME -> Status: $EVTPART1";
  }
}


Problem (das wohl viele haben) ist, dass diese Meldung jedes Mal kommt wenn ein Sensor humidity > 65 meldet.

Habe jetzt schon Lösungen im Forum gefunden die das über einen dummy machen, der dann über Zeit zurückgesetzt wird.
Siehe hier: http://forum.fhem.de/index.php/topic,16432.msg122266.html#msg122266 (http://forum.fhem.de/index.php/topic,16432.msg122266.html#msg122266)

Ich fände es jedoch viel einfacher dafür das THRESHOLD Modul zu verwenden, da es genau das macht was ich erwarte.
Eine Aktion (Mail) wenn der Wert überschritten wird.
Auch das ist noch einfach:
LaCrosse_Keller:humidity:0:65 |{
  Log 2,"ACHTUNG: Im Keller herscht Luftfeuchtigkeit größer 65%";
}


Wie man aber schon sieht müsste ich hier für jeden Sensor ein eigenes THRESHOLD anlegen, da das Modul leider keine * akzeptiert, so wie das notify.
Außerdem gibt es innerhalb des Moduls keine Möglichkeit auf den tatsächlichen Wert zuzugreifen, so wie bei notify mit $EVTPART1.

Gibt es hier noch eine dritte einfachere Möglichkeit, die ich übersehen?
Ist es möglich/angedacht das THRESHOLD Modul um diese Funktionen zu erweitern?

Vielen Dank im Voraus.

Gruß
Matze
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: pillepalle12 am 10 November 2016, 06:58:49
Da ich gerade genau das gleiche Problem habe, schiebe ich das alte Thema nochmal hoch...

hat schon jemand eine gute Überwachung der Luftfeuchtigkeit hinbekommen ohne eine Mailflut zu bekommen?

Ich wäre auch zufrieden wenn das Notify auslöst und dann für 1 stunde Pause macht, kann aber das "event-min-intervall" nicht für den Lacrosse sensor setzen, da sonst meine SVG Kurven zerstört werden....


hat jemand eine gute Idee? Wäre echt dankbar.
Gruss
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: Ellert am 10 November 2016, 07:30:19
Das könnte man mit DOIF (http://fhem.de/commandref_DE.html#DOIF) lösen

Voraussetzung: alle Readings heissen "humidity"
Die Meldung wird einmal pro Gerät erzeugt bei >65 und bei <60 zurückgesetzt.

([":humidity: "] and [$DEVICE:humidity] > 65)
   ((IF (!ReadingsVal("$SELF","hum_$DEVICE",0))
      ({Log 2,"ACHTUNG: Hohe Luftfeuchtigkeit bei $DEVICE -> Status: [$DEVICE:humidity]"},
      setreading $SELF hum_$DEVICE 1)))
DOELSEIF ([":humidity: "] and [$DEVICE:humidity] < 60)
   (IF (ReadingsVal("$SELF","hum_$DEVICE",1))
      (setreading $SELF hum_$DEVICE 0))


und das Attribut

do always 
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: pillepalle12 am 10 November 2016, 07:52:13
Danke schonmal für den Hinweis, ich bekomme aber folgenden Fehler: :'(

Unknown command ((IF, try help. Unknown command ({Log, try help. Please define $SELF first Unknown command DOELSEIF, try help. Unknown command (IF, try help. Unknown command (setreading, try help.
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: kumue am 10 November 2016, 08:00:47
wie hast du Ellert's Code eingegeben ?

In der GUI des DOIF über DEF ?
Oder die fhem.cfg editiert ?
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: Ellert am 10 November 2016, 08:09:36
Zitat von: pillepalle12 am 10 November 2016, 07:52:13
Danke schonmal für den Hinweis, ich bekomme aber folgenden Fehler: :'(

Unknown command ((IF, try help. Unknown command ({Log, try help. Please define $SELF first Unknown command DOELSEIF, try help. Unknown command (IF, try help. Unknown command (setreading, try help.

Welche DOIF-Version hast Du? "version <Name des DOIF>"
Poste mal ein "list <Gerätename>"

Edit: Bei mir funktioniert es, wie es soll, habe ich gerade nochmal getestet.

Wie ein DOIF zu erstellen ist findest Du hier. (http://www.fhemwiki.de/wiki/DOIF/Tools_und_Fehlersuche#Standardisierte_Ger.C3.A4teerstellung_und_Bearbeitung) und auch an dieser Stelle (http://www.fhemwiki.de/wiki/DOIF/Tipps_zur_leichteren_Bedienung#Verwenden_des_DEF-Editors_zum_Erstellen_und_Bearbeiten_des_DOIF)
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: pillepalle12 am 10 November 2016, 08:22:20
Eingegeben hab ich den Code direkt in die fhem.cfg so:


define Luftfeuchtewarner DOIF ([":humidity: "] and [$DEVICE:humidity] > 65)
   ((IF (!ReadingsVal("$SELF","hum_$DEVICE",0))
      ({Log 2,"ACHTUNG: Hohe Luftfeuchtigkeit bei $DEVICE -> Status: [$DEVICE:humidity]"},
      setreading $SELF hum_$DEVICE 1)))
DOELSEIF ([":humidity: "] and [$DEVICE:humidity] < 60)
   (IF (ReadingsVal("$SELF","hum_$DEVICE",1))
      (setreading $SELF hum_$DEVICE 0))



bei Version bekomme ich folgende Meldung (?):

no loaded modules found that match: Luftfeuchtewarner
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: kumue am 10 November 2016, 08:28:44
leg mal ein DOIF-Template in der Form an.

define Luftfeuchtewarner DOIF ([00:00])

Dann kannst Du in der GUI das DOIF "öffnen" (liegt sicher im Raum Unsorted) und bei Internals auf DEF klicken.
Der Editor öffnet sich und dort dann Ellert's Code reinkopieren.
Die ([00:00]) natürlich überschreiben.
Button modify klicken und dann sollte das DOIF funktionieren.
Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: Ellert am 10 November 2016, 08:31:41
Die cfg sollte man nur editieren, wenn man weiss, wie man es richtig macht und sonst den DEF-Editor nutzen.

Es hätte "version DOIF" heissen müssen, mein Fehler.

Also mal den Links in Antwort 5 folgen und lesen.

Titel: Antw:notify mit zeit dummy oder THRESHOLD mit Erweiterung
Beitrag von: pillepalle12 am 10 November 2016, 08:36:20
Version DOIF ergibt:
98_DOIF.pm 12215 2016-09-26 21:02:49Z damian-s


@kumue, ich habe jetzt ein UPDATE gemacht und bin nach Deiner Anleitung vorgegangen, jetzt scheint es zu klappen.


VIELEN DANK EUCH BEIDEN!!!

Zur Vervollständigung, hier mein funktionierender Code mit humidity und Einschränkung auf Geräte, die Mit "T_" beginnen:


define Luftfeuchtewarner DOIF (["^T_:humidity: "] and [$DEVICE:humidity] > 70)\
   ((IF (!ReadingsVal("$SELF","hum_$DEVICE",0))\
      ({DebianMail('xxxxxx@xxx.com', 'Luftfeuchte bei $DEVICE mit [$DEVICE:humidity]%', "FHEM ACHTUNG: Hohe Luftfeuchtigkeit bei $DEVICE -> Feuchte: [$DEVICE:humidity]%");;;;Log 2,"ACHTUNG: Hohe Luftfeuchtigkeit bei $DEVICE -> Feuchte: [$DEVICE:humidity]%"},\
      setreading $SELF hum_$DEVICE 1)))\
DOELSEIF (["^T_:humidity: "] and [$DEVICE:humidity] < 60)\
   (IF (ReadingsVal("$SELF","hum_$DEVICE",1))\
      (setreading $SELF hum_$DEVICE 0))

attr Luftfeuchtewarner do always