PCB lives now in its own git repo https://git.la10cy.net/DeltaLima/CanGrow-12V-PCB
241 lines
7.7 KiB
C
241 lines
7.7 KiB
C
/*
|
|
*
|
|
* include/Webserver/File_cangrow_JS.h - /cangrow.js header file
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
const char File_cangrow_JS[] PROGMEM = R"(function toggleDisplay(id) {
|
|
let el = document.getElementById(id);
|
|
let el_cs = getComputedStyle(el);
|
|
|
|
if (el_cs.getPropertyValue('display') === 'none') {
|
|
el.style.display = 'inline';
|
|
} else {
|
|
el.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function hideAllClass(classname) {
|
|
|
|
const el = document.getElementsByClassName(classname);
|
|
|
|
for(let i = 0; i < el.length ; i++) {
|
|
el[i].style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function showSelect(selectId, prefix, hideClass = '') {
|
|
if(hideClass != '') {
|
|
hideAllClass(hideClass);
|
|
}
|
|
|
|
let selVal = document.getElementById(selectId).value;
|
|
toggleId = prefix + selVal;
|
|
if(document.getElementById(toggleId) !== null ) {
|
|
toggleDisplay(toggleId);
|
|
}
|
|
}
|
|
|
|
function confirmDelete(name) {
|
|
return confirm('Delete ' + name + '?');
|
|
}
|
|
|
|
function SystemOutputAddselectRequired(selectId) {
|
|
let selVal = document.getElementById(selectId).value;
|
|
//hideAllClass('hidden');
|
|
console.log('selectReq Status: ' + selVal);
|
|
switch(selVal) {
|
|
case '1':
|
|
document.getElementById('gpio').required = true;
|
|
document.getElementById('gpio_pwm').required = true;
|
|
|
|
document.getElementById('i2c_type').required = false;
|
|
document.getElementById('i2c_addr').required = false;
|
|
document.getElementById('i2c_port').required = false;
|
|
document.getElementById('webcall_host').required = false;
|
|
document.getElementById('webcall_path_on').required = false;
|
|
document.getElementById('webcall_path_off').required = false;
|
|
break;
|
|
|
|
case '2':
|
|
document.getElementById('gpio').required = false;
|
|
document.getElementById('gpio_pwm').required = false;
|
|
|
|
document.getElementById('i2c_type').required = true;
|
|
document.getElementById('i2c_addr').required = true;
|
|
document.getElementById('i2c_port').required = true;
|
|
document.getElementById('webcall_host').required = false;
|
|
document.getElementById('webcall_path_on').required = false;
|
|
document.getElementById('webcall_path_off').required = false;
|
|
break;
|
|
|
|
case '3':
|
|
document.getElementById('gpio').required = false;
|
|
document.getElementById('gpio_pwm').required = false;
|
|
|
|
document.getElementById('i2c_type').required = false;
|
|
document.getElementById('i2c_addr').required = false;
|
|
document.getElementById('i2c_port').required = false;
|
|
document.getElementById('webcall_host').required = true;
|
|
document.getElementById('webcall_path_on').required = true;
|
|
document.getElementById('webcall_path_off').required = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
// https://stackoverflow.com/a/67412019
|
|
function SystemOutputAdd_replaceI2cAddr(selectId, replaceId) {
|
|
let sel = document.querySelector('#' + replaceId);
|
|
let selVal = document.getElementById(selectId).value;
|
|
// Remove existing options
|
|
Array.from(sel).forEach((option) => {
|
|
sel.removeChild(option)
|
|
});
|
|
// get or set your new options here.
|
|
if(selVal) {
|
|
addr[selVal].map((optionData) => {
|
|
let opt = document.createElement('option');
|
|
let PortsUsed = 0;
|
|
let label = optionData[0];
|
|
opt.value = optionData[1];
|
|
// iterate through i2c modules available ports
|
|
for(i = 0; i < optionData[2].length; i++) {
|
|
if(optionData[2][i] > 0) {
|
|
PortsUsed++;
|
|
}
|
|
}
|
|
if(PortsUsed >= optionData[2].length) {
|
|
opt.disabled = true;
|
|
label = label + ' (used)';
|
|
}
|
|
opt.appendChild(document.createTextNode(label));
|
|
sel.appendChild(opt);
|
|
});
|
|
SystemOutputAdd_replaceI2cPort('i2c_type', 'i2c_addr', 'i2c_port');
|
|
}
|
|
|
|
}
|
|
//////////////////////////////////////
|
|
function SystemOutputAdd_replaceI2cPort(selectTypeId, selectAddrId, replaceId) {
|
|
let repl = document.querySelector('#' + replaceId);
|
|
let selValType = document.getElementById(selectTypeId).value;
|
|
let selValAddr = document.getElementById(selectAddrId).value;
|
|
// Remove existing options
|
|
Array.from(repl).forEach((option) => {
|
|
repl.removeChild(option)
|
|
});
|
|
if(selValAddr) {
|
|
console.log('true');
|
|
// iterate through i2c modules available ports
|
|
for(i = 0; i < addr[selValType][selValAddr][2].length; i++) {
|
|
let opt = document.createElement('option');
|
|
let label = 'Port ' + i;
|
|
opt.value = i;
|
|
if(addr[selValType][selValAddr][2][i] > 0) {
|
|
label = label + ' (used)';
|
|
opt.disabled = true;
|
|
}
|
|
opt.appendChild(document.createTextNode(label));
|
|
repl.appendChild(opt);
|
|
console.log('PortID ' + i + ' Port sum ' + addr[selValType][selValAddr][2].length);
|
|
}
|
|
} else {
|
|
let opt = document.createElement('option');
|
|
opt.appendChild(document.createTextNode('n/a'));
|
|
opt.disabled = true;
|
|
repl.appendChild(opt);
|
|
}
|
|
}
|
|
//javascript is my passion
|
|
|
|
|
|
function SystemSensorAddGpioI2cSel(selectId) {
|
|
let selVal = document.getElementById(selectId).value;
|
|
hideAllClass('hidden');
|
|
if(selVal == 1) {
|
|
document.getElementById('type_1').style.display = 'inline';
|
|
document.getElementById('i2c_addr').required = false;
|
|
if(ESP == '32') {
|
|
document.getElementById('gpio').required = true;
|
|
}
|
|
} else if(selVal > 1) {
|
|
document.getElementById('type_2').style.display = 'inline';
|
|
document.getElementById('i2c_addr').required = true;
|
|
if(ESP == '32') {
|
|
document.getElementById('gpio').required = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
function convertDateToEpoch(src, dst) {
|
|
var val = document.getElementById(src).value ;
|
|
document.getElementById(dst).value = new Date(val).getTime() / 1000;
|
|
}
|
|
|
|
|
|
function GrowSelectControlSensorRead(selectId, inputSensor, inputRead) {
|
|
let selVal = document.getElementById(selectId).value;
|
|
let sensor = selVal.split(':')[0];
|
|
let read = selVal.split(':')[1];
|
|
document.getElementById(inputSensor).value = sensor;
|
|
document.getElementById(inputRead).value = read;
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetSensorJson(callback) {
|
|
let path = '/api/sensor/';
|
|
//let path = '/api/sensor/raw_' + sensor + '_' + reading;
|
|
var xobj = new XMLHttpRequest();
|
|
xobj.overrideMimeType('application/json');
|
|
xobj.open('GET', path, true);
|
|
xobj.onreadystatechange = function() {
|
|
if (xobj.readyState == 4 && xobj.status == "200") {
|
|
callback(xobj.responseText);
|
|
}
|
|
}
|
|
xobj.send(null);
|
|
}
|
|
|
|
|
|
/* propably not the best place, but this as global as it can get i guess */
|
|
var SensorJson;
|
|
function SensorJsonRefresh() {
|
|
GetSensorJson(function(response) {
|
|
/* needs to be a global */
|
|
SensorJson = JSON.parse(response);
|
|
});
|
|
//console.log('Refresh SensorJson');
|
|
}
|
|
|
|
|
|
function rawRefresh(sensor, reading, id) {
|
|
let element = id + sensor + '-' + reading;
|
|
document.getElementById(element).textContent = SensorJson.sensor[sensor].reading[reading].raw;
|
|
//console.log(SensorJson.sensor[sensor].reading[reading].raw);
|
|
//console.log('sensor:' + sensor + ';reading:' + reading + ';id:' + id + ';element:' + element);
|
|
}
|
|
|
|
|
|
function sensorRefresh(sensor, reading, id) {
|
|
let element = id + sensor + '-' + reading;
|
|
document.getElementById(element).textContent = SensorJson.sensor[sensor].reading[reading].value + ' ' + SensorJson.sensor[sensor].reading[reading].unit;
|
|
//console.log(SensorJson.sensor[sensor].reading[reading].value + SensorJson.sensor[sensor].reading[reading].unit);
|
|
//console.log('sensor:' + sensor + ';reading:' + reading + ';id:' + id + ';element:' + element);
|
|
}
|
|
|
|
)";
|
|
|
|
void WebFile_cangrow_JS(AsyncWebServerRequest *request) {
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/javascript"), File_cangrow_JS);
|
|
response->addHeader(F("Cache-control"), F("max-age=600"));
|
|
request->send(response);
|
|
//request->send_P(200, "text/javascript", File_cangrow_JS);
|
|
}
|