// // // const SENSOR_F_INVERSE = 1; const SENSOR_F_ACTIVE = 2; var sensors = []; // // update or add a new element // function sensor_Update(sdata) { for (var i = 0; i < sensors.length; i++) { if (sdata.name == sensors[i].name) { console.log ("Update Sensor:" + sensors[i].name + " with Sensor:" + sdata.name); sensors[i].name = sdata.name; sensors[i].ifname = sdata.ifname; sensors[i].addr = sdata.addr; sensors[i].flags = sdata.flags; return; } } // not found add element console.log ("Add Sensor:" + sdata.name); sensors.push ({ name: sdata.name, ifname: sdata.ifname, addr: sdata.addr, flags: sdata.flags }); }; // // delete element from the list // in arrays we can not delete just an element, so we create a new one // and replace this one. // function sensor_Delete(name) { var l = new Array(); for (var i = 0; i < sensors.length; i++) { if (name != sensors[i].name) { l.push (sensors[i]); } } // clear list and replace list with new data. sensors.lenght = 0; sensors = l; }; // // send new element to server // function sensor_server_Add(elm) { var request = { command: "addsensor", sensor: elm }; serverinout (request, serverinout_defaultCallback); }; // // send delete element to server // function sensor_server_Del(elm) { var request = { command: "delsensor", sensor: elm }; serverinout (request, serverinout_defaultCallback); }; // // return if the sensor is active or not // function sensor_IsActive(name) { for (var i = 0; i < sensors.length; i++) { if (name == sensors[i].name) { if (sensors[i].flags & SENSOR_F_ACTIVE) return 1 else return 0; } } return 0; }; function sensordetail_show(name, create) { var win = document.getElementById("sensordetail"); console.log ("sensordetail_show"); if (!win) { console.log ("sensordetail_show create window"); win = gWindowCreate("sensordetail", "Sensor", 400, 300, " \
\ Sensor Name: \
\ \ \


\
\ Interface: \ Addr: \ Flags: \

\
\ \ \ \
\ \ "); gAddEventListener("sensor_CLOSE", 'click', sensordetail_cb_close); gAddEventListener("sensor_DELETE", 'click', sensordetail_cb_delete); gAddEventListener("sensor_SAVE", 'click', sensordetail_cb_save); gAddEventListener("sensor_NEXT", 'click', sensordetail_cb_next); gAddEventListener("sensor_PREV", 'click', sensordetail_cb_prev); } if (name) { for (var i = 0; i < sensors.length; i++) { if (name == sensors[i].name) sensordetail_setData(sensors[i]); } } if (create) { let rname = document.getElementById("sensor_name"); if (rname.value != name && rname.value == "") rname.value = name; } }; function sensordetail_cb_close () { var win = document.getElementById("sensordetail"); if (win) document.body.removeChild(win); }; // // Callback: Delete Button // function sensordetail_cb_delete () { var elm = {}; elm = sensordetail_getData(); sensor_Delete(elm.name); sensor_server_Del(elm); }; // // Callback: Save Button // function sensordetail_cb_save () { var elm = {}; elm = sensordetail_getData(); sensor_Update(elm); sensor_server_Add(elm); }; // // Callback: Next Button // function sensordetail_cb_next () { var cursel = -1; var name = document.getElementById("sensor_name"); for (var i = 0; i < sensors.length; i++) { if (name.value == sensors[i].name) cursel = i; } cursel = cursel + 1; if (cursel >= sensors.length) cursel = 0; if (cursel < 0) cursel = 0; for (var i = 0; i < sensors.length; i++) { if (i == cursel) sensordetail_setData(sensors[i]); } console.log ("Cursel: " + cursel + " sensors.lenght:" + sensors.length); }; // // Callback: Prev Button // function sensordetail_cb_prev () { var cursel = -1; var name = document.getElementById("sensor_name"); for (var i = 0; i < sensors.length; i++) { if (name.value == sensors[i].name) cursel = i; } cursel = cursel - 1; if (cursel < 0 || cursel >= sensors.length) cursel = sensors.length - 1; for (var i = 0; i < sensors.length; i++) { if (i == cursel) sensordetail_setData(sensors[i]); } console.log ("Cursel: " + cursel + " sensors.lenght:" + sensors.length); }; // // fill out all the elements on the dialogbox // function sensordetail_setData(elm) { var name = document.getElementById("sensor_name"); var ifname = document.getElementById("sensor_ifname"); var addr = document.getElementById("sensor_addr"); var flags = document.getElementById("sensor_flags"); if (elm) { if (name) name.value = elm.name; if (ifname) ifname.value = elm.ifname; if (addr) addr.value = elm.addr; if (flags) flags.value = elm.flags; } }; // // return all elements from the dialogbox // function sensordetail_getData() { var res = { name: "", ifname: "", addr: 0, flags:0 }; var name = document.getElementById("sensor_name"); var ifname = document.getElementById("sensor_ifname"); var addr = document.getElementById("sensor_addr"); var flags = document.getElementById("sensor_flags"); if (name) res.name = name.value; if (ifname) res.ifname = ifname.value; if (flags) res.flags = flags.value; if (addr) res.addr = addr.value; return res; }; // *********************************************************************************************** // *********************************************************************************************** // sensorlist: show a list of sensors. // // *********************************************************************************************** // *********************************************************************************************** function sensorlist_show() { var win = document.getElementById("sensorlist"); console.log ("sensorlist_show"); if (!win) { console.log ("sensorlist_show create window"); win = gWindowCreate("sensorlist", "Sensors", 400, 500, " \
\ \
\
\ \
\ \ "); gAddEventListener("sensorlist_CLOSE", 'click', sensorlist_cb_close); } var ul = document.getElementById("sensorlist_elements"); // // sort list var ssorted = new Array(); for (var i = 0; i < sensors.length; i++) { ssorted.push(sensors[i].name); } ssorted.sort(); // // append all sensors for (var i = 0; i < ssorted.length; i++) { let li = document.createElement("li"); li.appendChild(document.createTextNode(ssorted[i])); li.setAttribute("id", "sensor_elm_"+ssorted[i]); ul.appendChild(li); gAddEventListener("sensor_elm_"+ssorted[i], 'click', sensorlist_clicked); } }; function sensorlist_clicked() { var i; console.log ("childnodes: " + this.childNodes[0].textContent); sensordetail_show(this.childNodes[0].textContent); }; function sensorlist_cb_close () { var win = document.getElementById("sensorlist"); if (win) document.body.removeChild(win); }; // *********************************************************************************************** // *********************************************************************************************** // sensor contextmenu: show a context menu for the sensor // // *********************************************************************************************** // *********************************************************************************************** function sensor_contextmenu(name) { let innerhtml = ""; innerhtml = "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; gContextmenuCreate(name, innerhtml); gAddEventListener("contextbox_On", 'click', sensor_ctxmenu_On); gAddEventListener("contextbox_Off", 'click', sensor_ctxmenu_Off); gAddEventListener("contextbox_Close", 'click', gContextmenuClose); }; function sensor_ctxmenu_On (element, value) { let name = document.getElementById("ConextMenuHead").innerHTML; sensor_server_setactive(name, "1"); gContextmenuClose(); } function sensor_ctxmenu_Off (element, value) { let name = document.getElementById("ConextMenuHead").innerHTML; sensor_server_setactive(name, "0"); gContextmenuClose(); } // // send sensor activate and deactivate to server // function sensor_server_setactive(name, value) { var request = { command: "sensorSetActive", sensor: name, enabled: value }; console.log ("send sensor active:" + name); serverinout (request, serverinout_defaultCallback); };