123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- var rawContent;
- var data = [];
- var loading = false;
- var websock;
- var settings = {
- modOffset: 0,
- inputOffset: 0,
- updateInterval: 2,
- autoupdate: false,
- emulateMaster: false
- }
- var autoRefreshInterval;
- function GetData() {
- if (loading)
- return;
- loading = true;
- return fetch("/data")
- .then(function(result) {
- return result.text().then(function(text) {
- rawContent = text;
- data = ConvertData(rawContent);
- loading = false;
- });
- })
- .catch(function() {
- loading = false;
- });
- }
- function ConvertData(rawContent) {
- let dataResult = [];
- var tmpList = rawContent.split('~');
- tmpList.forEach(resultLine => {
- var tmpResultLine = resultLine.split(":");
- var tmpModule = tmpResultLine[0].split(".");
- var dataObj = {
- module: parseInt(tmpModule[0]),
- input: parseInt(tmpModule[1]),
- data: (tmpResultLine[1] == 1)
- }
- if (!isNaN(dataObj.input) && !isNaN(dataObj.module))
- dataResult.push(dataObj);
- });
- return dataResult;
- }
- function RenderData(data) {
- var table = document.getElementById("overview");
- table.innerHTML = "";
- var lastModule = -1;
- var row;
- data.forEach(element => {
- if (lastModule != element.module) {
- lastModule = element.module
- row = table.insertRow(element.module);
- var title = row.insertCell(0);
- title.innerHTML = (element.module + settings.modOffset);
- }
- var cell = row.insertCell(element.input + 1);
- cell.innerHTML = (element.input + settings.inputOffset);
- cell.classList.add('input-value')
- cell.classList.add('input-value-' + ((element.data) ? "ON" : "OFF"))
- });
- document.getElementById("lastUpdate").innerHTML = new Date().toLocaleString();
- }
- function SaveSettings() {
- settings.modOffset = parseInt(document.getElementById("modOffset").value);
- settings.inputOffset = parseInt(document.getElementById("inputOffset").value);
- settings.updateInterval = parseInt(document.getElementById("updateInterval").value);
- settings.autoupdate = document.getElementById("checkoptions-0").checked
- settings.emulateMaster = document.getElementById("checkoptions-1").checked
- window.localStorage.setItem('settings', JSON.stringify(settings));
- SetAutoUpdate();
- }
- function LoadSettings(rawSettings) {
- if(rawSettings == null){
- var tmpsettings = JSON.parse(window.localStorage.getItem('settings'));
- if (tmpsettings == null)
- return;
- settings = tmpsettings;
- }else{
- settings = rawSettings;
- }
- document.getElementById("modOffset").value = settings.modOffset;
- document.getElementById("inputOffset").value = settings.inputOffset;
- document.getElementById("updateInterval").value = settings.updateInterval;
- document.getElementById("checkoptions-0").checked = settings.autoupdate;
- document.getElementById("checkoptions-1").checked = settings.emulateMaster;
- SetAutoUpdate();
- }
- function SaveSettingsOnDevice(){
- SaveSettings();
- var urlEncodedSettings = encodeURI(JSON.stringify(settings));
- var url = "/config?key=settings&value="+urlEncodedSettings;
- fetch(url)
- .then(function(result) {
- result.text().then(function(text) {
- alert("Saved")
- });
- })
- .catch(function() {
- });
- }
- function LoadSettingsFromDevice(){
- fetch("/config?key=settings")
- .then(function(result) {
- return result.text().then(function(text) {
- var settingsraw = JSON.parse(decodeURI(text));
- LoadSettings(settingsraw);
- });
- })
- .catch(function() {
- loading = false;
- });
- }
- function SetAutoUpdate() {
- if (autoRefreshInterval != null)
- clearInterval(autoRefreshInterval)
- autoRefreshInterval = setInterval(() => {
- if (settings.autoupdate) {
- if (loading)
- return;
- DoUpdate();
- }
- }, settings.updateInterval*1000);
- }
- function DoUpdate() {
- if (loading)
- return;
- GetData().then(() => {
- RenderData(data)
- });
- }
- function StartSocket() {
- websock = new WebSocket('ws://' + window.location.hostname + ':81/');
- websock.onopen = function(evt) { console.log('websock open'); };
- websock.onclose = function(evt) { console.log('websock close'); };
- websock.onerror = function(evt) { console.log(evt); };
- websock.onmessage = function(evt) {
- console.log(evt);
- switch(evt.data){
- case "update":
- DoUpdate();
- break;
- }
- };
- }
- LoadSettings();
- DoUpdate();
- StartSocket();
- document.getElementById("button-save").addEventListener("click", SaveSettings);
- document.getElementById("button-save-device").addEventListener("click", SaveSettingsOnDevice);
- document.getElementById("button-load-device").addEventListener("click", LoadSettingsFromDevice);
- document.getElementById("button-update").addEventListener("click", DoUpdate);
|