Hallo Zusammen,
ich würde gerne eine kleine Anwendung in FHEM schreiben/konfiguieren,
welche mir folgende Funktion realisiert, jedoch fehlt mir derzeit der erste Einstieg.
- Batteriestatus im Floorplan anzeigen
- eMail senden, wenn eine Batterie Status auf Low steht.
Ich will lernen, wie ich auf Ereignisse mit einem Script reagiere.
Ähnliche Beispiele wären auch o.k.
Gruss R.
Hi,
als 1. Anlaufstelle könnte evtl. das Wiki geeignet sein:
Code-Beispiele (//www.fhemwiki.de/wiki/Kategorie:Code_Snippets)
HowTos (//www.fhemwiki.de/wiki/Kategorie:HOWTOS)
Wenn dann Probleme / spezielle Fragen auftauchen... immer her damit.
Gruß
Thomas
Hallo Thomas,
irgendwie bekomme ich den Dreh nicht hin, den simplen Batteriestatus in Floorplan darzustellen.
Ich habe die Batterie Wiki's gelesen. Hier wird ja eine eMail versendet. Installiert habe ich die eMailzusätze,
nur Testen muss ich die eMail noch. Das aber erst später.
Ich will aber als Anfänger erst mal den simple Batterie Status in meinem Floorplan darstellen.
Derzeit habe ich das mit den ReadingVals() noch nicht ganz verstanden.
Gruss R.
Zu obigen Vorhaben kann ich nichts beitragen.
Geht es aber darum, dass Du benachrichtigt werden möchtest, wenn ein FHTTK-2 sich nicht mehr meldet
- z. B. wenn dessen Batterie leer ist - oder er defekt ist,
dann mache es doch so:
http://forum.fhem.de/index.php?t=msg&goto=65102&rid=932&srch=checkalive#msg_65102 (//forum.fhem.de/index.php?t=msg&goto=65102&rid=932&srch=checkalive#msg_65102)
Ich habe das so realisiert, hatte allerdings noch keine leere Batterie und kann deshalb nicht sagen ob das so funktioniert wie ich mir das gedacht habe:
ein Dummy für den allgemeinen Batteriestatus
- das webCmd attribut OK ist zum zurücksetzen
- wenn der Status des Dummy auf "NotOK" wechselt muss ich im Log nachsehen welches Gerät das ausgelöst hat, könnte man natürlich auch anders lösen, z.B. den Status auf den Gerätenamen setzen der nicht ok gemeldet hat
define Batteriestatus dummy
attr Batteriestatus group System
attr Batteriestatus room z_Uebersicht
attr Batteriestatus webCmd OK
ein Notify zum Setzen des Dummystatus:
define n_batt_chk notify .*:[Bb]attery.* { if("%" !~ m/ok/) {\
set Batteristatus "NotOK";;\
Log 3, "@: Batteriewarnung %";;\
}\
}
Im Floorplan den Dummy aufnehmen:
(siehe Anhang / see attachement)
sieht dann so aus:
(siehe Anhang / see attachement)
Hi,
ich dachte eigentlich eher an sowas wie:
attr mybattery userReadings Battery1 { ReadingsVal("mybattery","BatteryState",0); }
Würde sowas gehen, wenn ich das für jede Komponente machen würde. Die Daten sind doch schon im System,
ich müßte doch deswegen kein Notify machen, oder ?
Später dachte ich somit auch Messwerte der Thermostate darzustellen, der Batterie-Status sollte eigentlich
ein einfaches Beispiel sein.
Den notify dachte ich zentral für die eMail, was das nächste Thema wäre, wenn das läuft.
Gruss R.
Ok,
ich vermute mal, das eine Dummy Variable nur über den Set Befehl aufgesetzt werden kann.
Daher versuche ich es derzeit mit dem folgenden Code:
define bdFensterkontaktBattery dummy
define bdFensterkontaktBat_Chk notify bdFensterkontakt.battery
{ if("%" !~ m/ok/)
{\
set bdFensterkontaktBattery "NotOk";;\
}\
else
{\
set bdFensterkontaktBattery "Ok";;\
}\
}
Im Logfile steht folgende Meldung:
2013-04-18_18:47:12 bdFensterkontakt battery: ok
2013-04-18_18:47:12 bdFensterkontakt onoff: 0
2013-04-18_18:47:12 bdFensterkontakt closed
Aber der Status der Variable bleibt bei "???".
Wo liegt mein Fehler .
Gruss R.
Hallo,
sollte das
Zitatdefine bdFensterkontaktBat_Chk notify bdFensterkontakt.battery
nicht eher so
define bdFensterkontaktBat_Chk notify bdFensterkontakt:.battery
aussehen?
Ungetestet da ich nicht weiß ob der auch wirklich
battery ok
sendet.
Grüße
Ich habe jetzt einige Probiert und komme immer noch nicht zum Ergebnis.
Anbei einfach mal ein Screenshoot vom Notify.
bdFensterkontakt:.battery*
{
if("%" eq "ok")
{
fhem set bdFensterkontaktBattery "NotOk";
}
else
{
fhem set bdFensterkontaktBattery "Ok";
}
}
Ist perl nicht ähnlich C ?
Muss ich hier nicht das Codewort fhem im Script verwenden ?
Ist die Änderung sofort active. Ich speichere den Script ab und öffne dann das Fenster für ein
neue Telegram.
Gruss R.
Hallo,
sorry.
Das
ZitatbdFensterkontakt:.battery*
sollte eher so aussehen:
bdFensterkontakt:battery.*
Sorry. Mein Fehler.
Ich hab aber auch dieses im Einsatz:
Keller_Gaestezimmer_Heizung:actuator:.* {
Da das Event des FHT z.B.
Keller_Gaestezimmer_Heizung actuator: 0%
so heisst.
Grüße
P.S.: Etwaige Fehlermeldungen würde das stochern erleichtern ;-)
Hi,
danke für den Tip mit der Fehlermeldung. Bin noch neu in FHEM, aber nicht im Programmieren ;-)
2013.04.18 18:38:55 3: bdFensterkontaktBat_Chk return value: syntax error at (eval 159) line 1, at EOF
syntax error at (eval 159) line 1, at EOF
Was sagt mir das jetzt ? Nur die Uhrzeit scheint nicht zu stimmen ! Es ist die letzte Meldung im Log File.
Gruss R.
Hallo,
ich bin auch blind.
Das
Zitatfhem set bdFensterkontaktBattery "NotOk";
schreib ich eigentlich immer so.
fhem ("set bdFensterkontaktBattery NotOk");
Nicht schön aber funktioniert.
Setzt aber voraus das du einen Dummy oder Aktor/Empfänger hast der bdFensterkontaktBattery heisst und mit dem Status NotOk etwas
anzufangen weiß.
Grüße
So,
ich habe ein neuen Sensor genommen, welcher noch nicht montiert ist. Sonst bekomme ich noch Turnschuh-Geld.
Irgendwie geht das immer noch nicht.
kuFensterkontaktKl:battery:.*
{ if("%" eq "ok")
{
fhem("set kuFensterkontaktKlBattery NotOk");
}
else
{
fhem("set kuFensterkontaktKlBattery Ok");
}
}
Der Logfile zeigt:
2013-04-18_21:14:16 kuFensterkontaktKl onoff: 0
2013-04-18_21:14:16 kuFensterkontaktKl closed
2013-04-18_21:14:17 kuFensterkontaktKl battery: ok
2013-04-18_21:14:17 kuFensterkontaktKl onoff: 1
2013-04-18_21:14:17 kuFensterkontaktKl opened
Was bedeutet den das ":" und das Zeichen "." im pattern ?
Doku sagt:
ZitatMan kann auch mit Platzhaltern arbeiten.
Rollo. => das notify reagiert auf alles was mit Rollo und ein weiteres Zeichen anfängt. Also auf Rollo1 wie auch auf RolloG, aber nicht auf Rollo_wischundweg
Rollo.* => das notify reagiert auf alles das mit Rollo...... beginnt.
*isch => Reagiere auf alles das mit isch aufhört (Tisch, Fisch)
Selber dieser Script gibt kein Wert:
kuFensterkontaktKl:battery.*
{
fhem("set kuFensterkontaktKlBattery NotOk");
}
Es scheint also am Pattern zu liegen. Den State habe ich mit set auf den Wert "Unkown" gesetzt.
Gruss R.
Hi,
was passiert, wenn du
set kuFensterkontaktKlBattery NotOk
in der Fhem-Eingabezeile "enterst"?
Edith lässt noch fragen: Mit welchem Befehl (bitte vollständige und genaue Sequenz posten) triggerst du dein define?
Gruß
Thomas
Hi,
dann erscheint der korrekt Status "NotOk".
Derzeit teste ich das Beispiel auf der Funktionsbescheibung "notify"
define evt_kuFensterkontaktKl notify kuFensterkontaktKl { fhem "set kuFensterkontaktKlBattery NotOk" }
Es sollte mir doch eigentlich bei irgendeinem Event den Status setzen oder ?
So, seit 2013-04-18_21:37:18 ist meine Datenmenge für die Stunde erreicht. Der Empfänger blinkt und ich bekomme keine
Statusmeldungen mehr im Logfile des Sensors.
Daher weiss nicht nicht, ob die obere Zeile korrekt arbeiten würde.
Gruss R.
define evt_kuFensterkontaktKl notify kuFensterkontaktKl:.* { fhem "set kuFensterkontaktKlBattery NotOk" }
dürfte mM eher passen.
Gruß
Thomas
Hi,
in der Doku. steht
http://www.fhemwiki.de/wiki/Funktionsbeschreibung_zu_notify#Syntax_von_notify (//www.fhemwiki.de/wiki/Funktionsbeschreibung_zu_notify#Syntax_von_notify)
das leider nicht so.
Kann ich erst probieren, wenn ich wieder senden darf :-(.
Wie wird den jetzt das FHEM Kommando geschrieben
Edit1:
fhem("set kuFensterkontaktKlBattery NotOk");
oder
fhem "set kuFensterkontaktKlBattery NotOk";
Edit2:
Kann man eigentlich die Art es Events in der Routine auswerten, damit ich für jeden Sensor nur eine Routine verwenden kann.
Hiermit könnte ich evtl. auch diese Routine besser Debuggen, wenn ich z.B. Die Arte der Meldung "Status" und den "Wert" seperat bekomme.
Gruss R.
Moin,
ich hatte schon mal mit der Erkennung (halb)leerer Batterien experimentiert
und dabei beim CUL_FHTTK-2 das schon mal reproduziert.
So geht es:define a_NotExist CUL_FHTTK 000001
attr a_NotExist room Test
setstate a_NotExist 2012-02-22 08:58:03 Battery low batt
setstate a_NotExist 2012-02-22 08:24:14 Previous Open
setstate a_NotExist 2012-02-22 08:58:03 Reliability ok
setstate a_NotExist 2012-02-22 08:58:03 Window Closed, low batt
setstate a_NotExist Closed, low batt
Vorsicht:
Nicht alle melden gleich, andere melden anders, gilt nur für FHTTK-2
Hi,
nur zum besseren Verständnis des Patterns, den ich glaube hier liegt der Fehler.
define evt_kuFensterkontaktKl notify kuFensterkontaktKl:.* { fhem "set kuFensterkontaktKlBattery NotOk" }
"kuFensterkontaktKl" gibt die Komponente an
":" ist ein Trennzeichen und heisst bezogen auf den Logfile "Leerzeichen", bis zum nächsten Eintrag
".*" Beginnend ab Zeichen 1 wird jedes Element diesen Notify auslösen.
"bat.*" würde also alle Zeilen auslösen, wo "bat" am Anfang steht.
Dann müsste doch diese Zeile korrekt arbeiten:
define evt_kuFensterkontaktKl notify kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %" }
Gruss R.
P.S.: Testen kann ich das jetzt nicht.
Hi,
Zitatdefine evt_kuFensterkontaktKl notify kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %";; }
an sich ja, wenn du den Perl-Befehl in "{}" noch mit ";;" abschließt.
Aber: Testen kann ich atm auch nicht. So wie hier (//www.fhemwiki.de/wiki/Batterie%C3%BCberwachung) läuft es aber z.B. bei mir (eben für alle Geräte, egal ob
battery oder
Battery).
Gruß
Thomas
Hallo Thomas,
leider arbeitet auch mein Script immer noch nicht.
Nun ja, ich nehme diesen Script (//www.fhemwiki.de/wiki/Batterie%C3%BCberwachung) nicht, da es ja ein Lernbeispiel seinen soll, keine Tipübung.
Welche Debug Möglichkeiten habe ich eigentlich bei FHEM ?
Gibt es Debug Schalter ?
Hier der Code:
kuFensterkontaktKl:battery.*
{
fhem "set kuFensterkontaktKlBattery %";;
}
Hier der Log File:
2013-04-19_16:06:41 kuFensterkontaktKl battery: ok
2013-04-19_16:06:41 kuFensterkontaktKl onoff: 1
2013-04-19_16:06:41 kuFensterkontaktKl opened
2013-04-19_16:08:52 kuFensterkontaktKl battery: ok
2013-04-19_16:08:52 kuFensterkontaktKl onoff: 0
2013-04-19_16:08:52 kuFensterkontaktKl closed
2013-04-19_16:11:33 kuFensterkontaktKl battery: ok
2013-04-19_16:11:33 kuFensterkontaktKl onoff: 1
2013-04-19_16:11:33 kuFensterkontaktKl opened
Der Eintrag in meinem LOG File ist von gestern, wo ich ein Update check gemacht habe.
Nachtrag:
Ich konnte die Dummy-Variable mit dem Kommando "set kuFensterkontaktKlBattery test" über die Kommandozeile im Web Browser ändern. Die scheint also korrekt zu sein.
Gruss R.
Hallo Zusammen,
hier wohl die erste Funktion:
kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %" }
Ich habe wirklich keine ";;" im script und er arbeitet so !
Dieser gibt mir den Wert "battery: ok" in der Variable % zurück.
Also nicht den Wert "ok".
Gruss R.
Hallo,
was spricht eigentlich gegen das Wiki? http://www.fhemwiki.de/wiki/Batterieueberwachung (//www.fhemwiki.de/wiki/Batterieueberwachung)
Der matcht wunderbar auf alles was durch fhem wandert und Battery oder battery als Event und noch irgendwas hinten dran hat.
Danach wird geschaut ob das "Anhängsel" nicht
Zitatok
lautet und dann was gemacht.
ZitatÄhnliche Beispiele wären auch o.k.
siehe Wiki ;-)
Grüße
Edith:
ZitatDieser gibt mir den Wert "battery: ok" in der Variable % zurück.
Ist klar. Der FHT liefert auch
Zitatactuator: 0%
zurück.
Edith2: Falscher Link. Der obige ist zum löschen vorgemerkt da Doppeleintrag.
http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung (//www.fhemwiki.de/wiki/Batterie%C3%BCberwachung)
Hallo,
>was spricht eigentlich gegen das Wiki? http://www.fhemwiki.de/wiki/Batterieueberwachung (//www.fhemwiki.de/wiki/Batterieueberwachung)
Nichts, wenn man nur eine eMail bekommen will wenn ein Batterie Alarm kommt, ist es die beste Lösung.
Ich will aber einerseits
- Alarm per eMail erzeugen, wenn Batterie auf Low (Fehlt noch)
- Den Batterie-Status darstellen
- Evtl. später auf Fenster öffnen reagieren
- lernen, mit einem Notify umzugehen
Viele Grüße
R.
Hallo,
Zitat- Alarm per eMail erzeugen, wenn Batterie auf Low (Fehlt noch)
Sollte mit dem Wiki-Eintrag in 5 Minuten erledigt sein.
Zitat- Den Batterie-Status darstellen
Kann man im Mail-Notify verknüpfen.
Zitat- Evtl. später auf Fenster öffnen reagieren
Sollte egal sein ob das Fenster offen ist oder nicht wenn die Batterie leer wird ;-)
Zitat- lernen, mit einem Notify umzugehen
Solltest du mit Punkt 2 erledigen können um dann Punkt 3 später umsetzen zu können.
Grüße
Danke für Dein Vertrauen.
Irgendwie habe ich aber noch nicht ganz verstanden,
wann man die folgenden Zeichen setzt.
Die Script geht:
.*:[Bb]attery.* {\
fhem "set @Battery %";;}
Ich habe natürlich für jede Komponente eine Battery Dummy angelegt.
bekomme aber diese Meldung im Log file:
2013.04.20 20:17:22 3: evt_Battery return value: SCALAR(0x13f63e0)
Dieser nicht:
.*:[Bb]attery.* {\
fhem "set @Battery %";;\
}
Bekomme dann diese Fehlermeldung:
2013.04.20 20:16:11 3: evt_Battery return value: syntax error at (eval 637) line 1, at EOF
Da ich weiter Zeilen in diesen Script einbauen will, (die eMail bei not ok.),
frage ich mich, wie man Zeilen trennt.
Da ich den Notify in der Fhem.cfg gefunden habe, ist mit klar, warum im das "\" als Zeilentrenner nehmen muss.
Zählt hier das letzte } auch dazu ?
Wo finde ich eigentlich eine gute Seite für die netten perl Kommandos, String Bearbeitung und so.
Da ich nicht weiss was sich hinter m/ok/ verbirgt, will ich das erstmal nachlesen.
Hallo,
ich habe das ganze in ein PM Module verschoben,
hier ist die ganze Sache deutlich entspannter.
hier der Notify
.*:[Bb]attery.* { evtHandlerBatterie('@','%'); }
#
# Battery handler for state and eMail Alarm
#
sub evtHandlerBatterie($$)
{
my $Component = shift;
my $State = shift;
fhem("set ".$Component."Battery ".$State);
if($State !~ m/ok/)
{
DebianMail('Absender@Domain',"FHEM Meldung von ".$Component,
"Die Battery vom ".$Component." hat den Status ".$State);
}
return;
}
Und jetzt weiss ich auch, wie die ganze Sache läuft.
Vielen Dank an alle, die mir geholfen haben, meinen ersten Script zu schreiben.
Gruss R.
Zitat von: ritchie schrieb am Fr, 19 April 2013 16:22Gibt es Debug Schalter ?
Nachdem man ihn anlegt schon:
define debug dummy
attr debug loglevel 6
attr debug setList state:1,0
attr debug webCmd state
und dann im code:
... if(Value("debug")){Log 1, "++ DEBUG ++ es funktioniert nicht";} ...
oder:
... if(!Value("debug")){DebianMail('xyz@@arcor.de','Stoerung',Value("Stoerung"));} ...
So kann man durch umstellen des dummys Debug funktionen aktivieren / deaktivieren.
Hallo Zusammen,
kleines Update der Routine da oben
Der Zustand der Variable dar nicht den Text "Battery" enthalten, da dies einen weiteren Event auslöst.
Daher habe ich einen Filter im Status eingefügt.
Daher alle Dummy Variablen so definieren :
define kuThermostatBatterie dummy
Hier die geänderte Routine
package main;
use strict;
use warnings;
use POSIX;
#
# Init of
#
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $ret = "";
my $sender = "Sender\@domain.de";
my $konto = "Sender\@domain.de";
my $passwrd = "SichersPassword";
my $provider = "provider zugang";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=no);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}
#
# Battery handler for state and eMail Alarm
#
sub evtHandlerBatterie($$)
{
my $Component = shift;
my $State = shift;
my $Status = " ";
$Status = $State;
$Status =~ s/[Bb]attery/ /;
$Status =~ s/:/ /;
$Status = trim( $Status) ;
fhem("set ".$Component."Batterie ".$Status);
if($State !~ m/ok/)
{
DebianMail('MeineEMail@WEB.de',"FHEM Meldung von ".$Component,
"Die Batterie vom ".$Component." hat den Status ".$State);
}
return;
}
1;
Gruss R.