mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
Alarm.pm: New version 2.5
git-svn-id: https://svn.fhem.de/fhem/trunk@8146 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
954054375f
commit
495784ede0
@ -40,7 +40,7 @@ my $alarmname = "Alarms"; # link text
|
|||||||
my $alarmhiddenroom = "AlarmRoom"; # hidden room
|
my $alarmhiddenroom = "AlarmRoom"; # hidden room
|
||||||
my $alarmpublicroom = "Alarm"; # public room
|
my $alarmpublicroom = "Alarm"; # public room
|
||||||
my $alarmno = 8;
|
my $alarmno = 8;
|
||||||
my $alarmversion = "2.4";
|
my $alarmversion = "2.5";
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
#
|
#
|
||||||
@ -289,20 +289,38 @@ sub Alarm_Exec($$$$$){
|
|||||||
return
|
return
|
||||||
if ($dev eq 'global');
|
if ($dev eq 'global');
|
||||||
|
|
||||||
#-- raising the alarm
|
#-- raising the alarmy
|
||||||
if( $act eq "on" ){
|
if( $act eq "on" ){
|
||||||
#-- only if this level is armed and not yet active
|
#-- only if this level is armed and not yet active
|
||||||
if( ($xec eq "armed") && ($xac eq "off") ){
|
if( ($xec eq "armed") && ($xac eq "off") ){
|
||||||
#-- check for time (attribute values have been controlled in CreateNotifiers)
|
#-- check for time
|
||||||
my @st = split(':',AttrVal($name, "level".$level."start", 0));
|
my $start = AttrVal($name, "level".$level."start", 0);
|
||||||
my @et = split(':',AttrVal($name, "level".$level."end", 0));
|
if( index($start, '{') != -1){
|
||||||
|
$start = eval($start);
|
||||||
|
}
|
||||||
|
my @st = split(':',$start);
|
||||||
|
if( (int(@st)>3) || (int(@st)<2) || ($st[0] > 23) || ($st[0] < 0) || ($st[1] > 59) || ($st[1] < 0) ){
|
||||||
|
Log3 $hash,1,"[Alarm $level] Cannot be executed due to wrong time spec $start for level".$level."start";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $end = AttrVal($name, "level".$level."end", 0);
|
||||||
|
if( index($end, '{') != -1){
|
||||||
|
$end = eval($end);
|
||||||
|
}
|
||||||
|
my @et = split(':',$end);
|
||||||
|
if( (int(@et)>3) || (int(@et)<2) || ($et[0] > 23) || ($et[0] < 0) || ($et[1] > 59) || ($et[1] < 0) ){
|
||||||
|
Log3 $hash,1,"[Alarm $level] Cannot be executed due to wrong time spec $end for level".$level."end";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
my $stp = $st[0]*60+$st[1];
|
my $stp = $st[0]*60+$st[1];
|
||||||
my $etp = $et[0]*60+$et[1];
|
my $etp = $et[0]*60+$et[1];
|
||||||
|
|
||||||
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime(time);
|
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime(time);
|
||||||
my $ntp = $hour*60+$min;
|
my $ntp = $hour*60+$min;
|
||||||
|
|
||||||
if( ($ntp <= $etp) && ($ntp >= $stp) ){
|
if( (($stp < $etp) && ($ntp <= $etp) && ($ntp >= $stp)) || (($stp > $etp) && (($ntp <= $etp) || ($ntp >= $stp))) ){
|
||||||
#-- raised by sensor (attribute values have been controlled in CreateNotifiers)
|
#-- raised by sensor (attribute values have been controlled in CreateNotifiers)
|
||||||
@sta = split('\|', AttrVal($dev, "alarmSettings", 0));
|
@sta = split('\|', AttrVal($dev, "alarmSettings", 0));
|
||||||
if( $sta[2] ){
|
if( $sta[2] ){
|
||||||
@ -476,18 +494,29 @@ sub Alarm_CreateNotifiers($){
|
|||||||
fhem('delete alarm'.$level.'.disarm.N' )
|
fhem('delete alarm'.$level.'.disarm.N' )
|
||||||
if( defined $defs{'alarm'.$level.'.disarm.N'});
|
if( defined $defs{'alarm'.$level.'.disarm.N'});
|
||||||
|
|
||||||
|
my $start = AttrVal($name, "level".$level."start", 0);
|
||||||
my @st = split(':',(AttrVal($name, "level".$level."start", 0) ne '')?AttrVal($name, "level".$level."start", 0):'0:00');
|
my @st;
|
||||||
my @et = split(':',(AttrVal($name, "level".$level."end", 0) ne '')?AttrVal($name, "level".$level."end", 0):'23:59');
|
if( index($start,'{')!=-1 ){
|
||||||
|
Log3 $hash,1,"[Alarm $level] perl function $start detected for level".$level."start, currently the function gives ".eval($start);
|
||||||
|
}else{
|
||||||
|
@st = split(':',($start ne '') ? $start :'0:00');
|
||||||
if( (int(@st)!=2) || ($st[0] > 23) || ($st[0] < 0) || ($st[1] > 59) || ($st[1] < 0) ){
|
if( (int(@st)!=2) || ($st[0] > 23) || ($st[0] < 0) || ($st[1] > 59) || ($st[1] < 0) ){
|
||||||
Log3 $hash,1,"[Alarm $level] Cannot be executed due to wrong time spec ".AttrVal($name, "level".$level."start", 0)." for level".$level."start";
|
Log3 $hash,1,"[Alarm $level] Will not be executed due to wrong time spec $start for level".$level."start";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $end = AttrVal($name, "level".$level."end", 0);
|
||||||
|
my @et;
|
||||||
|
if( index($end,'{')!=-1 ){
|
||||||
|
Log3 $hash,1,"[Alarm $level] perl function $end detected for level".$level."end, currently the function gives ".eval($end);
|
||||||
|
}else{
|
||||||
|
@et = split(':',($end ne '') ? $end :'23:59');
|
||||||
if( (int(@et)!=2) || ($et[0] > 23) || ($et[0] < 0) || ($et[1] > 59) || ($et[1] < 0) ){
|
if( (int(@et)!=2) || ($et[0] > 23) || ($et[0] < 0) || ($et[1] > 59) || ($et[1] < 0) ){
|
||||||
Log3 $hash,1,"[Alarm $level] Cannot be executed due to wrong time spec ".AttrVal($name, "level".$level."end", 0)." for level".$level."end";
|
Log3 $hash,1,"[Alarm $level] Will not be executed due to wrong time spec $end for level".$level."end";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#-- now set up the command for cancel alarm, and contained in this loop all other notifiers as well
|
#-- now set up the command for cancel alarm, and contained in this loop all other notifiers as well
|
||||||
my $cmd = '';
|
my $cmd = '';
|
||||||
@ -701,8 +730,8 @@ sub Alarm_Html($)
|
|||||||
|
|
||||||
my $xval = AttrVal($name, "level".$k."xec", 0);
|
my $xval = AttrVal($name, "level".$k."xec", 0);
|
||||||
$ret .= sprintf("<tr class=\"%s\"><td class=\"col1\">Alarm $k</td>\n", ($row&1)?"odd":"even");
|
$ret .= sprintf("<tr class=\"%s\"><td class=\"col1\">Alarm $k</td>\n", ($row&1)?"odd":"even");
|
||||||
$ret .= "<td class=\"col2\">Start <input type=\"text\" id=\"l".$k."s\" size=\"4\" maxlength=\"5\" value=\"$sval\"/> ".
|
$ret .= "<td class=\"col2\">Start <input type=\"text\" id=\"l".$k."s\" size=\"4\" maxlength=\"120\" value=\"$sval\"/> ".
|
||||||
"End <input type=\"text\" id=\"l".$k."e\" size=\"4\" maxlength=\"5\" value=\"$eval\"/></td>".
|
"End <input type=\"text\" id=\"l".$k."e\" size=\"4\" maxlength=\"120\" value=\"$eval\"/></td>".
|
||||||
"<td class=\"col3\"><input type=\"text\" id=\"l".$k."m\" size=\"25\" maxlength=\"256\" value=\"$mval\"/></td>";
|
"<td class=\"col3\"><input type=\"text\" id=\"l".$k."m\" size=\"25\" maxlength=\"256\" value=\"$mval\"/></td>";
|
||||||
$ret .= sprintf("<td class=\"col4\"><input type=\"checkbox\" id=\"l".$k."x\" %s onclick=\"javascript:alarm_arm('$name','$k')\"/>",($xval eq "armed")?"checked=\"checked\"":"").
|
$ret .= sprintf("<td class=\"col4\"><input type=\"checkbox\" id=\"l".$k."x\" %s onclick=\"javascript:alarm_arm('$name','$k')\"/>",($xval eq "armed")?"checked=\"checked\"":"").
|
||||||
"<input type=\"button\" value=\"Cancel\" onclick=\"javascript:alarm_cancel('$name','$k')\"/></td></tr>\n";
|
"<input type=\"button\" value=\"Cancel\" onclick=\"javascript:alarm_cancel('$name','$k')\"/></td></tr>\n";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user