FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Lars am 02 Januar 2013, 10:42:54

Titel: Temperaturüberwachung und Alarmierung über Prowl (iPhone)
Beitrag von: Lars am 02 Januar 2013, 10:42:54
Ziel ist die Überwachung der Raumtemperaturen und Alarmierung wenn die Temperatur einen Wert unter oder einen anderen Wert übersteigt. Die Messdaten kommen von S300TH Sendern. Der Alarm wird durch ein notify ausgelöst. Da die Sender alle 3 Minuten einen Datensatz liefern, würde bei einer Über- bzw. Unterschreitung der Werte alle 3 Minuten eine Alarmierung erfolgen. Das ist mir zu häufig, ich möchte zum Teil nur einmal am Tag informiert werden. Die Alarmierung erfolgt über Prowl.

Zuerst wird der untere und der obere Grenzwert festgelegt, weiterhin wird der Zeitpunkt der letzten Temperaturwarnung initialisiert.


define WarnTempUSZ dummy
attr WarnTempUSZ room Schlafzimmer

define WarnTempOSZ dummy
attr WarnTempOSZ room Schlafzimmer

define LastTempWarnSZ dummy
attr LastTempWarnSZ room Schlafzimmer
{ \
use 5.6.0;; \
use DateTime;; \
our $LastTempWarnSZ = DateTime->new( year => 2013, month => 1, day => 1 );; \
fhem("set LastTempWarnSZ $LastTempWarnSZ");; \
}


Jetzt geht es zum notify:


define noti_t_sz notify TempSZ { \
use DateTime;; \
use DateTime::Duration;; \
my $currTime = DateTime->now();; \
my $interval = DateTime::Duration->new( days => 1, hours => 2, minutes => 0 );; \
if (outof_interval($main::LastTempWarnSZ,$currTime,$interval)){ \
if (ReadingsVal("TempSZ","temperature",99) < Value("WarnTempUSZ") || ReadingsVal("TempSZ","temperature",99) > Value("WarnTempOSZ")){ \
prowl_lars("Schlafzimmertemperatur", ReadingsVal("TempSZ","temperature",99), 0);; \
fhem("set LastTempWarnSZ $currTime");; \
$main::LastTempWarnSZ = $currTime;; \
} \
} \
}


Zuletzt noch die beiden Routinen, die innerhalb des notify aufgerufen werden:


sub prowl_lars($$$) {
my ($event, $notification, $priority) = @_;
system "perl /scripts/prowl.pl -apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -application=FHEM -event='$event' -notification='$notification' -priorit=$priority";
}

sub outof_interval {
    my ( $dt1, $dt2, $interval ) = @_;

    # Make sure $dt1 is less than $dt2
    ( $dt1, $dt2 ) = ( $dt2, $dt1 ) if $dt1 > $dt2;

    # If the older date is more recent than the newer date once we
    # subtract the interval then the dates are closer than the
    # interval
    if ( $dt2 - $interval < $dt1 ) {
        return 0;
    }
    else {
        return 1;
    }
}


Das Perl Programm prowl.pl kann von der Website http://www.prowlapp.com/ (//www.prowlapp.com/) heruntergeladen werden.

Viel Spass!
Titel: Aw: Temperaturüberwachung und Alarmierung über Prowl (iPhone)
Beitrag von: reacend am 03 Januar 2013, 23:38:36
Hi Lars,
ich hätte auch gerne eine E-Mail am Tag anstelle von einer alle 3 Min..
Wie bekomme ich das hin ich durchblicke deinen code noch nicht ganz.

hier mein Notify:
define S300TH_chk notify S300TH:hum.* { if ((floor(SplitVar("%"," ",1))) < 65 || (floor(SplitVar("%"," ",1))) > 75) {\
{DebianMail('mail@mail.de' ('mail@mail.de'),'S300TH RLF nicht OK ','%')};;\
Log 3, "@: RLF zu niedrig %";;\
}\
}

Wie gesagt bei mir gehts um RLF Überwachung...

BG,
Mark
Titel: Aw: Temperaturüberwachung und Alarmierung über Prowl (iPhone)
Beitrag von: m2th3o am 02 Februar 2013, 23:31:37
Hi Lars,

ich finde Prowl sehr interessant. Habe das soweit bei mir eingerichtet, nur mit FHEM haperts noch. Wo muss ich genau das prowl.pl-Skript hinspeichern und wie geb ich den Pfad an. Ich hab über das Fritz-Box-NAS in den Ordner fhem/scripts das File gelegt. Im Telnet kann ich das aber noch nicht wirklich aufrufen... Wie muss ich das auf der Fritz-Box ablegen, damit ich die Funktionen nutzen kann?

Vielen Dank.

Gruß,
Markus
Titel: Aw: Temperaturüberwachung und Alarmierung über Prowl (iPhone)
Beitrag von: m2th3o am 03 Februar 2013, 12:56:23
Hallo Forum,

nachdem ich selber noch ein bisschen weitergemacht habe, weiß ich zumindest, dass FHEM und damit das Skript unter /var/InternerSpeicher/fhem/... liegt. Wenn ich jetzt das Skript "prowl.pl" mit folgender Zeile aufrufe:

fhem> {system "perl /var/InternerSpeicher/fhem/scipts/prowl.pl -apikey=langehxezahl -application=FHEM -event='Wetter' -notification='Testinfo.' -priority=0"}

Sagt mir mein Log anschließend:

Can't locate Pod/Usage.pm in @INC (@INC contains: /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2 /var/InternerSpeicher/fhem/lib/perl5/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/5.12.2 /opt/lib/perl5/site_perl/5.12.2/mips-linux /opt/lib/perl5/site_perl/5.12.2 /opt/lib/perl5/5.12.2/mips-linux /opt/lib/perl5/5.12.2 .) at /var/InternerSpeicher/fhem/scipts/prowl.pl line 35.
BEGIN failed--compilation aborted at /var/InternerSpeicher/fhem/scipts/prowl.pl line 35.

Weiß da jemand weiter?

Vielen Dank.

Gruß,
Markus