| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- //########################################################################################
- // yaahm.js
- // Version 1.45
- // See 95_YAAHM 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');
- return newval;
- }
- // Tool Tips
- // $( function() {
- // $( document ).tooltip();
- // } );
- //------------------------------------------------------------------------------------------------------
- // Expand text box
- //------------------------------------------------------------------------------------------------------
- $(function () {
- $(".expand").focus(function () {
- $(this).animate({
- width: '200px'
- },
- "slow")
- });
- });
- $(function () {
- $(".expand").blur(function () {
- $(this).animate({
- width: '100px'
- },
- "slow")
- });
- });
- //------------------------------------------------------------------------------------------------------
- // Write the Attribute Value
- //------------------------------------------------------------------------------------------------------
- function yaahm_setAttribute(name, attr, val) {
- //set Yaahm 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 ' + name + ' ' + encodeParm(attr) + ' ' + encodeParm(val));
- }
- //------------------------------------------------------------------------------------------------------
- // Change mode and state, set next time
- //------------------------------------------------------------------------------------------------------
- var hsold;
- var hmold;
- function yaahm_mode(name, targetmode) {
- 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 + '={main::YAAHM_mode("' + name + '","' + targetmode + '")}');
- }
- function yaahm_state(name, targetstate) {
- 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 + '={main::YAAHM_state("' + name + '","' + targetstate + '")}');
- }
- function yaahm_setnext(name, i) {
- 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;
-
- var nval;
- if (document.getElementById('wt' + i + '_n') !== null) {
- nval = document.getElementById('wt' + i + '_n').value;
- } else {
- nval = "undef";
- }
-
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={main::YAAHM_nextWeeklyTime("' + name + '","next_' + i + '","' + nval + '")}');
- }
- //------------------------------------------------------------------------------------------------------
- // Write field value for next - first two here, the others dynamically
- //------------------------------------------------------------------------------------------------------
- $("body").on('DOMSubtreeModified', "#wt0_o",
- function () {
- nval = document.getElementById("wt0_o").innerHTML;
- document.getElementById("wt0_n").value = nval;
- })
- $("body").on('DOMSubtreeModified', "#wt1_o",
- function () {
- nval = document.getElementById("wt1_o").innerHTML;
- document.getElementById("wt1_n").value = nval;
- })
- //------------------------------------------------------------------------------------------------------
- // Animate housestate icon
- //------------------------------------------------------------------------------------------------------
- var blinker;
- var hsfill;
- var hscolor;
- function blinkhs() {
- var w = document.getElementById("wid_hs");
- if (w) {
- if (hsfill == hscolor) {
- hsfill = "white";
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", "white");
- } else {
- hsfill = hscolor;
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", hscolor);
- }
- }
- }
- $("body").on('DOMSubtreeModified', "#sym_hs",
- function () {
- var w = document.getElementById("wid_hs");
- if (w) {
- var symnew = document.getElementById("sym_hs").innerHTML;
- if (blinking == 1 && symnew.includes("green")) {
- clearInterval(blinker);
- blinking = 0;
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", hscolor);
- } else {
- if (blinking == 0 && ! symnew.includes("green")) {
- hscolor = w.getElementsByClassName("hs_is")[0].getAttribute("fill");
- blinker = setInterval('blinkhs()', 1000);
- blinking = 1;
- }
- }
- }
- })
- $("body").on('DOMSubtreeModified', "#hid_hs",
- function () {
- var hsnew = document.getElementById("hid_hs").innerHTML;
- if (hsnew != hsold) {
- hsold = hsnew;
- var w = document.getElementById("wid_hs");
- if (w) {
- switch (hsnew) {
- case "unsecured":
- hscolor = csstate[0];
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", csstate[0]);
- w.getElementsByClassName("hs_smb")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_unlocked")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_locked")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_eye")[0].setAttribute("visibility", "hidden");
- break;
- case "secured":
- hscolor = csstate[1];
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", csstate[1]);
- w.getElementsByClassName("hs_smb")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_unlocked")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_locked")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_eye")[0].setAttribute("visibility", "hidden");
- break;
- case "protected":
- hscolor = csstate[2];
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", csstate[2]);
- w.getElementsByClassName("hs_smb")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_unlocked")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_locked")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_eye")[0].setAttribute("visibility", "hidden");
- break;
- case "guarded":
- hscolor = csstate[3];
- w.getElementsByClassName("hs_is")[0].setAttribute("fill", csstate[3]);
- w.getElementsByClassName("hs_smb")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_unlocked")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hs_locked")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hs_eye")[0].setAttribute("visibility", "visible");
- break;
- }
- } else {
- alert("state widget not found");
- }
- }
- });
- $("body").on('DOMSubtreeModified', "#hid_hm",
- function () {
- var hmnew = document.getElementById("hid_hm").innerHTML;
- if (hmnew != hmold) {
- hmold = hmnew;
- var w = document.getElementById("wid_hm");
- if (w) {
- switch (hmnew) {
- case "normal":
- w.getElementsByClassName("hm_is")[0].setAttribute("fill", csmode[0]);
- w.getElementsByClassName("hm_n")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hm_p")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_a")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_dnd")[0].setAttribute("visibility", "hidden");
- break;
- case "party":
- w.getElementsByClassName("hm_is")[0].setAttribute("fill", csmode[1]);
- w.getElementsByClassName("hm_n")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_p")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hm_a")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_dnd")[0].setAttribute("visibility", "hidden");
- break;
- case "absence":
- w.getElementsByClassName("hm_is")[0].setAttribute("fill", csmode[2]);
- w.getElementsByClassName("hm_n")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_p")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_a")[0].setAttribute("visibility", "visible");
- w.getElementsByClassName("hm_dnd")[0].setAttribute("visibility", "hidden");
- break;
- case "donotdisturb":
- w.getElementsByClassName("hm_is")[0].setAttribute("fill", csmode[3]);
- w.getElementsByClassName("hm_n")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_p")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_a")[0].setAttribute("visibility", "hidden");
- w.getElementsByClassName("hm_dnd")[0].setAttribute("visibility", "visible");
- break;
- }
- } else {
- alert("mode widget not found");
- }
- }
- });
- //------------------------------------------------------------------------------------------------------
- // Start the daily timer
- //------------------------------------------------------------------------------------------------------
- function yaahm_startDayTimer(name) {
-
- 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 start and end times
- for (var i = 0; i < dailyno; i++) {
- var sval, eval, xval, aval1, aval2;
- if ((dailykeys[i] != 'wakeup') && (dailykeys[i] != 'sleep')) {
- if (document.getElementById('dt' + dailykeys[i] + '_s') !== null) {
- sval = document.getElementById('dt' + dailykeys[i] + '_s').value;
- } else {
- sval = "undef"
- }
- if (document.getElementById('dt' + dailykeys[i] + '_e') !== null) {
- eval = document.getElementById('dt' + dailykeys[i] + '_e').value;
- } else {
- eval = "undef"
- }
- if (document.getElementById('dt' + dailykeys[i] + '_x') !== null) {
- xval = encodeParm(document.getElementById('dt' + dailykeys[i] + '_x').value);
- } else {
- xval = "undef"
- }
- aval1 = $("input[name='actim" + dailykeys[i] + "']:checked").map(function () {
- return $(this).val();
- }).get();
- aval2 = $("input[name='actid" + dailykeys[i] + "']:checked").map(function () {
- return $(this).val();
- }).get();
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={main::YAAHM_setParm("' + name + '","dt","' + dailykeys[i] + '",' + '"' + sval + '","' + eval + '","' + xval + '","' + aval1 + ';' + aval2 + '")}');
- }
- }
- // really start it now
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + ' ={main::YAAHM_startDayTimer("' + name + '")}');
-
- // change link
- $('#dtlink').html('<a href="/fhem?detail=' + name + '.dtimer.IF">' + name + '.dtimer.IF</a>');
- }
- //------------------------------------------------------------------------------------------------------
- // Weekly profile
- //------------------------------------------------------------------------------------------------------
- function yaahm_startWeeklyTimer(name) {
-
- 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 start weekly times
- // iterate over different weekly tables
- for (var i = 0; i < weeklyno; i++) {
- var xval;
- var nval;
- var aval1, aval2;
- var sval =[ "", "", "", "", "", "", ""];
- //action
- if (document.getElementById('wt' + i + '_x') !== null) {
- xval = encodeParm(document.getElementById('wt' + i + '_x').value);
- } else {
- xval = "undef"
- }
- //next time - attention, field is in toptable
- if (document.getElementById('wt' + i + '_n') !== null) {
- nval = document.getElementById('wt' + i + '_n').value;
- } else {
- nval = "undef"
- }
- //activity party/absence
- aval1 = $("input[name='acti_" + i + "_m']:checked").map(function () {
- return $(this).val();
- }).get();
- //activity vacation/holiday
- aval2 = $("input[name='acti_" + i + "_d']:checked").map(function () {
- return $(this).val();
- }).get();
-
- //iterate over days of week
- for (var j = 0; j < 7; j++) {
- if (document.getElementById('wt' + weeklykeys[j] + i + '_s') !== null) {
- sval[j] = document.getElementById('wt' + weeklykeys[j] + i + '_s').value;
- } else {
- sval[j] = "undef";
- }
- }
-
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={main::YAAHM_setParm("' + name + '","wt","' + i + '","' + xval + '","' + nval + '","' + aval1 + '","' + aval2 + '","' + sval.join('","') + '")}');
- }
- // really start it now
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + ' ={main::YAAHM_startWeeklyTimer("' + name + '")}');
-
- // change links
- for (var i = 0; i < weeklyno; i++) {
- $('#wt' + i + 'link').html('<a href="fhem?detail=' + name + '.wtimer_' + i + '.IF">' + name + '.wtimer_' + i + '.IF</a>');
- }
- }
|