hallo!
ich habe meine fritzbox 7390 mit fhem und hier nun nach WIKI-Vorlage eine alarmanlage programmiert..
nun würde ich die aber gerne noch optimieren.
ich hab z.b. 4 türkontakte (homematic), und würde gerne ein mail generieren, wenn einer der türkontakte öffnet, dabei aber im mail dann die info reinbringen, welcher kontakt es war.
die türkontakte heissen z.b.
KEingang
KTerrasse
KKeller
wenn ich einen notifier definiere - wie kann ich da in dem mail das ich versende den auslösenden kontakt als variable übergeben??
define OPEN_INFO notify K.*:open { use FritzBoxUtils;; FB_mail('mail@@dom.com' (@@dom.com'),' ===>>HIER DIE VARIABLE <<=== geöffnet','Mailtext...')}
Welche Syntax benötige ich hier?
Und gleiches Problem noch z.b. bei laufendem Batteriecheck.
Es soll 1x täglich der Batteriestatus aller Geräte gecheckt werden, wenn nicht "ok" ein Mail erzeugt werden
Wie müsste ich die if-abfrage im notify gestalten, dass alle kontakte ausgelesen werden und dann noch in der mail der richtige auslöser aufscheint?
define KTerrasseEGBatteriecheck at +*23:59:59 { if (ReadingsVal ("K.*","battery","ok") ne "ok") { \
use FritzBoxUtils;; FB_mail('mail@dom.com ('mail@dom.com),'Batterie nicht OK bei Sensor ==>>VARIABLE??<<==,'Mailtext...')\
}
Die Variable @ enthält den auslösenden devicenamen, die Variable % den auslösenden event.
Siehe http://fhem.de/commandref.html#perl (//fhem.de/commandref.html#perl)
Gruß, Uli
Hallo,
wie von Uli schon genannt @ und %.
Den Batteriecheck solltest du nochmal mit dem Check im Wiki vergleichen.
Warum willst du täglich um 23:59:59 Uhr den Status abfragen wenn die Devices den Status sowieso immer übertragen?
Lass dir doch ne Mail schicken wenn die Batterie leer ist und nicht erst um Mitternacht ;-)
Grüße
hmm..
also müsste die syntax dann so aussehen?
define OPEN_INFO notify K.*:open {use FritzBoxUtils;;FB_mail('mail@@dom.com' (@@dom.com'),@' geoeffnet','Kontakt '@' wurde geoeffnet!')}
und für die batteriewarnung?
define BATT_K_INFO notify .* { \
if (ReadingsVal (@,"battery","ok") ne "ok") {\
use FritzboxUtils;; FB_mail('mail@@dom.com' (@@dom.com'),'Batterie '@' Warnung!','Warnung Batterie für Sensor ' @ '! Status '%' erkannt!')\
}\
}
würde das so passen? oder ist die syntax innerhalb des FB_mail-commands noch nicht ganz korrekt?
EDIT: Ich hab's grad getestet - die korrekte syntax für's mail ist:
FB_mail('mail@@dom.com' (@@dom.com'),'Sensor @ geändert','Mailtext... ')
Nun noch die frage: Funktioniert meine Idee mit
define BATT_K_INFO notify .* ... eigentlich? Würde er damit bei jedem sensor die abfrage und den befehl ausführen?
Hallo,
die n_batt_check sieht bei mir so aus
define n_batt_check notify .*:[Bb]attery.* {
if("%" !~ m/ok/) {
if (Value("Zustands_Warnung") eq "OK") {
fb_mail('name.name@provider.land','FHEM Zustandswarnung','@ %');
Log 3, "@: Batteriewarnung %";
fhem ("set Zustands_Warnung on");
}
}
}
@ Wird durch den Namen des auslösenden Gerätes ersetzt und
% durch die Aktion
In der Mail sollte dann sowas stehen wie
ZitatBetreff: FHEM Zustandswarnung
DG_Badezimmer_Heizung: battery low
Wobei ich bei mir aber leider nur die Log-Einträge aber keine Mails (mehr) bekomme.
Ich bin noch auf der Suche nach dem Grund weil
fb_mail('name.name@provider.land',$Eventname);
aus einem anderen Notify einwandfrei funktioniert.
Evtl. hast du ja mehr Glück.
Grüße
Edit:
Zu
ZitatNun noch die frage: Funktioniert meine Idee mit
define BATT_K_INFO notify .* ... eigentlich? Würde er damit bei jedem sensor die abfrage und den befehl ausführen?
Bei diesem Notify müsste fhem, wenn überhaupt, dann aber auf alles anspringen was so in der Luft geschwirrt kommt resp. bei dir definiert ist und irgendeinen Status überträgt.
Du kannst es mal versuchen mit .*
aber besser wäre
define BATT_K_INFO notify K.*:.*
Da deine Sensoren, leider, K als gemeinsamen Anfangsbuchstaben haben greift diese Variante nur bei Geräten die mit "K" beginnen.
Kleiner Tipp: Umbennen in TK_Eingang, TK_Terrasse, TK_Keller und das Notify von K.*:.* auf TK_.*:.* anpassen.
So kannst du später mal alles was mit TK (TürKontakt) anfängt leichter ausfiltern.
Aber wie immer. Alles ungetestet und ich bearbeite nur die DEF eines Notify also sind keine Zeichen geschützt in meinen Codes.
Wenn du die *.cfg direkt bearbeitest musst du dich bitte um den Schutz selber kümmern (\ am Zeilenende, ; wird gedoppelt ;; , usw.)
Grüße
Edit2:
(define n_batt_check notify eingefügt)
Danke!
Die definierten "K.." sind ausschliesslich Kontakt-Sensoren, entsprechen also dem was du vorgeschlagen hast.
Bewegungsmelder beginnen mit "M.." .. etc..
Im Grunde will ich ja von allen Sensoren den Batteriestatus. Deinen Vorschlag mit notify .*:[Bb]attery.* hab ich mal so übernommen und frag dann wie bisher ab, wenn nicht ok dann mail..
Bzgl. deines mailproblems:
muss der Befehl use FritzBoxUtils nicht vor jedem FB_mail (...) stehen oder reicht es, den einmal in die cfg (ganz zu beginn) zu schreiben?
und ist FB_mail nicht Case-Sensitiv? Du hast's "fb_mail" genannt...
Nur so eine Idee, so ganz firm bin ich da noch nicht..
Hallo,
ZitatIm Grunde will ich ja von allen Sensoren den Batteriestatus. Deinen Vorschlag mit notify .*:[Bb]attery.* hab ich mal so übernommen und frag dann wie bisher ab, wenn nicht ok dann mail..
was meinst du damit?
Mit dem geposteten
define <Name_des_Defines> notify .*:[Bb]attery.*
werden alle Sensoren abgefragt.
<Name_des_Notify> ist bei mir nur n_batt_check weil es so im Wiki steht ;-)
Jeder Sensor (notify .*:) welcher einen Status namens Battery oder battery ([Bb]attery.*)überträgt löst dieses Notify aus.
In diesem wird geprüft ob
if("%" !~ m/ok/) {
der übertragene Status nicht ok lautet.
Wen dem so ist, die Batterie also nichtmehr ok ist, wird der Rest abgearbeitet wenn der Dummy nicht schon auf Warnung steht (also auch nicht ok ist).
Zu meinem Mailproblem.
Wie geschrieben funktioniert ja
fb_mail('name.name@provider.land',$Eventname);
aus einem anderen Notify einwandfrei. Nur die Batteriewarnung bekomme ich nichtmehr per Mail geliefert.
In meiner 99_MyUtils.pm habe ich auch ein fb_mail eingetragen (sonst würde ja das andere Notify nicht klappen).
Aber ich bin auch für Ideen dankbar - manchmal übersieht man auch was ganz einfaches.
Grüße
das mit dem notify .*:[bB]attery.* habe ich so übernommen.
vorher hatte ich nur notify .* ohne konkreten parameter, das hätte also immer ausgelöst.
> wie von Uli schon genannt @ und %.
Nur mal so als Tip:
- The character % will be replaced with the received event, e.g. with on or off or measured-temp: 21.7 (Celsius)
It is advisable to put the % into double quotes, else the shell may get a syntax error.
- The character @ will be replaced with the device name.
- To use % or @ in the text itself, use the double mode (%% or @@).
- Instead of % and @, the parameters %EVENT (same as %), %NAME (same as @) and %TYPE (contains the device type, e.g. FHT) can be used. The space separated event "parts" are available as %EVTPART0, %EVTPART1, etc. A single % looses its special meaning if any of these parameters appears in the definition.
Es ist vielleicht manchmal einfacher mit %EVENT, %NAME, %TYPE und %EVTPARTn zu arbeiten anstatt mit @ und %, wenn man später vergessen hat, wofür diese eigentlich stehen.
Gruß Martin
Danke für eure Hilfe, damit kann ich schon viel anfangen.
Vor allem ist es damit recht gut möglich, div. Statusmeldungen/Infomails zu verallgemeinern und damit den Progcode kurz zu halten.
Mir ist aufgefallen das die Performance/Reaktionszeit von FHEM bei längerem code mitunter doch recht langsam wird...