mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-07 16:59:18 +00:00
5996c2c0ce
95_YAAHM.pm: Neue Version mit diversen neuen Features git-svn-id: https://svn.fhem.de/fhem/trunk@15580 2b470e98-0d58-463d-a4d8-8e2adae1ed80
296 lines
10 KiB
JavaScript
296 lines
10 KiB
JavaScript
//########################################################################################
|
|
// alarm.js
|
|
// Version 3.1
|
|
// See 95_Alarm for licensing
|
|
//########################################################################################
|
|
//# Prof. Dr. Peter A. Henning
|
|
|
|
function encodeParm(oldval) {
|
|
var newval;
|
|
newval = oldval.replace(/\+/g, '%2B');
|
|
newval = newval.replace(/#/g, '%23');
|
|
newval = newval.replace(/"/g, '%27');
|
|
return newval;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// Animated Icon
|
|
//------------------------------------------------------------------------------------------------------
|
|
|
|
var bellfill;
|
|
|
|
function blinkbell() {
|
|
var w = document.getElementById("alarmicon");
|
|
if (w) {
|
|
if (bellfill == alarmcolor) {
|
|
bellfill = "white";
|
|
w.getElementsByClassName("alarmst_b")[0].setAttribute("fill", "white");
|
|
w.getElementsByClassName("alarmst_sb")[0].setAttribute("fill", "white");
|
|
} else {
|
|
bellfill = alarmcolor;
|
|
w.getElementsByClassName("alarmst_b")[0].setAttribute("fill", alarmcolor);
|
|
w.getElementsByClassName("alarmst_sb")[0].setAttribute("fill", alarmcolor);
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateIcon(name, alarmst) {
|
|
var w = document.getElementById(name);
|
|
if (w) {
|
|
switch (alarmst) {
|
|
case "disarmed":
|
|
w.getElementsByClassName("alarmst_b")[0].setAttribute("fill", "white");
|
|
w.getElementsByClassName("alarmst_sb")[0].setAttribute("fill", "white");
|
|
if (blinking == 1) {
|
|
clearInterval(blinker);
|
|
blinking = 0;
|
|
}
|
|
break;
|
|
|
|
case "mixed":
|
|
w.getElementsByClassName("alarmst_b")[0].setAttribute("fill", armwaitcolor);
|
|
w.getElementsByClassName("alarmst_sb")[0].setAttribute("fill", "white");
|
|
if (blinking == 1) {
|
|
clearInterval(blinker);
|
|
blinking = 0;
|
|
}
|
|
break;
|
|
|
|
case "armed":
|
|
w.getElementsByClassName("alarmst_b")[0].setAttribute("fill", armcolor);
|
|
w.getElementsByClassName("alarmst_sb")[0].setAttribute("fill", "white");
|
|
if (blinking == 1) {
|
|
clearInterval(blinker);
|
|
blinking = 0;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (blinking == 0) {
|
|
blinker = setInterval('blinkbell()', 250);
|
|
blinking = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$("body").on('DOMSubtreeModified', "#hid_levels", function () {
|
|
var w = document.getElementById("hid_levels");
|
|
var v = document.getElementById("alarmicon");
|
|
var t = v.getElementsByClassName("arec");
|
|
var ifnd;
|
|
var sfnd;
|
|
var col;
|
|
for (i = 0; i < alarmno; i++) {
|
|
var s = w.getElementsByClassName("hid_lx")[i].innerHTML;
|
|
if (ast[i] != s) {
|
|
switch(s){
|
|
case "disarmed":
|
|
col = disarmcolor;
|
|
break;
|
|
case "armwait":
|
|
col = armwaitcolor;
|
|
break;
|
|
case "armed":
|
|
col = armcolor;
|
|
break;
|
|
default:
|
|
col = alarmcolor
|
|
}
|
|
t[i].setAttribute("fill",col);
|
|
ast[i] = s;
|
|
ifnd = i;
|
|
sfnd = s;
|
|
}
|
|
}
|
|
if (ifnd && (iconmap.includes(ifnd))) {
|
|
var aan = true;
|
|
var adn = true;
|
|
var aln = "";
|
|
var atn = "";
|
|
for (i = 0; i < alarmno; i++) {
|
|
if (iconmap.includes(i)) {
|
|
var s = ast[i];
|
|
if (s != "disarmed" && s != "armwait" && s != "armed") {
|
|
aln = aln + i + ",";
|
|
atn = atn + s + ",";
|
|
} else {
|
|
adn = adn && ((s == "disarmed")||(s == "armwait"));
|
|
aan = aan && (s == "armed");
|
|
}
|
|
}
|
|
}
|
|
|
|
if (adn != ad || aan != aa || aln != al) {
|
|
aa = aan;
|
|
ad = adn;
|
|
al = aln;
|
|
at = atn;
|
|
|
|
var iconstate;
|
|
if (al != "") {
|
|
iconstate = al;
|
|
} else {
|
|
if (aa && (! ad)) {
|
|
iconstate = "armed";
|
|
} else {
|
|
if ((! aa) && ad) {
|
|
iconstate = "disarmed";
|
|
} else {
|
|
iconstate = "mixed";
|
|
}
|
|
}
|
|
}
|
|
updateIcon('alarmicon', iconstate);
|
|
}
|
|
}
|
|
});
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// Write the Attribute Value
|
|
//------------------------------------------------------------------------------------------------------
|
|
|
|
function alarm_setAttribute(name, attr, val) {
|
|
//set Alarm Attribute
|
|
var location = document.location.pathname;
|
|
if (location.substr(location.length -1, 1) == '/') {
|
|
location = location.substr(0, location.length -1);
|
|
}
|
|
var url = document.location.protocol + "//" + document.location.host + location;
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' ' + encodeParm(attr) + ' ' + encodeParm(val));
|
|
}
|
|
|
|
function alarm_cancel(name, level) {
|
|
var val;
|
|
var nam;
|
|
|
|
var location = document.location.pathname;
|
|
if (location.substr(location.length -1, 1) == '/') {
|
|
location = location.substr(0, location.length -1);
|
|
}
|
|
var url = document.location.protocol + "//" + document.location.host + location;
|
|
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '={Alarm_Exec("' + name + '",' + level + ',"web","button","off")}');
|
|
}
|
|
|
|
function alarm_arm(name, level) {
|
|
var val;
|
|
var nam;
|
|
var command = document.getElementById('l' + level + 'x').checked;
|
|
if (command == true) {
|
|
command = "arm";
|
|
} else {
|
|
command = "disarm";
|
|
}
|
|
var location = document.location.pathname;
|
|
if (location.substr(location.length -1, 1) == '/') {
|
|
location = location.substr(0, location.length -1);
|
|
}
|
|
var url = document.location.protocol + "//" + document.location.host + location;
|
|
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '={Alarm_Arm("' + name + '",' + level + ',"web","button","' + command + '")}');
|
|
}
|
|
|
|
function alarm_testaction(name, dev, type) {
|
|
var cmd;
|
|
var nam;
|
|
if (type == 'set') {
|
|
cmd = document.getElementById(dev).parentElement.children[2].children[0].value;
|
|
} else {
|
|
cmd = document.getElementById(dev).parentElement.children[3].children[0].value;
|
|
}
|
|
var cmds;
|
|
cmds = cmd.replace(/\\/g, '\\');
|
|
cmds = cmds.replace(/\'/g, '\"');
|
|
cmds = cmds.replace(/\$/g, '\\$');
|
|
alert(cmds);
|
|
|
|
var location = document.location.pathname;
|
|
if (location.substr(location.length -1, 1) == '/') {
|
|
location = location.substr(0, location.length -1);
|
|
}
|
|
var url = document.location.protocol + "//" + document.location.host + location;
|
|
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '={Alarm_Test("' + name + '","' + cmds + '")}');
|
|
}
|
|
|
|
|
|
function alarm_set(name) {
|
|
var val;
|
|
var nam;
|
|
|
|
var location = document.location.pathname;
|
|
if (location.substr(location.length -1, 1) == '/') {
|
|
location = location.substr(0, location.length -1);
|
|
}
|
|
var url = document.location.protocol + "//" + document.location.host + location;
|
|
|
|
// saving arm data
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' armdelay ' + document.getElementById('armdelay').value);
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' armwait ' + encodeParm(document.getElementById('armwait').value));
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' armact ' + encodeParm(document.getElementById('armaction').value));
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' disarmact ' + encodeParm(document.getElementById('disarmaction').value));
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' cancelact ' + encodeParm(document.getElementById('cancelaction').value));
|
|
|
|
// saving start and end times
|
|
for (var i = 0;
|
|
i < alarmno;
|
|
i++) {
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' level' + i + 'start ' + document.getElementById('l' + i + 's').value);
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' level' + i + 'end ' + document.getElementById('l' + i + 'e').value);
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' level' + i + 'msg ' + document.getElementById('l' + i + 'm').value);
|
|
if (document.getElementById('l' + i + 'x').checked == true) {
|
|
val = "armed";
|
|
} else {
|
|
val = "disarmed";
|
|
}
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + '=attr ' + name + ' level' + i + 'xec ' + val);
|
|
}
|
|
//for (var k in ah.items) {
|
|
// ah.setItem(k,document.getElementById(k).value);
|
|
//}
|
|
|
|
// acquiring data for each sensor
|
|
var sarr = document.getElementsByName('sensor');
|
|
for (var k = 0;
|
|
k < sarr.length;
|
|
k++) {
|
|
nam = sarr[k].getAttribute('informId');
|
|
val = "";
|
|
for (var i = 0;
|
|
i < alarmno;
|
|
i++) {
|
|
if (sarr[k].children[1].children[i].checked == true) {
|
|
val += "alarm" + i + ",";
|
|
}
|
|
}
|
|
val += "|" + sarr[k].children[2].children[0].value;
|
|
val += "|" + sarr[k].children[3].children[0].value;
|
|
val += "|" + sarr[k].children[4].children[0].options[sarr[k].children[4].children[0].selectedIndex].value;
|
|
FW_cmd(url + '?XHR=1&cmd.' + nam + '=attr ' + nam + ' alarmSettings ' + encodeParm(val));
|
|
}
|
|
|
|
// acquiring data for each actor
|
|
var aarr = document.getElementsByName('actor');
|
|
for (var k = 0;
|
|
k < aarr.length;
|
|
k++) {
|
|
nam = aarr[k].getAttribute('informId');
|
|
val = "";
|
|
for (var i = 0;
|
|
i < alarmno;
|
|
i++) {
|
|
//alert(" Checking "+k+" "+i)
|
|
if (aarr[k].children[1].children[i].checked == true) {
|
|
val += "alarm" + i + ",";
|
|
}
|
|
}
|
|
val += "|" + aarr[k].children[2].children[0].value;
|
|
val += "|" + aarr[k].children[3].children[0].value;
|
|
val += "|" + aarr[k].children[4].children[0].value;
|
|
FW_cmd(url + '?XHR=1&cmd.' + nam + '=attr ' + nam + ' alarmSettings ' + encodeParm(val));
|
|
}
|
|
|
|
// creating notifiers
|
|
FW_cmd(url + '?XHR=1&cmd.' + name + ' ={main::Alarm_CreateNotifiers("' + name + '")}');
|
|
} |