| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- //########################################################################################
- // alarm.js
- // Version 4.03
- // See 95_Alarm for licensing
- //########################################################################################
- //# Prof. Dr. Peter A. Henning
- //------------------------------------------------------------------------------------------------------
- // Determine csrfToken
- //------------------------------------------------------------------------------------------------------
- var req = new XMLHttpRequest();
- req.open('GET', document.location.href, false);
- req.send(null);
- var csrfToken = req.getResponseHeader('X-FHEM-csrfToken');
- if( csrfToken == null ){
- csrfToken = "null";
- }
- //------------------------------------------------------------------------------------------------------
- // encode Parameters for URL
- //------------------------------------------------------------------------------------------------------
- function encodeParm(oldval) {
- var newval;
- newval = oldval.replace(/"/g, '%27');
- newval = newval.replace(/#/g, '%23');
- newval = newval.replace(/\+/g, '%2B');
- newval = newval.replace(/&/g, '%26');
- newval = newval.replace(/'/g, '%27');
- newval = newval.replace(/=/g, '%3D');
- newval = newval.replace(/\?/g, '%3F');
- newval = newval.replace(/\|/g, '%7C');
- newval = newval.replace(/\s/g, '%20');
- 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&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20' + encodeParm(attr) + '%20' + 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&fwcsrf=' + csrfToken + '&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&fwcsrf=' + csrfToken + '&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&fwcsrf=' + csrfToken + '&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&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20armdelay%20' + document.getElementById('armdelay').value);
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20armwait%20' + encodeParm(document.getElementById('armwait').value));
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20 ' + name + '%20armact%20' + encodeParm(document.getElementById('armaction').value));
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20disarmact%20' + encodeParm(document.getElementById('disarmaction').value));
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20cancelact%20' + encodeParm(document.getElementById('cancelaction').value));
-
- // saving start and end times
- for (var i = 0;
- i < alarmno;
- i++) {
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20level' + i + 'start%20' + document.getElementById('l' + i + 's').value);
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20level' + i + 'end%20' + document.getElementById('l' + i + 'e').value);
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20level' + i + 'msg%20' + document.getElementById('l' + i + 'm').value);
- if (document.getElementById('l' + i + 'x').checked == true) {
- val = "armed";
- } else {
- val = "disarmed";
- }
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=attr%20' + name + '%20level' + i + 'xec%20' + val);
- }
-
- // 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 += "|" + encodeParm(sarr[k].children[2].children[0].value);
- val += "|" + encodeParm(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&fwcsrf=' + csrfToken + '&cmd.' + nam + '=attr%20' + nam + '%20alarmSettings%20' + 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 += "|" + encodeParm(aarr[k].children[2].children[0].value);
- val += "|" + encodeParm(aarr[k].children[3].children[0].value);
- val += "|" + encodeParm(aarr[k].children[4].children[0].value);
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + nam + '=attr%20' + nam + '%20alarmSettings%20' + val);
- }
-
- // creating notifiers
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + ' ={main::Alarm_CreateNotifiers("' + name + '")}');
- }
|