Hallo
ich steh wieder einmal an...
Seit einiger Zeit versuche ich den Richtigen code zu finden, komme aber nicht ganz dahinter.
Mir ist es gelungen, dass mir FHEM mails schickt, jetzt möchte ich, dass ich eine Benachrichtigung bekomme, wenn ein Messwert eine bestimmte Grenze übersteigt.
Der Wert ist ein aus einem MYSENSOR - Watermeter und hier möchte ich, dass wenn der Flow über 150l liegt, mir ne mail geschickt wird.
attr MYSENSOR_100 mapReading_flow1 1 flow
wäre der Wert, den ich überwachen möchte.
mein ansatz wäre
attr MYSENSOR_100 event-on-change-reading {if flow1 > 150 {DebianMail('empfaenger@mail.de','Feuchtecheck','ACHTNG überhöhte Wasserentnahme!');;;;}}
das klappt aber irgendwie gar nicht...
wie genau sollte der synthax von event-on-change-reading aussehen? ist die Prüfung mit "if flow1 > 150" so richtig?
kann mir ev. jemand tips geben?
Danke euch.
Das event-on-change-reading hat da eigendlich nichts zu suchen, wenn du das device auswerten willst, dann mit ReadingsVal oder Value wenn nicht numerisch.
Zu dem Mail Teil kann ich IMO nichts sagen aber wenn der Codeteil so OK ist.
In der Art:
{if (ReadingsVal("device","reading","default") > "wert") {fhem .... dann mache ....}}
VG
Frank
ok soweit kann ich folgen, was bewirkt eigentlich das "default" bei readingsval?
nächste frage wäre dann, muss ich ein notify erstellen oder kann ich das als attr eines devices definieren?
1 Der default Rückgabewert
2 notify ja
3 geht nicht als Attribut
also gut, ich habe das jetzt versucht, bekomme aber weder eine fehlermeldung noch eine email...
woran kann das liegen?
hier mein code
define Wasserverbrauch notify {if ReadingsVal("MYSENSOR_100","flow1","default") > 2) {DebianMail('empfänger@domain.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch > 30L');;}}
mail senden generell funktioniert aber da ich als test täglich ne mail schicke....
hier der sensor den ich bewerten möchte
define MYSENSOR_100 MYSENSORS_DEVICE 100
attr MYSENSOR_100 IODev SerialGate
attr MYSENSOR_100 alias Wasser
attr MYSENSOR_100 config M
attr MYSENSOR_100 mapReading_flow1 1 flow
attr MYSENSOR_100 mapReading_value11 1 value1
attr MYSENSOR_100 mapReading_volume1 1 volume
attr MYSENSOR_100 mode node
attr MYSENSOR_100 room 00_Sensornet
attr MYSENSOR_100 setReading_value11 1
attr MYSENSOR_100 stateFormat volumen m3 <br/> flow1 l
attr MYSENSOR_100 userReadings volumen {ReadingsVal("MYSENSOR_100","volume1",0)+801.1781}
attr MYSENSOR_100 version 1.4.1
Was gibt denn
{ReadingsVal("MYSENSOR_100","flow1",0)}
eingegeben in der Kommandozeile von fhem zurück?
Hallo,
ich bin zwar auch kein Crack aber was mir auf Anhieb auffällt ist das einzelne @ versuch es mal mit
define Wasserverbrauch notify {if ReadingsVal("MYSENSOR_100","flow1","default") > 2) {DebianMail('empfänger@@domain.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch > 30L');;}}
Ich glaube dann sollte es funktionieren.
Grüße
Wird es nicht! Er sagt ja, dass der Mail Teil funktioniert aber "default" ist nicht numerisch und sollte etwas numerisches als default Rückgabewert enthalten und nicht einfach den String default.
Mal in die commandref sehen, dass sind fhem Grundlagen.
Klammern fehlen übrigends auch ;)
Zitat von: Michl1003! am 30 August 2015, 20:54:22
also gut, ich habe das jetzt versucht, bekomme aber weder eine fehlermeldung noch eine email...
also scheinbar klappt es nicht mit der Mail.
Ich habe leider keinen Mailalarm mehr in dieser Variante, sonst hätte ich dir meinen Code gerne kopiert.
Den Code hatte ich hier im Forum als Codeschnipsel gefunden.
Aber Franky08 kann dir sicher besser helfen als ich!
NACHTRAG: mit der Suche findet man ein Bsp. das helfen könnte.
define Temperatur_alarm notify ([Temperatur:temperature] < 10) ({ DebianMail('info@@all4everyone.de','FHEM-Temperatur','ACHTUNG - Temperatur zu niedrig!');;;; })
ich verschicke täglich ne mail mit
define testmail at *21:35:00 {DebianMail('sadfasdf@asdfas.at','Feuchtecheck','Bewässerung auf off');;;;}
das funktioniert...
aber das mit der Mail wenn bedingung erfüllt ist, das funkt leider nicht....
Wie oben schon geschrieben, Test auf Kommandozeile machen und im Event Monitor ggf. mal nachsehen was der Sensor überhaupt für Readings liefert!
define Temperatur_alarm DOIF ([MYSENSOR_100:flow1] >2) ({ DebianMail('blahhh@@blahhhh.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch zu hoch');;;; })
Versuch mal.....wenn das nicht geht muss ich leider aufgeben.
Franky08 hat dir ja auch einen Vorschlag gemacht um an die Lösung zu kommen.
Grüße
@Knallfrosch
Das kann nicht funktionieren, siehe commandref zu notify! Das sieht ehr nach DOIF aus ;)
Zitat von: franky08 am 30 August 2015, 21:40:56
@Knallfrosch
Das kann nicht funktionieren, siehe commandref zu notify! Das sieht ehr nach DOIF aus ;)
Asche auf mein Haupt.....ich habe es gerade schon korrigiert!
Anfänger hilft Anfänger.....das kommt dann dabei raus... ;D
ich bin ja auch nicht so der programmierer, aber ich glaube, steckt ja schon im namen, dass irgendwas wie doif oderirgendwas nach update richtiger wäre, vom gefühl her...
ach ja, der funktiioniert auch nicht.
define Wasserverbrauch DOIF ([MYSENSORS_100:flow1] > 10) ({ DebianMail('sdsdfasdf@@dasdf.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch hoch!!');;;; })
übrigens, auch wenn du ein anfänger bist, ich bin froh, dass mir irgendwer dabei hilft..
jede hilfe ist willkommen!
Und ich warte noch auf die Ausgabe der Kommandozeile ohne zu Wissen welche Event´s das device generiert, wirst du nicht weiter kommen (Event Monitor)
tut mir leid das mein Vorschlag so nicht auf Anhieb funktioniert.
versuch es mal bitte noch mit nur einem @ im Code!
Ich finde den Hinweis nicht mehr warum ich @@ in meinem Code habe für die eMailbenachrichtigungen die ich noch verwende.
Ansonsten kann ich dir nur den Tipp geben hier die Suche zu bemühen.....in irgendeinem Thread habe ich die Lösung auch schon gefunden.
auf die gefahr hin, dass ich mich jetzt absolut peinlich mache, wie mach ich das mit der komandozeile und dem Eventmonitor? wenn ich auf eventmonitor klicke bekomm ich zwar jede menge einträge aber vom mysensor_100 is nix dabei
oder vom mail...
@michl
versuche mal in deinem doif ein "set" einzubauen...
define Wasserverbrauch DOIF ([MYSENSORS_100:flow1] > 10) ( set { DebianMail('sdsdfasdf@@dasdf.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch hoch!!');;;; })
Zitat von: franky08 am 30 August 2015, 21:06:19
Was gibt denn
{ReadingsVal("MYSENSOR_100","flow1",0)}
eingegeben in der Kommandozeile von fhem zurück?
Rufe den Eventmonitor auf......links im Menü und dann gib oben in der Kommandozeile den Code ein.
@Knallfrosch: danke
@franke08: ausgabe von {ReadingsVal("MYSENSOR_100","flow1",0)} ist 0.00 (klar, weil jetzt kein wasser fließt)
Der Event Monitor hat einen Filter, (beim Klick auf das Fragezeichen) dort kannst du nach dem gewünschten device filtern und bekommst nur die Events davon.
Die Kommandozeile ist da wo du z,B. den Befehl update eingibst.
So, dann ist schon mal die if Bedingung richtig ;)
Wenn ich jetzt Code poste, dann ist das für die Def im Webif von fhem gedacht und NICHT direkt für die fhem.cfg!!!
define <Name> notify <device> {if (ReadingsVal("MYSENSOR_100","flow1",0) > 2) { DebianMail('sdsdfasdf@@dasdf.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch hoch!!')}}
Kann stimmen, muss aber nicht! Kann sein das die @@ und/oder die ´´ nicht OK sind
Ich verwende DebianMail nicht
@Franky08: hast du eine Idee warum mein Vorschlag mit dem DOIF nicht funktioniert?
alles klar, ich werde das testen und geb dann morgen wieder bescheid... der nachwuchs verlangt nach meinem typ...
danke einstweilen!
selbst wennst nicht funkt, hab ich doch was dazu lernen dürfen!
Neee, leider nicht, DOIF kam erst als ich mir schon etwas Perl angeeignet hatte und alles über notify oder Perl in der Utils lösen konnte, DOIF war mir da zu "aufgebläht" und ich habe es nie benutzt und desshalb mich auch nie mit der Syntax beschäftigt ;)
wenns ein "set" nicht tut, könnte vielleicht ein "send" hilfreich sein, um dem DOIF zu sagen, was es denn tun soll.
Vorausgesetzt, der Teil mit Mail etc funktioniert.
vb
@VB90
Mmh wo siehst du das set oder send? Der Aufruf DebianMail geht an eine sub in der Utils, da braucht es kein set und send ist in der Mail Routine "verbaut".
franky, das ich keines von beiden gesehen habe, machte mich ja stutzig.
Das es im Fall von DebianMail nicht nötig ist, war mir unbekannt da ich es nicht nutze, aber da Ideen gefragt waren... ;)
vb
Hallo,
jetzt hat mich ja doch der Ehrgeiz gepackt und ich behaupte mal das der folgende Code funktionieren sollte.
Ich hatte eben "gepennt"....da hat ja nämlich bissel was gefehlt.
@Michl: teste mal bitte folgendes
define Wassermenge_Alarm notify MYSENSOR_100:flow1.* {if (ReadingsVal("MYSENSOR_100","flow1",0) > 2) {debianmail('blah@@blah.at', 'FHEM Warnung', 'Wasserverbrauch zu hoch')}}
Einzigst ob es @ oder @@ sein muss kann ich nicht 100% sagen.
Bei mir funktioniert es jedenfalls nur mit @@
Bitte berichte mal ob es so funktioniert!
Grüße
Joh, ist so wie ich es oben schon gepostet habe (ohne das device und den Namen direkt anzugeben) ;)
Ich habe da ja noch Verwirrung mit dem DOIF gestiftet.
Jetzt wo du es sagst....du hattest die Lösung ja eigentlich schon gepostet. :o
Ich hatte mich jetzt nochmal dran gesetzt und mir aus den Bsp. in der Commandref und dem Forum was zusammengebastelt.
Ich tue mich mit den Befehlen einfach schwer.
Franky08, einigen wir uns darauf das wir die Lösung gemeinsam gefunden haben? ;-)
Wenigstens ein kleiner Streichler für mein Ego.....hihi!
Grüße und gute N8
Thorsten
Na klar aber erst wenn er es getestet hat, Thorsten ;D ;)
P.S. durch fhem habe ich mittlerweile drei Perl Bücher und Linux Referenzen, bringt einen ungemein weiter 8)
VG
Frank
guten morgen oder besser Mahlzeit....
also ich kann euch mitteilen, dass folgende zeile in der fhem.cfg den erfolg brache:
define Wasserverbrauch notify MYSENSOR_100 {if (ReadingsVal("MYSENSOR_100","flow1",0) > 15) { DebianMail(asdf@@asdf.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch hoch!!')}}
ABER: das ist leider nicht das gelbe vom Ei!
mein Sensor loggt zwar brav immer 12l (mehr geht ja auch nicht durch die Leitung bei voll aufgedrehten Wasserhähnen binnen 15sec) aber das Problem ist, dass mir das nix bringt, denn ich habe heute in der früh ca. 250 mails mit der Benachrichtigung bekommen :-O
Fazit: eigentlich möchte ich ja wissen, wenn das wasser über einen längeren Zeitraum fließt, und wie viel Liter da geflossen sind... nicht, wenn 12l fließen...
zb.: sollte das wasser länger als 30min laufen, dann mail oder sollten auf einmal mehr als 100l entnommen werden (Zeitraum ist egal aber durchgängig) dann mail...
wie kann ich das loggen? meine Idee: FHEM merkt wenn wasser aufgedreht wird und "notiert" die Zeitspanne der wasserentnahme und die menge... sollte ein wert eine Grenze überschreiten -> MAIL....
geht so was???
Ich persönlich würde .... in Pseudocode
1.
Wenn mehr als X Wasser -> Dummy auf 1
Wenn weniger als Y Wasser -> Dummy auf 0
(Y < X um etwas Toleranz zu haben, Stichwort Hysterese)
2.
Wenn Dummy länger als T on, dann -> Mail
Gibt natürlich noch mehr Lösungen ...
ich steck schon wieder fest!
wollte jetzt ein DOIF erstellen, selches einen Dummy auf ON stetzt wenn mein MYSENSOR einen Flow ausgibt.
Wenn ich beim Eventmonitor {ReadingsVal("MYSENSOR_100","flow1",0)}
eingebe bekomme ich den flow-wert. passt ja auch so weit.. jetzt wollte ich
define di_WasserOn DOIF ({ReadingsVal("MYSENSOR_100","flow1",0)}>0) (set Wasserdum on) DOELSE (set Wasserdum off)
aber bekomme nur die Fehlermeldung "di_WasserOn DOIF: no trigger in condition: {ReadingsVal("MYSENSOR_100","flow1",0)}>0"
habs auch schon so versucht:
define di_WasserOn DOIF ([MYSENSOR_100]:flow1>0) (set Wasserdum on) DOELSE (set Wasserdum off)
und bekomme nur "initialized" als State...
was mach ich falsch?
guten morgen
wieder einen Schritt weiter!
die Übertragung an einen dummy funktioniert...
define di_WasserOn DOIF ([MYSENSOR_100:flow1]>0) (set Wasserdum on) DOELSE (set Wasserdum off)
schaltet mir den Dummy ...
mittlerweile habe ich auch herausgefunden, wie ich den Zeitstempel auslesen kann -> also kann das als Bedingung verwenden...
ich dachte mir, folgende Vorgehensweise:
1. Prüfen ob Dummy = On
2. Wenn dummy ON - wie lange ist der Schon on?
3. Wenn dummy ON-Zeit länger als x-Min -> Emailbenachrichtigung...
als Code könnte das so aussehen
define Wasserverbrauch notify MYSENSOR_100 {if (ReadingsVal("Wasserdum","state",0) = "on") {if (localtime()-ReadingTimestamp("Wasserdum","state",0) > 2) ({ DebianMail('sdfad@sdfgdfg.at','Sicherheitsbericht','ACHTUNG - Wasserverbrauch hoch!!')})}
theoretisch sollte das funktionieren...
TUT ES ABER LEIDER NICHT :'(
wieso rechnet der das nicht???
ich vermute meinen fehler irgendwo bei
{if (localtime()-ReadingTimestamp("Wasserdum","state",0) > 2)
weil der rest funktioniert ... =getestet...