Compare commits
No commits in common. "1564f9b55971b5ccdb3e808795915df98f84fa96" and "120a0e3efd96a3002c1a963312c0caf0fd1873ef" have entirely different histories.
1564f9b559
...
120a0e3efd
19 changed files with 154 additions and 472 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -25,6 +25,3 @@ All except of the timing control data block.
|
||||||
|
|
||||||
You have to click at the link "reset timing control data" on the webinterface.
|
You have to click at the link "reset timing control data" on the webinterface.
|
||||||
|
|
||||||
Sample schematics (no NodeMCU pins defined in there)
|
|
||||||
|
|
||||||
![Sample schematics](pic/schematics.png)
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ tabTDE.classList.remove("visible");
|
||||||
amain.classList.add("pure-button-primary");
|
amain.classList.add("pure-button-primary");
|
||||||
acfg.classList.remove("pure-button-primary");
|
acfg.classList.remove("pure-button-primary");
|
||||||
atde.classList.remove("pure-button-primary");
|
atde.classList.remove("pure-button-primary");
|
||||||
loadGraphData();
|
|
||||||
});
|
});
|
||||||
acfg.addEventListener("click", function() {
|
acfg.addEventListener("click", function() {
|
||||||
tabMain.classList.remove("visible");
|
tabMain.classList.remove("visible");
|
||||||
|
@ -51,10 +50,10 @@ var channel3 = [];
|
||||||
var channel4 = [];
|
var channel4 = [];
|
||||||
for (var i = 0; i < data['tcdata'].length; i++) {
|
for (var i = 0; i < data['tcdata'].length; i++) {
|
||||||
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
||||||
channel1.push(data['tcdata'][i]['ch1'] * 100 / 255);
|
channel1.push(data['tcdata'][i]['ch1']);
|
||||||
channel2.push(data['tcdata'][i]['ch2'] * 100 / 255);
|
channel2.push(data['tcdata'][i]['ch2']);
|
||||||
channel3.push(data['tcdata'][i]['ch3'] * 100 / 255);
|
channel3.push(data['tcdata'][i]['ch3']);
|
||||||
channel4.push(data['tcdata'][i]['ch4'] * 100 / 255);
|
channel4.push(data['tcdata'][i]['ch4']);
|
||||||
}
|
}
|
||||||
currenttime.push(data['currenttime']['hour']);
|
currenttime.push(data['currenttime']['hour']);
|
||||||
currenttime.push(data['currenttime']['min']);
|
currenttime.push(data['currenttime']['min']);
|
||||||
|
@ -131,7 +130,7 @@ tickangle: -45,
|
||||||
},
|
},
|
||||||
yaxis: {
|
yaxis: {
|
||||||
title: 'Brightness',
|
title: 'Brightness',
|
||||||
range: [0, 100],
|
range: [0, 255],
|
||||||
},
|
},
|
||||||
shapes: [{
|
shapes: [{
|
||||||
type: 'line',
|
type: 'line',
|
||||||
|
@ -151,119 +150,6 @@ Plotly.newPlot('plot_chart', [trace1, trace2, trace3, trace4], layout);
|
||||||
}
|
}
|
||||||
setInterval(loadGraphData, 10000);
|
setInterval(loadGraphData, 10000);
|
||||||
loadGraphData();
|
loadGraphData();
|
||||||
function loadTCGraphData() {
|
|
||||||
console.log('----> generate tc data graph <----');
|
|
||||||
var data = JSON.parse(createJsonFromTable());
|
|
||||||
var currenttime = [];
|
|
||||||
var time = [];
|
|
||||||
var channel1 = [];
|
|
||||||
var channel2 = [];
|
|
||||||
var channel3 = [];
|
|
||||||
var channel4 = [];
|
|
||||||
for (var i = 0; i < data['tcdata'].length; i++) {
|
|
||||||
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
|
||||||
channel1.push(data['tcdata'][i]['ch1'] * 100 / 255);
|
|
||||||
channel2.push(data['tcdata'][i]['ch2'] * 100 / 255);
|
|
||||||
channel3.push(data['tcdata'][i]['ch3'] * 100 / 255);
|
|
||||||
channel4.push(data['tcdata'][i]['ch4'] * 100 / 255);
|
|
||||||
}
|
|
||||||
currenttime.push(data['currenttime']['hour']);
|
|
||||||
currenttime.push(data['currenttime']['min']);
|
|
||||||
var currentTimeStr = currenttime[0] + ':' + (currenttime[1] < 10 ? '0' : '') + currenttime[1];
|
|
||||||
var index = time.indexOf(currentTimeStr);
|
|
||||||
if (index === -1) {
|
|
||||||
var lowerIndex = -1;
|
|
||||||
var upperIndex = -1;
|
|
||||||
for (var i = 0; i < time.length - 1; i++) {
|
|
||||||
const currentDate = new Date();
|
|
||||||
const year = currentDate.getFullYear();
|
|
||||||
const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
|
|
||||||
const day = currentDate.getDate().toString().padStart(2, '0');
|
|
||||||
const dateString = `${year}-${month}-${day}`;
|
|
||||||
const start = moment(dateString + ' ' + time[i], 'YYYY-MM-DD HH:mm');
|
|
||||||
const curr = moment(dateString + ' ' + currentTimeStr, 'YYYY-MM-DD HH:mm');
|
|
||||||
const end = moment(dateString + ' ' + time[i + 1], 'YYYY-MM-DD HH:mm');
|
|
||||||
if (curr.isBetween(start, end)) {
|
|
||||||
lowerIndex = i;
|
|
||||||
upperIndex = i + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lowerIndex === -1 || upperIndex === -1) {
|
|
||||||
console.log("Error: Current time not found in time array and not between two elements in time array. Fixing it...");
|
|
||||||
lowerIndex = 0;
|
|
||||||
upperIndex = 1;
|
|
||||||
var tmp1 = time[0].split(':');
|
|
||||||
currenttime[0] = tmp1[0];
|
|
||||||
currenttime[1] = tmp1[1];
|
|
||||||
}
|
|
||||||
var lowerTime = time[lowerIndex].split(":");
|
|
||||||
var upperTime = time[upperIndex].split(":");
|
|
||||||
var timeDiff = (currenttime[0] - lowerTime[0]) + ((currenttime[1] - lowerTime[1]) / 60);
|
|
||||||
var indexFloat = lowerIndex + timeDiff / ((upperTime[0] - lowerTime[0]) + ((upperTime[1] - lowerTime[1]) / 60));
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
if (indexFloat > index) {
|
|
||||||
index = indexFloat;
|
|
||||||
}
|
|
||||||
var trace1 = {
|
|
||||||
x: time,
|
|
||||||
y: channel1,
|
|
||||||
name: 'Channel 1',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace2 = {
|
|
||||||
x: time,
|
|
||||||
y: channel2,
|
|
||||||
name: 'Channel 2',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace3 = {
|
|
||||||
x: time,
|
|
||||||
y: channel3,
|
|
||||||
name: 'Channel 3',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace4 = {
|
|
||||||
x: time,
|
|
||||||
y: channel4,
|
|
||||||
name: 'Channel 4',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var layout = {
|
|
||||||
title: 'Timing Control Data Blocks',
|
|
||||||
xaxis: {
|
|
||||||
title: 'Time',
|
|
||||||
tickangle: -45,
|
|
||||||
},
|
|
||||||
yaxis: {
|
|
||||||
title: 'Brightness',
|
|
||||||
range: [0, 100],
|
|
||||||
},
|
|
||||||
shapes: [{
|
|
||||||
type: 'line',
|
|
||||||
x0: index,
|
|
||||||
y0: 0,
|
|
||||||
x1: index,
|
|
||||||
y1: 255,
|
|
||||||
line: {
|
|
||||||
color: 'lightgrey',
|
|
||||||
width: 3,
|
|
||||||
dash: 'dot'
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
Plotly.newPlot('tc_plot_chart', [trace1, trace2, trace3, trace4], layout);
|
|
||||||
}
|
|
||||||
setInterval(function() {
|
|
||||||
if (document.getElementById('tab-tde').classList.contains('visible')) {
|
|
||||||
loadTCGraphData();
|
|
||||||
}
|
|
||||||
}, 2000);
|
|
||||||
function updateLightState() {
|
function updateLightState() {
|
||||||
console.log('----> setting bri and power switch <----');
|
console.log('----> setting bri and power switch <----');
|
||||||
for (let i = 1; i <= {{LIGHT_COUNT}}; i++) {
|
for (let i = 1; i <= {{LIGHT_COUNT}}; i++) {
|
||||||
|
@ -345,22 +231,22 @@ headerRow.appendChild(th);
|
||||||
table.appendChild(headerRow);
|
table.appendChild(headerRow);
|
||||||
for (var i = 1; i <= 10; i++) {
|
for (var i = 1; i <= 10; i++) {
|
||||||
var tr = document.createElement("tr");
|
var tr = document.createElement("tr");
|
||||||
var tdHour = createSelectCell(23, 0, 1);
|
var tdHour = createSelectCell(23, 0);
|
||||||
tdHour.id = "hour" + i;
|
tdHour.id = "hour" + i;
|
||||||
tr.appendChild(tdHour);
|
tr.appendChild(tdHour);
|
||||||
var tdMinute = createSelectCell(59, 0, 1);
|
var tdMinute = createSelectCell(59, 0);
|
||||||
tdMinute.id = "minute" + i;
|
tdMinute.id = "minute" + i;
|
||||||
tr.appendChild(tdMinute);
|
tr.appendChild(tdMinute);
|
||||||
var tdCh1 = createSelectCell(100, 0, 1);
|
var tdCh1 = createSelectCell(100, 0);
|
||||||
tdCh1.id = "ch1_" + i;
|
tdCh1.id = "ch1_" + i;
|
||||||
tr.appendChild(tdCh1);
|
tr.appendChild(tdCh1);
|
||||||
var tdCh2 = createSelectCell(100, 0, 1);
|
var tdCh2 = createSelectCell(100, 0);
|
||||||
tdCh2.id = "ch2_" + i;
|
tdCh2.id = "ch2_" + i;
|
||||||
tr.appendChild(tdCh2);
|
tr.appendChild(tdCh2);
|
||||||
var tdCh3 = createSelectCell(100, 0, 1);
|
var tdCh3 = createSelectCell(100, 0);
|
||||||
tdCh3.id = "ch3_" + i;
|
tdCh3.id = "ch3_" + i;
|
||||||
tr.appendChild(tdCh3);
|
tr.appendChild(tdCh3);
|
||||||
var tdCh4 = createSelectCell(100, 0, 1);
|
var tdCh4 = createSelectCell(100, 0);
|
||||||
tdCh4.id = "ch4_" + i;
|
tdCh4.id = "ch4_" + i;
|
||||||
tr.appendChild(tdCh4);
|
tr.appendChild(tdCh4);
|
||||||
table.appendChild(tr);
|
table.appendChild(tr);
|
||||||
|
@ -370,9 +256,9 @@ container.innerHTML = "";
|
||||||
container.classList.add("pure-form");
|
container.classList.add("pure-form");
|
||||||
container.appendChild(table);
|
container.appendChild(table);
|
||||||
}
|
}
|
||||||
function createSelectCell(max, value, step) {
|
function createSelectCell(max, value) {
|
||||||
var select = document.createElement("select");
|
var select = document.createElement("select");
|
||||||
for (var i = 0; i <= max; i += step) {
|
for (var i = 0; i <= max; i++) {
|
||||||
var option = document.createElement("option");
|
var option = document.createElement("option");
|
||||||
option.value = i;
|
option.value = i;
|
||||||
option.text = i;
|
option.text = i;
|
||||||
|
@ -392,12 +278,11 @@ for (var i = 0; i < tcdata.length; i++) {
|
||||||
var row = document.getElementById("hour" + (i+1)).parentNode;
|
var row = document.getElementById("hour" + (i+1)).parentNode;
|
||||||
row.cells[0].childNodes[0].value = tcdata[i].hour;
|
row.cells[0].childNodes[0].value = tcdata[i].hour;
|
||||||
row.cells[1].childNodes[0].value = tcdata[i].min;
|
row.cells[1].childNodes[0].value = tcdata[i].min;
|
||||||
row.cells[2].childNodes[0].value = parseInt(Math.round(tcdata[i].ch1 * 100 / 255));
|
row.cells[2].childNodes[0].value = parseInt(tcdata[i].ch1 * 100 / 255);
|
||||||
row.cells[3].childNodes[0].value = parseInt(Math.round(tcdata[i].ch2 * 100 / 255));
|
row.cells[3].childNodes[0].value = parseInt(tcdata[i].ch2 * 100 / 255);
|
||||||
row.cells[4].childNodes[0].value = parseInt(Math.round(tcdata[i].ch3 * 100 / 255));
|
row.cells[4].childNodes[0].value = parseInt(tcdata[i].ch3 * 100 / 255);
|
||||||
row.cells[5].childNodes[0].value = parseInt(Math.round(tcdata[i].ch4 * 100 / 255));
|
row.cells[5].childNodes[0].value = parseInt(tcdata[i].ch4 * 100 / 255);
|
||||||
}
|
}
|
||||||
loadTCGraphData();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function createJsonFromTable() {
|
function createJsonFromTable() {
|
||||||
|
@ -415,40 +300,20 @@ tcdata.push({hour: hour, min: min, ch1: ch1, ch2: ch2, ch3: ch3, ch4: ch4});
|
||||||
}
|
}
|
||||||
var currentTime = {hour: new Date().getHours(), min: new Date().getMinutes()};
|
var currentTime = {hour: new Date().getHours(), min: new Date().getMinutes()};
|
||||||
var jsonData = {tcdata: tcdata, currenttime: currentTime};
|
var jsonData = {tcdata: tcdata, currenttime: currentTime};
|
||||||
|
console.log("jsonData = " + JSON.stringify(jsonData));
|
||||||
return JSON.stringify(jsonData);
|
return JSON.stringify(jsonData);
|
||||||
}
|
}
|
||||||
function sendDataToServer() {
|
function sendDataToServer() {
|
||||||
var jsonData = createJsonFromTable();
|
var jsonData = createJsonFromTable();
|
||||||
var urlEncodedData = encodeURIComponent(jsonData);
|
var urlEncodedData = encodeURIComponent(jsonData);
|
||||||
var url = 'http://{{IP_ADDRESS}}/tc_data_blocks_store?data=' + urlEncodedData;
|
var url = 'http://{{IP_ADDRESS}}/tc_data_blocks_store?data=' + urlEncodedData;
|
||||||
|
console.log("url so save = " + url);
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
xhr.onreadystatechange = function () {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4) {
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
var button = document.getElementById("save-button");
|
|
||||||
if (xhr.status === 200) {
|
|
||||||
button.classList.remove("pure-button-primary");
|
|
||||||
button.classList.add("success");
|
|
||||||
button.innerHTML = "Saved!";
|
|
||||||
setTimeout(function () {
|
|
||||||
button.classList.remove("success");
|
|
||||||
button.classList.add("pure-button-primary");
|
|
||||||
button.innerHTML = "save";
|
|
||||||
}, 2000);
|
|
||||||
console.log('Data successfully sent to server!');
|
console.log('Data successfully sent to server!');
|
||||||
} else {
|
|
||||||
button.classList.remove("pure-button-primary");
|
|
||||||
button.classList.add("error");
|
|
||||||
button.innerHTML = "Error!";
|
|
||||||
setTimeout(function () {
|
|
||||||
button.classList.remove("error");
|
|
||||||
button.classList.add("pure-button-primary");
|
|
||||||
button.innerHTML = "save";
|
|
||||||
}, 2000);
|
|
||||||
console.log('Error while sending data to server.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
loadTCGraphData();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,20 +6,10 @@
|
||||||
<strong>Timming control data editor</strong>
|
<strong>Timming control data editor</strong>
|
||||||
</label>
|
</label>
|
||||||
<br>
|
<br>
|
||||||
<table>
|
<div id="table-container">
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<div id="table-container" class="top-align">
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div id="tc_plot_chart" class="top-align">
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br>
|
<br>
|
||||||
<a href="#" id="save-button" class="pure-button pure-button-primary" onclick="sendDataToServer();">save</a>
|
<a href="#" class="pure-button pure-button-primary" onclick="sendDataToServer();">save</a>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- end of tab-tde -->
|
</div> <!-- end of tab-tde -->
|
||||||
<script src="http://{{IP_ADDRESS}}/js_bottom">
|
<script src="http://{{IP_ADDRESS}}/js_bottom">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!-- middle -->
|
<!-- middle -->
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div id="plot_chart" class="top-align"></div>
|
<div id="plot_chart"></div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -47,4 +47,4 @@
|
||||||
<br>
|
<br>
|
||||||
<table border=0>
|
<table border=0>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="top-align">
|
<td>
|
||||||
|
|
|
@ -41,6 +41,3 @@ cursor: pointer;
|
||||||
.pure-button:hover {
|
.pure-button:hover {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
.top-align {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
|
@ -19,8 +19,6 @@ function addTabListener() {
|
||||||
amain.classList.add("pure-button-primary");
|
amain.classList.add("pure-button-primary");
|
||||||
acfg.classList.remove("pure-button-primary");
|
acfg.classList.remove("pure-button-primary");
|
||||||
atde.classList.remove("pure-button-primary");
|
atde.classList.remove("pure-button-primary");
|
||||||
|
|
||||||
loadGraphData(); // reload the graph
|
|
||||||
});
|
});
|
||||||
|
|
||||||
acfg.addEventListener("click", function() {
|
acfg.addEventListener("click", function() {
|
||||||
|
@ -66,10 +64,10 @@ function loadGraphData() {
|
||||||
var channel4 = [];
|
var channel4 = [];
|
||||||
for (var i = 0; i < data['tcdata'].length; i++) {
|
for (var i = 0; i < data['tcdata'].length; i++) {
|
||||||
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
||||||
channel1.push(data['tcdata'][i]['ch1'] * 100 / 255);
|
channel1.push(data['tcdata'][i]['ch1']);
|
||||||
channel2.push(data['tcdata'][i]['ch2'] * 100 / 255);
|
channel2.push(data['tcdata'][i]['ch2']);
|
||||||
channel3.push(data['tcdata'][i]['ch3'] * 100 / 255);
|
channel3.push(data['tcdata'][i]['ch3']);
|
||||||
channel4.push(data['tcdata'][i]['ch4'] * 100 / 255);
|
channel4.push(data['tcdata'][i]['ch4']);
|
||||||
}
|
}
|
||||||
currenttime.push(data['currenttime']['hour']);
|
currenttime.push(data['currenttime']['hour']);
|
||||||
currenttime.push(data['currenttime']['min']);
|
currenttime.push(data['currenttime']['min']);
|
||||||
|
@ -157,7 +155,7 @@ function loadGraphData() {
|
||||||
},
|
},
|
||||||
yaxis: {
|
yaxis: {
|
||||||
title: 'Brightness',
|
title: 'Brightness',
|
||||||
range: [0, 100],
|
range: [0, 255],
|
||||||
},
|
},
|
||||||
shapes: [{
|
shapes: [{
|
||||||
type: 'line',
|
type: 'line',
|
||||||
|
@ -178,135 +176,6 @@ function loadGraphData() {
|
||||||
setInterval(loadGraphData, 10000);
|
setInterval(loadGraphData, 10000);
|
||||||
loadGraphData();
|
loadGraphData();
|
||||||
|
|
||||||
function loadTCGraphData() {
|
|
||||||
console.log('----> generate tc data graph <----');
|
|
||||||
|
|
||||||
var data = JSON.parse(createJsonFromTable());
|
|
||||||
//console.log(data);
|
|
||||||
var currenttime = [];
|
|
||||||
var time = [];
|
|
||||||
var channel1 = [];
|
|
||||||
var channel2 = [];
|
|
||||||
var channel3 = [];
|
|
||||||
var channel4 = [];
|
|
||||||
for (var i = 0; i < data['tcdata'].length; i++) {
|
|
||||||
time.push(data['tcdata'][i]['hour'] + ':' + (data['tcdata'][i]['min'] < 10 ? '0' : '') + data['tcdata'][i]['min']);
|
|
||||||
channel1.push(data['tcdata'][i]['ch1'] * 100 / 255);
|
|
||||||
channel2.push(data['tcdata'][i]['ch2'] * 100 / 255);
|
|
||||||
channel3.push(data['tcdata'][i]['ch3'] * 100 / 255);
|
|
||||||
channel4.push(data['tcdata'][i]['ch4'] * 100 / 255);
|
|
||||||
}
|
|
||||||
currenttime.push(data['currenttime']['hour']);
|
|
||||||
currenttime.push(data['currenttime']['min']);
|
|
||||||
//console.log(currenttime);
|
|
||||||
var currentTimeStr = currenttime[0] + ':' + (currenttime[1] < 10 ? '0' : '') + currenttime[1];
|
|
||||||
var index = time.indexOf(currentTimeStr);
|
|
||||||
if (index === -1) {
|
|
||||||
var lowerIndex = -1;
|
|
||||||
var upperIndex = -1;
|
|
||||||
for (var i = 0; i < time.length - 1; i++) {
|
|
||||||
//console.log(time[i] + ' <= ' + currentTimeStr + ' >= ' + time[i + 1]);
|
|
||||||
const currentDate = new Date();
|
|
||||||
const year = currentDate.getFullYear();
|
|
||||||
const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
|
|
||||||
const day = currentDate.getDate().toString().padStart(2, '0');
|
|
||||||
const dateString = `${year}-${month}-${day}`;
|
|
||||||
const start = moment(dateString + ' ' + time[i], 'YYYY-MM-DD HH:mm');
|
|
||||||
const curr = moment(dateString + ' ' + currentTimeStr, 'YYYY-MM-DD HH:mm');
|
|
||||||
const end = moment(dateString + ' ' + time[i + 1], 'YYYY-MM-DD HH:mm');
|
|
||||||
//console.log(start.format('YYYY-MM-DD HH:mm') + ' <= ' + curr.format('YYYY-MM-DD HH:mm') + ' >= ' + end.format('YYYY-MM-DD HH:mm'));
|
|
||||||
//console.log(curr.isBetween(start, end));
|
|
||||||
if (curr.isBetween(start, end)) {
|
|
||||||
lowerIndex = i;
|
|
||||||
upperIndex = i + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//console.log('lowerIndex=' + lowerIndex);
|
|
||||||
//console.log('upperIndex=' + upperIndex);
|
|
||||||
if (lowerIndex === -1 || upperIndex === -1) {
|
|
||||||
console.log("Error: Current time not found in time array and not between two elements in time array. Fixing it...");
|
|
||||||
lowerIndex = 0;
|
|
||||||
upperIndex = 1;
|
|
||||||
var tmp1 = time[0].split(':');
|
|
||||||
//console.log('tmp1 = ' + tmp1);
|
|
||||||
currenttime[0] = tmp1[0];
|
|
||||||
currenttime[1] = tmp1[1];
|
|
||||||
}
|
|
||||||
var lowerTime = time[lowerIndex].split(":");
|
|
||||||
var upperTime = time[upperIndex].split(":");
|
|
||||||
var timeDiff = (currenttime[0] - lowerTime[0]) + ((currenttime[1] - lowerTime[1]) / 60);
|
|
||||||
var indexFloat = lowerIndex + timeDiff / ((upperTime[0] - lowerTime[0]) + ((upperTime[1] - lowerTime[1]) / 60));
|
|
||||||
//console.log("Index (float): " + indexFloat);
|
|
||||||
} else {
|
|
||||||
//console.log("Index (integer): " + index);
|
|
||||||
//console.log("Index (float): " + index);
|
|
||||||
}
|
|
||||||
if (indexFloat > index) {
|
|
||||||
index = indexFloat;
|
|
||||||
}
|
|
||||||
//console.log("index in graph >>>" + index);
|
|
||||||
var trace1 = {
|
|
||||||
x: time,
|
|
||||||
y: channel1,
|
|
||||||
name: 'Channel 1',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace2 = {
|
|
||||||
x: time,
|
|
||||||
y: channel2,
|
|
||||||
name: 'Channel 2',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace3 = {
|
|
||||||
x: time,
|
|
||||||
y: channel3,
|
|
||||||
name: 'Channel 3',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var trace4 = {
|
|
||||||
x: time,
|
|
||||||
y: channel4,
|
|
||||||
name: 'Channel 4',
|
|
||||||
type: 'scatter',
|
|
||||||
mode: 'lines+markers',
|
|
||||||
};
|
|
||||||
var layout = {
|
|
||||||
title: 'Timing Control Data Blocks',
|
|
||||||
xaxis: {
|
|
||||||
title: 'Time',
|
|
||||||
tickangle: -45,
|
|
||||||
},
|
|
||||||
yaxis: {
|
|
||||||
title: 'Brightness',
|
|
||||||
range: [0, 100],
|
|
||||||
},
|
|
||||||
shapes: [{
|
|
||||||
type: 'line',
|
|
||||||
x0: index,
|
|
||||||
y0: 0,
|
|
||||||
x1: index,
|
|
||||||
y1: 255,
|
|
||||||
line: {
|
|
||||||
color: 'lightgrey',
|
|
||||||
width: 3,
|
|
||||||
dash: 'dot'
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
Plotly.newPlot('tc_plot_chart', [trace1, trace2, trace3, trace4], layout);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
setInterval(function() {
|
|
||||||
if (document.getElementById('tab-tde').classList.contains('visible')) {
|
|
||||||
loadTCGraphData();
|
|
||||||
}
|
|
||||||
}, 2000);
|
|
||||||
|
|
||||||
function updateLightState() {
|
function updateLightState() {
|
||||||
console.log('----> setting bri and power switch <----');
|
console.log('----> setting bri and power switch <----');
|
||||||
for (let i = 1; i <= {{LIGHT_COUNT}}; i++) {
|
for (let i = 1; i <= {{LIGHT_COUNT}}; i++) {
|
||||||
|
@ -414,32 +283,32 @@ function createTable() {
|
||||||
var tr = document.createElement("tr");
|
var tr = document.createElement("tr");
|
||||||
|
|
||||||
// Stunde
|
// Stunde
|
||||||
var tdHour = createSelectCell(23, 0, 1);
|
var tdHour = createSelectCell(23, 0);
|
||||||
tdHour.id = "hour" + i;
|
tdHour.id = "hour" + i;
|
||||||
tr.appendChild(tdHour);
|
tr.appendChild(tdHour);
|
||||||
|
|
||||||
// Minute
|
// Minute
|
||||||
var tdMinute = createSelectCell(59, 0, 1);
|
var tdMinute = createSelectCell(59, 0);
|
||||||
tdMinute.id = "minute" + i;
|
tdMinute.id = "minute" + i;
|
||||||
tr.appendChild(tdMinute);
|
tr.appendChild(tdMinute);
|
||||||
|
|
||||||
// ch1
|
// ch1
|
||||||
var tdCh1 = createSelectCell(100, 0, 1);
|
var tdCh1 = createSelectCell(100, 0);
|
||||||
tdCh1.id = "ch1_" + i;
|
tdCh1.id = "ch1_" + i;
|
||||||
tr.appendChild(tdCh1);
|
tr.appendChild(tdCh1);
|
||||||
|
|
||||||
// ch2
|
// ch2
|
||||||
var tdCh2 = createSelectCell(100, 0, 1);
|
var tdCh2 = createSelectCell(100, 0);
|
||||||
tdCh2.id = "ch2_" + i;
|
tdCh2.id = "ch2_" + i;
|
||||||
tr.appendChild(tdCh2);
|
tr.appendChild(tdCh2);
|
||||||
|
|
||||||
// ch3
|
// ch3
|
||||||
var tdCh3 = createSelectCell(100, 0, 1);
|
var tdCh3 = createSelectCell(100, 0);
|
||||||
tdCh3.id = "ch3_" + i;
|
tdCh3.id = "ch3_" + i;
|
||||||
tr.appendChild(tdCh3);
|
tr.appendChild(tdCh3);
|
||||||
|
|
||||||
// ch4
|
// ch4
|
||||||
var tdCh4 = createSelectCell(100, 0, 1);
|
var tdCh4 = createSelectCell(100, 0);
|
||||||
tdCh4.id = "ch4_" + i;
|
tdCh4.id = "ch4_" + i;
|
||||||
tr.appendChild(tdCh4);
|
tr.appendChild(tdCh4);
|
||||||
|
|
||||||
|
@ -452,12 +321,12 @@ function createTable() {
|
||||||
container.appendChild(table);
|
container.appendChild(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createSelectCell(max, value, step) {
|
function createSelectCell(max, value) {
|
||||||
// Erstelle ein neues select-Element
|
// Erstelle ein neues select-Element
|
||||||
var select = document.createElement("select");
|
var select = document.createElement("select");
|
||||||
|
|
||||||
// Füge Optionen hinzu
|
// Füge Optionen hinzu
|
||||||
for (var i = 0; i <= max; i += step) {
|
for (var i = 0; i <= max; i++) {
|
||||||
var option = document.createElement("option");
|
var option = document.createElement("option");
|
||||||
option.value = i;
|
option.value = i;
|
||||||
option.text = i;
|
option.text = i;
|
||||||
|
@ -486,13 +355,11 @@ function fillTableFromJson() {
|
||||||
var row = document.getElementById("hour" + (i+1)).parentNode;
|
var row = document.getElementById("hour" + (i+1)).parentNode;
|
||||||
row.cells[0].childNodes[0].value = tcdata[i].hour;
|
row.cells[0].childNodes[0].value = tcdata[i].hour;
|
||||||
row.cells[1].childNodes[0].value = tcdata[i].min;
|
row.cells[1].childNodes[0].value = tcdata[i].min;
|
||||||
row.cells[2].childNodes[0].value = parseInt(Math.round(tcdata[i].ch1 * 100 / 255));
|
row.cells[2].childNodes[0].value = parseInt(tcdata[i].ch1 * 100 / 255);
|
||||||
row.cells[3].childNodes[0].value = parseInt(Math.round(tcdata[i].ch2 * 100 / 255));
|
row.cells[3].childNodes[0].value = parseInt(tcdata[i].ch2 * 100 / 255);
|
||||||
row.cells[4].childNodes[0].value = parseInt(Math.round(tcdata[i].ch3 * 100 / 255));
|
row.cells[4].childNodes[0].value = parseInt(tcdata[i].ch3 * 100 / 255);
|
||||||
row.cells[5].childNodes[0].value = parseInt(Math.round(tcdata[i].ch4 * 100 / 255));
|
row.cells[5].childNodes[0].value = parseInt(tcdata[i].ch4 * 100 / 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadTCGraphData();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -513,7 +380,7 @@ function createJsonFromTable() {
|
||||||
}
|
}
|
||||||
var currentTime = {hour: new Date().getHours(), min: new Date().getMinutes()};
|
var currentTime = {hour: new Date().getHours(), min: new Date().getMinutes()};
|
||||||
var jsonData = {tcdata: tcdata, currenttime: currentTime};
|
var jsonData = {tcdata: tcdata, currenttime: currentTime};
|
||||||
//console.log("jsonData = " + JSON.stringify(jsonData));
|
console.log("jsonData = " + JSON.stringify(jsonData));
|
||||||
return JSON.stringify(jsonData);
|
return JSON.stringify(jsonData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,34 +388,14 @@ function sendDataToServer() {
|
||||||
var jsonData = createJsonFromTable();
|
var jsonData = createJsonFromTable();
|
||||||
var urlEncodedData = encodeURIComponent(jsonData);
|
var urlEncodedData = encodeURIComponent(jsonData);
|
||||||
var url = 'http://{{IP_ADDRESS}}/tc_data_blocks_store?data=' + urlEncodedData;
|
var url = 'http://{{IP_ADDRESS}}/tc_data_blocks_store?data=' + urlEncodedData;
|
||||||
|
console.log("url so save = " + url);
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
xhr.onreadystatechange = function () {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4) {
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
var button = document.getElementById("save-button");
|
|
||||||
if (xhr.status === 200) {
|
|
||||||
button.classList.remove("pure-button-primary");
|
|
||||||
button.classList.add("success");
|
|
||||||
button.innerHTML = "Saved!";
|
|
||||||
setTimeout(function () {
|
|
||||||
button.classList.remove("success");
|
|
||||||
button.classList.add("pure-button-primary");
|
|
||||||
button.innerHTML = "save";
|
|
||||||
}, 2000);
|
|
||||||
console.log('Data successfully sent to server!');
|
console.log('Data successfully sent to server!');
|
||||||
} else {
|
|
||||||
button.classList.remove("pure-button-primary");
|
|
||||||
button.classList.add("error");
|
|
||||||
button.innerHTML = "Error!";
|
|
||||||
setTimeout(function () {
|
|
||||||
button.classList.remove("error");
|
|
||||||
button.classList.add("pure-button-primary");
|
|
||||||
button.innerHTML = "save";
|
|
||||||
}, 2000);
|
|
||||||
console.log('Error while sending data to server.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
loadTCGraphData(); // update the tc data graph
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -6,21 +6,10 @@
|
||||||
<strong>Timming control data editor</strong>
|
<strong>Timming control data editor</strong>
|
||||||
</label>
|
</label>
|
||||||
<br>
|
<br>
|
||||||
<table>
|
<div id="table-container">
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<div id="table-container" class="top-align">
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div id="tc_plot_chart" class="top-align">
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<a href="#" id="save-button" class="pure-button pure-button-primary" onclick="sendDataToServer();">save</a>
|
<a href="#" class="pure-button pure-button-primary" onclick="sendDataToServer();">save</a>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- end of tab-tde -->
|
</div> <!-- end of tab-tde -->
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!-- middle -->
|
<!-- middle -->
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div id="plot_chart" class="top-align"></div>
|
<div id="plot_chart"></div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -47,5 +47,5 @@
|
||||||
<br>
|
<br>
|
||||||
<table border=0>
|
<table border=0>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="top-align">
|
<td>
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,3 @@ cursor: pointer;
|
||||||
.pure-button:hover {
|
.pure-button:hover {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
.top-align {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 458 KiB |
Loading…
Reference in a new issue