This commit is contained in:
Vincent BOUQUET
2023-11-25 17:08:22 +01:00
parent f9e2728a0d
commit 2b199eaf74
6 changed files with 910 additions and 1810 deletions

View File

@@ -7,17 +7,23 @@ $(document).ready(function() {
var fixturename = "Robin iForte - Simulated";
$('#pth').html(fixturename)
$(document).prop('title', fixturename)
$('body').prepend(generateNavBar());
var am = 0;
var mip = 0;
mip = 1;
var href = $(location).attr('pathname');
if (href.indexOf('personality') != -1) am = 1;
if (href.indexOf('logs') != -1) am = 2;
if (href.indexOf('sensors') != -1) am = 3;
if (href.indexOf('discovery') != -1) am = (3 + mip);
$('#navbar ul li').eq(am).addClass('active');
// handle RDM ident
var idntb = $('#idnt img');
var idnt_status = sessionStorage.getItem('iforte_idnt')
if (idnt_status == 1) {
idntb.addClass("a");
}
$('#idnt').click(function() {
var idnt_status = sessionStorage.getItem('iforte_idnt')
if (idnt_status == 1) {
idntb.removeClass("a");
sessionStorage.setItem('iforte_idnt', '0')
} else {
idntb.addClass("a")
sessionStorage.setItem('iforte_idnt', '1')
}
});
//handle settings
$(document).on('click','#scfg',function() {
@@ -35,7 +41,7 @@ $(document).ready(function() {
$('.sb').unbind();
copy_form_values(2);
$('#cfg-modal').modal();
$('.sb').bind('click',function() {
loader(1);
var par = ['opswd','npswd','npsch', 'iforte_demo_rains_age','iforte_demo_pressure_test'];
@@ -61,12 +67,6 @@ $(document).ready(function() {
populateUIFromSessionStorage()
showCustomModal('Cleared', 'Simulated page reset to default settings.')
});
// handle RDM ident
var idntb = $('#idnt img');
$('#idnt').click(function() {
idntb.toggleClass('a');
});
});
// custom modal
@@ -94,11 +94,56 @@ function loader(showheader) {
}
function do_ajax(p_url,p_data,f,i = -1,a = true) {
/*console.log("url : " + p_url);
console.log("data : " + p_data);
console.log("callback function : " + f);
console.log("callback params : " + i);
console.log("async : " + a);*/
loader(1);
// convert p_data to an Object
const data_object = {}
p_data.toString().split('&').forEach(element => {
var kvp = element.split('=');
data_object[kvp[0]] = kvp[1]
});
p_data = data_object
switch (p_url) {
case '/reset_hours':
if (p_data.rh == 0) {
sessionStorage.setItem('iforte_hr0', '0')
} else if (p_data.rh == 1){
sessionStorage.setItem('iforte_hr1', '0')
}
break;
case '/reset_temps':
if (p_data.rt == 0) {
sessionStorage.setItem('iforte_tmr0', sessionStorage.getItem('iforte_t0'))
} else if (p_data.rt == 3){
sessionStorage.setItem('iforte_tmr3', sessionStorage.getItem('iforte_t3'))
} else if (p_data.rt == 2){
sessionStorage.setItem('iforte_tmr2', sessionStorage.getItem('iforte_t2'))
} else if (p_data.rt == 1){
sessionStorage.setItem('iforte_tmr1', sessionStorage.getItem('iforte_t1'))
}
break;
default:
for (const [key, value] of Object.entries(p_data)) {
//sessionStorage.setItem(key, value)
console.log("key: %o", key)
console.log("val: %o", value)
if (key == 'iforte_tmpu') {
if (value == 0) {
sessionStorage.setItem('iforte_tu', 'C')
} else if (value == 1) {
sessionStorage.setItem('iforte_tu', 'F')
}
}
}
break;
}
populateUIFromSessionStorage()
loader(0)
close_modal()
}
function copy_form_values(dir) {
@@ -162,7 +207,6 @@ function show_errors(s,ids) {
}
function close_modal() {
setTimeout(function() {
$('#m-b').empty();
$('#cfg-modal').modal('hide');
@@ -235,118 +279,9 @@ function c_rad(name,legend,options,invalid_feedback_text,group_class) {
return html;
}
function box(t,id,p,su = '',vid = '',bc = '') {
var s = '';
s += '<div class="col-md-6 col-xl-4 box-c' + bc + '">';
if (id >= 0) s += '<h2>' + t + '<a class="cfg" onclick="open_modal(' + id + ');"><img src="../files/settings.svg"></a></h2>';
else s += '<h2>' + t + '</h2>';
s += '<div class="box">';
for (var j in p) {
if (p[j][0].length > 0) s += '<h3>' + p[j][0] + '</h3>';
s += '<ul class="group">';
for (var i in p[j][1]) {
l = p[j][1][i].split(";");
if (l.length == 4) s += l[0];
else s += '<li>' + l[0] + '</li>';
}
s += '</ul>';
s += '<ul class="group vals" id="' + vid + '">';
for (var i in p[j][1]) {
l = p[j][1][i].split(";");
if (l.length == 4) {
var t = l[3].replace(/&DG/gi,'&deg;');
s += t;
} else if (l.length == 3) s += l[2];
else if (l.length == 2) s += '<li><div id="' + l[1] + '_v">-</div></li>';
else s += '<li>-</li>';
}
s += '</ul>';
}
s += su;
s += '</div>';
s += '</div>';
return s;
}
function generateNavBar() {
var o = '<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">';
o += '<div class="container">';
o += '<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a>';
o += '<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar">';
o += '<span class="navbar-toggler-icon"></span>';
o += '</button>';
o += '<div class="collapse navbar-collapse" id="navbar">';
o += '<ul class="navbar-nav mr-auto">';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="./index.html">Status</a>';
o += '</li>';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="./personality.html">Personality</a>';
o += '</li>';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="./logs.html">Logs</a>';
o += '</li>';
o += '<li class="nav-item snz">';
o += '<a class="nav-link" href="./sensors.html">RAINS logs</a>';
o += '</li>';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="./discovery.html">Discovery</a>';
o += '</li>';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="#" id="scfg">Settings</a>';
o += '</li>';
o += '<li class="nav-item">';
o += '<a class="nav-link" href="#" id="idnt"><img class="rdmi" src="../files/identify.svg"></a>';
o += '</li>';
o += '</ul>';
o += '</div>';
o += '</div>';
o += '</nav>';
o += '<div id="cfg-modal" class="modal fade" tabindex="-1" role="dialog">';
o += '<div class="modal-dialog" role="document">';
o += '<div class="modal-content">';
o += '<div class="modal-header">';
o += '<img src="../files/settings.svg">';
o += '<h5 class="modal-title" id="m-t"></h5>';
o += '<button type="button" class="close" data-dismiss="modal" aria-label="Close">';
o += '<span aria-hidden="true">&times;</span>';
o += '</button>';
o += '</div>';
o += '<div class="modal-body" id="m-b">';
o += '</div>';
o += '<div class="modal-footer" id="m-f">';
o += '<button type="button" class="btn btn-primary sb">Save</button>';
o += '</div>';
o += '</div>';
o += '</div>';
o += '</div>';
return o;
}
var pre = '';
var dmxsnf = '';
function ptit(t) {
if (t == $('#pth').data('title')) return;
if (t.length) $('#pth').data('title',t);
$('#pth').html($('#pth').data('title') + dmxsnf);
$('#pt_v').html(pre + $('#pth').html());
}
function c_dt(n,t,e,c,it) {
var html = '<div class="form-group' + c + '">';
@@ -390,26 +325,27 @@ function initSessionStorage() {
sessionStorage.setItem('iforte_ip', '2.246.16.203') // ip addr
sessionStorage.setItem('iforte_mac', '00:00:00:00:00:00') //
sessionStorage.setItem('iforte_rdmu', '52:53:00:00:00:00') //
/* DEMO */
sessionStorage.setItem('iforte_demo_rains_age', '1') // rains tubes age 0new 1avg 2old
sessionStorage.setItem('iforte_demo_pressure_test', '0') // type of pressure test, 0ok 1failing
/* VARIABLES */
sessionStorage.setItem('iforte_dmxa', '1') // dmx addr
sessionStorage.setItem('iforte_dmxp', '2') // dmx mode
sessionStorage.setItem('iforte_dmxi', '0') // input (wired0 wireless1 wirelessout2)
sessionStorage.setItem('iforte_rdmn', 'Robin iForte') // rdm name
sessionStorage.setItem('iforte_idnt', '0') // rdm idnt
sessionStorage.setItem('iforte_h0', '1206') // power on time
sessionStorage.setItem('iforte_hr0', '1206') // resetable
sessionStorage.setItem('iforte_h1', '213') // leds on time
sessionStorage.setItem('iforte_hr1', '180') // leds adaptative
sessionStorage.setItem('iforte_cdimc', '0') // dim curve
sessionStorage.setItem('iforte_hpwrm', '0') // high pwr mode
sessionStorage.setItem('iforte_fsmo', '0') // followspot mode
sessionStorage.setItem('iforte_frq', '4928') // led freq
sessionStorage.setItem('iforte_gind', '0') // gobo index mode
@@ -437,7 +373,7 @@ function initSessionStorage() {
sessionStorage.setItem('iforte_pte', '1') // pt EMS
sessionStorage.setItem('iforte_tr', '0') // tilt rev
sessionStorage.setItem('iforte_ptm', '0') // pt mode 0speed 1time
sessionStorage.setItem('iforte_bldmc', '0') // blackout dmc
sessionStorage.setItem('iforte_blptm', '0') // blackout pt
sessionStorage.setItem('iforte_blgwm', '0') // blackout gobo mv
@@ -464,28 +400,25 @@ function initSessionStorage() {
sessionStorage.setItem('iforte_dor', '2') //disp orientation 0norm 1inv 2auto
sessionStorage.setItem('iforte_mics', '9') // mic sens
}
}
function populateUIFromSessionStorage() {
for (var i = 0; i < sessionStorage.length; i++) {
var valueToLoad = '';
switch (sessionStorage.key(i)) {
case 'iforte_dmxp':
var valueToLoad = "Mode " + (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
var valueToLoad = "Mode " + (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
case 'iforte_dmxi':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "wired"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "wireless"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "wireless XLR out"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "wired"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "wireless"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "wireless XLR out"
}
break;
case 'iforte_bldmc':
case 'iforte_blptm':
@@ -498,106 +431,107 @@ function populateUIFromSessionStorage() {
case 'iforte_blgwm':
case 'iforte_blprm':
case 'iforte_btns':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "on"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "on"
}
break;
case 'iforte_emod':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "disable"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "ArtNet"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "gMA1"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "gMA2"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 4) {
var valueToLoad = "sACN"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "disable"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "ArtNet"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "gMA1"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "gMA2"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 4) {
var valueToLoad = "sACN"
}
break;
case 'iforte_dint':
case 'iforte_mics':
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
case 'iforte_dsd':
case 'iforte_dtl':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else {
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + " min")
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else {
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + " min")
}
break;
case 'iforte_dor':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "normal"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "inverted"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "auto"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "normal"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "inverted"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "auto"
}
break;
case 'iforte_fanm':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "auto"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "high"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "auto"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "high"
}
break;
case 'iforte_tmpu':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "°C"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "°F"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "°C"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "°F"
}
break;
case 'iforte_ptm':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "speed"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "time"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "speed"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "time"
}
break;
case 'iforte_cdimc':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "linear"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "square law"
}
break;
case 'iforte_fsmo':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "soft"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "medium"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "hard"
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "linear"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "square law"
}
break;
case 'iforte_fsmo':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "soft"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "medium"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "hard"
}
break;
case 'iforte_gind':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "max. speed & shortcut"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "follow spd. & dir."
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "max spd. & follow dir."
}
break;
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "max. speed & shortcut"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "follow spd. & dir."
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "max spd. & follow dir."
}
break;
case 'iforte_frq':
var valueToLoad = iforte_frq_s(sessionStorage.getItem('iforte_frq'))
break;
var valueToLoad = iforte_frq_s(sessionStorage.getItem('iforte_frq'))
break;
default:
var valueToLoad = sessionStorage.getItem(sessionStorage.key(i))
break;
var valueToLoad = sessionStorage.getItem(sessionStorage.key(i))
break;
}
console.log('key ' + i + " : " + valueToLoad);
$("#" + sessionStorage.key(i) + "_v").html(valueToLoad)
// for each element with id tu_v sets html to string of temp unit
$('div[id^="tu_v"]').html(sessionStorage.getItem('iforte_tu'))
}

View File

@@ -1,279 +1,263 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<link rel="stylesheet" href="../files/bootstrap.min.css">
<link rel="stylesheet" href="../files/layout.css">
<script src="../files/jquery-3.3.1.min.js"></script>
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
<title id="pt_v">iForte</title>
</head>
<body>
<!-- NAV WILL BE ADDED HERE BY FUNCTION IN BASE JS -->
<div class="fixed-top text-center device-label" id="pth"></div>
<div class="container-fluid in">
<h1>Discovery</h1>
<div class="row" id="boxes">
<div class="col-12">
<div class="clearfix">
<div class="float-left pt02">
<input type="checkbox" id="w-ot">
<label for="w-ot" class="pl04"> Move devices with warning to top</label>
</div>
<button class="btn btn-primary float-right" id="scan">Discover (1)</button>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<link rel="stylesheet" href="../files/bootstrap.min.css">
<link rel="stylesheet" href="../files/layout.css">
<script src="../files/jquery-3.3.1.min.js"></script>
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
</head>
<body>
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a class="nav-link" href="./index.html">Status</a></li>
<li class="nav-item"><a class="nav-link" href="./personality.html">Personality</a></li>
<li class="nav-item"><a class="nav-link" href="./logs.html">Logs</a></li>
<li class="nav-item"><a class="nav-link" href="./sensors.html">RAINS logs</a></li>
<li class="nav-item active"><a class="nav-link" href="./discovery.html">Discovery</a></li>
<li class="nav-item"><a class="nav-link" id="scfg">Settings</a></li>
<li class="nav-item"><a class="nav-link" id="idnt"><img class="rdmi" src="../files/identify.svg"></a></li>
</ul>
</div>
</div>
</nav>
<div class="fixed-top text-center device-label" id="pth" onclick="window.location = ('../index.html')"></div>
<div class="container-fluid in">
<h1>Discovery</h1>
<div class="row" id="boxes">
<div class="col-12">
<div class="clearfix">
<div class="float-left pt02">
<input type="checkbox" id="w-ot">
<label for="w-ot" class="pl04"> Move devices with warning to top</label>
</div>
<h2>Columns selection (max. 7 items)</h2>
<div class="clearfix" id="cols">
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-0">
<label for="cchb-0">DMX address</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-1">
<label for="cchb-1">DMX preset</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-2">
<label for="cchb-2">RDM UID</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-3">
<label for="cchb-3">IP address</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-4" disabled="disabled">
<label for="cchb-4">Head temperature [°C]</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-5" disabled="disabled">
<label for="cchb-5">Relative humidity [%]</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-6">
<label for="cchb-6">RAINS (max wet)</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-7" disabled="disabled">
<label for="cchb-7">Last pressure test</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-8">
<label for="cchb-8">Device status</label>
</div>
<button class="btn btn-primary float-right" id="scan">Discover (1)</button>
</div>
<h2>Columns selection (max. 7 items)</h2>
<div class="clearfix" id="cols">
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-0">
<label for="cchb-0">DMX address</label>
</div>
<div class="clearfix">
<button class="btn btn-primary float-right" id="acs">Apply selection</button>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-1">
<label for="cchb-1">DMX preset</label>
</div>
<div class="table-responsive">
<table class="table mt-2" id="d-t">
<thead id="dmax">
<tr>
<th>
<i class="as"></i>
<i class="ab"></i> Device
</th>
<th>
<i></i>
<i class="ab"></i> DMX address
</th>
<th>
<i></i>
<i class="ab"></i> DMX preset
</th>
<th>
<i></i>
<i class="ab"></i> RDM UID
</th>
<th>
<i></i>
<i class="ab"></i> IP address
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Head temperature [°C]
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Relative humidity [%]
</th>
<th>
<i></i>
<i class="ab"></i> RAINS (max wet)
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Last pressure test
</th>
<th>
<i></i>
<i class="ab"></i> Device status
</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr id="myd" class="myd">
<td>iForte</td>
<td>350</td>
<td>Mode 1 (54 channels)</td>
<td>52:53:01:2c:00:0e</td>
<td>2.247.136.14</td>
<td style="display: none;">47</td>
<td style="display: none;">14.0</td>
<td>
<div class="rains sl">
<div style="width:63%"></div>
</div>
</td>
<td style="display: none;">2.3.2023 16:19:02 - OK</td>
<td>active</td>
<td></td>
</tr>
</tbody>
<tbody class="rd" id="scd"></tbody>
</table>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-2">
<label for="cchb-2">RDM UID</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-3">
<label for="cchb-3">IP address</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-4" disabled="disabled">
<label for="cchb-4">Head temperature [°C]</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-5" disabled="disabled">
<label for="cchb-5">Relative humidity [%]</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-6">
<label for="cchb-6">RAINS (max wet)</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" id="cchb-7" disabled="disabled">
<label for="cchb-7">Last pressure test</label>
</div>
<div class="dchb">
<input type="checkbox" class="cchb" checked="" id="cchb-8">
<label for="cchb-8">Device status</label>
</div>
</div>
<div class="clearfix">
<button class="btn btn-primary float-right" id="acs">Apply selection</button>
</div>
<div class="table-responsive">
<table class="table mt-2" id="d-t">
<thead id="dmax">
<tr>
<th>
<i class="as"></i>
<i class="ab"></i> Device
</th>
<th>
<i></i>
<i class="ab"></i> DMX address
</th>
<th>
<i></i>
<i class="ab"></i> DMX preset
</th>
<th>
<i></i>
<i class="ab"></i> RDM UID
</th>
<th>
<i></i>
<i class="ab"></i> IP address
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Head temperature [°C]
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Relative humidity [%]
</th>
<th>
<i></i>
<i class="ab"></i> RAINS (max wet)
</th>
<th style="display: none;">
<i></i>
<i class="ab"></i> Last pressure test
</th>
<th>
<i></i>
<i class="ab"></i> Device status
</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr id="myd" class="myd">
<td>iForte</td>
<td>350</td>
<td>Mode 1 (54 channels)</td>
<td>52:53:01:2c:00:0e</td>
<td>2.247.136.14</td>
<td style="display: none;">47</td>
<td style="display: none;">14.0</td>
<td>
<div class="rains sl">
<div style="width:63%"></div>
</div>
</td>
<td style="display: none;">2.3.2023 16:19:02 - OK</td>
<td>active</td>
<td></td>
</tr>
</tbody>
<tbody class="rd" id="scd"></tbody>
</table>
</div>
</div>
</div>
<div id="cfg-modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<img src="../files/settings.svg">
<h5 class="modal-title" id="m-t"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="m-b"></div>
<div class="modal-footer" id="m-f">
<button type="button" class="btn btn-primary sb">Save</button>
</div>
</div>
<div id="cfg-modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<img src="../files/settings.svg">
<h5 class="modal-title" id="m-t"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="m-b"></div>
<div class="modal-footer" id="m-f">
<button type="button" class="btn btn-primary sb">Save</button>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$('h1').html('Discovery');
$('#boxes').html(' < div class = "col-12" > < div class = "clearfix" > < div class = "float-left pt02" > < input type = "checkbox"
id = "w-ot" > < label
for = "w-ot"
class = "pl04" > Move devices with warning to top < /label> < /div> < button class = "btn btn-primary float-right"
id = "scan"
disabled > < div class = "loader" > < /div> Discovering < /button> < /div> < h2 > Columns selection(max.7 items) < /h2> < div class = "clearfix"
id = "cols" > < /div> < div class = "clearfix" > < button class = "btn btn-primary float-right"
id = "acs" > Apply selection < /button> < /div> < div class = "table-responsive" > < table class = "table mt-2"
id = "d-t" > < thead id = "dmax" > < tr > < th > < i > < /i> < i class = "ab" > < /i> Device < /th> < /tr> < /thead> < tbody > < tr id = "myd"
class = "myd" > < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < /tr> < /tbody> < tbody class = "rd"
id = "scd" > < /tbody> < /table> < /div> < /div>');var s=0;var bsy=false;var i=0;var ti;var tb;var tr;var c_n=['DMX address','DMX preset','RDM UID','IP address','Head temperature [&deg;C]','Relative humidity [%]','RAINS (max wet)','Last pressure test','Device status'];var c_js=['dmxa','dmxp','rdm','ip','t','rh','wet','prt','sta'];var c_s=get_cookie('dc_sel',335);var i=0;c_n.forEach(function(v){$('#dmax>tr').append(' < th > < i > < /i> < i class = "ab" > < /i> '+v+' < /th>');$('#cols').append(' < div class = "dchb" > < input type = "checkbox"
class = "cchb"
'+((c_s & (1< < i)) ? ' checked' : '') + ' id="cchb-' + i + '"> < label
for = "cchb-'+i+'" > '+v+' < /label> < /div>');i++});$('#dmax>tr').append(' < th > & nbsp; < /th>');var ccb=$('#cols .cchb');var tcs=$('#dmax>tr>th');function upd_cols_in_rows(){var c_s=get_cookie('dc_sel',335);var r=$('#d-t>tbody>tr');r.each(function(){var c=$(this).find('td');c.each(function(i){if((i > 0)&&(i<=c_js.length)){if(c_s & (1<<(i - 1))) $(this).show();else $(this).hide()}})})}function ccb_en_dis(){var chck=ccb.filter(':checked');if(chck.length>=6){ccb.filter(':not(":checked")').attr('disabled',true)} else ccb.removeAttr('disabled')}ccb_en_dis();$('.cchb').change(function(){ccb_en_dis()});$('#acs').click(function(){var c_s=0;var i=0;c_n.forEach(function(v){if(ccb.eq(i).prop('checked')) c_s|=(1< < i);
if (c_s & (1 < < i)) tcs.eq(i + 1).show();
else tcs.eq(i + 1).hide();
i++
});
document.cookie = 'dc_sel=' + c_s;
upd_cols_in_rows();
var ups = $('#dmax>tr i.as');
if (ups.parent().is(':hidden')) tcs.eq(0).find('i').eq(0).click()
});
$('#acs').click();
$('#scan').click(function() {
if (bsy) return;
$('#dmax').removeClass('dmax');
$('#scan').html(' < div class = "loader" > < /div> Discovering');$('#scd').html('');set_bsy(true);set_bsy(true,true);do_ajax('/start - scan ',{},function (json){if(json){set_bsy(false);s=0;clearInterval(tr)} else set_bsy(false);$('
body ').click()})});function set_bsy(v,b_o=false){if(!b_o) bsy=v;clearTimeout(tb);tb=setTimeout(function(){if(!v) $('
#scan ').removeAttr('
disabled ');else $('
#scan ').attr('
disabled ','
1 ')},b_o ? 5:400)}function max_w(w){if(isNaN(w)) return w;else return ' < div class = "rains sl" > < div style = "width:'+w+'%" > < /div> < /div>'}function do_scan(){if(bsy) return;switch (s){case 0:set_bsy(true);do_ajax('/get - child ',{},function (json){if(json){if(json['
sd ']==0){s=1;i=0;if(json['
max ']==1) $('
#dmax ').addClass('
dmax ')}} else s=255;set_bsy(false)});break;case 1:set_bsy(true);do_ajax(' / get - child ','
i = '+i,function (json){if(json){if(json['
ip ']){$('
#scd ').append(' < tr data - value = "'+json['ip']+'"
class = "dn dis" > < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < /td> < td > < img class = "rdmi a dn"
src = "../files/identify.svg" > < button class = "btn btn-danger btn-sm drem dn" > & #10005;</button>
</td>
</tr>');upd_cols_in_rows();i++} else s= 2
}
else s = 255;
set_bsy(false)
});
break;
case 2: clearInterval(tr);
set_bsy(true);
$('#scan').html(' < div class = "loader" > < /div> Collecting');var devs=$('#scd tr');if(devs.length==0){$('#scan').html('Discover (1)');set_bsy(false);s=255} else {i=0;devs.each(function(){var r=$(this);if(r.attr('data-value')){do_ajax('http:/
'+' / '+r.attr('
data - value ')+' / remote ',{},function (json){var t=r.find('
td ');if(json){t.eq(0).html(' < a href = "http:/'+'/'+r.attr('data-value')+'"
target = "_blank" > '+json['
dn ']+' < /a>');c_js.forEach(function(v,i){if(json[v]){if(i!=6) t.eq(i+1).html(json[v]);else {t.eq(i+1).html(max_w(json[v]));t.eq(i+1).attr('data-value',json[v])}} else t.eq(i+1).html('-')});r.removeClass('na');r.find('.drem').hide();if(json['stat']==1) r.addClass('err');else r.removeClass('err');r.removeClass('dis');r.show();if(json['rdmi']==1) r.find('.rdmi').show();else r.find('.rdmi').hide()} else {if(r.hasClass('dis')){r.remove()} else {r.addClass('na').removeClass('err');r.find('.drem').show()}t.eq(9).html('disconnected')}i++;if(i>=devs.length){set_bsy(false);s=255;$('#scan').html('Discover ('+($('#scd tr').length+1)+')');tr=setInterval(function(){set_bsy(true,true);s=2},10000);$('#d-t th i.as').click()}})} else { i++}})}break}}ti=setInterval(do_scan,100);function getp(){do_ajax('/pdev_i
',{},function (json){var c=$('
#myd > td ');if(json){c.eq(0).html(json['
dn ']);c_js.forEach(function(v,i){c.eq(i+1).html(i==6 ? max_w(json[v]):json[v])});upd_cols_in_rows();$('
#myd ').removeClass('
na ')} else {c.eq(9).html('
disconnected ');$('
#myd ').addClass('
na ')}})}getp();setInterval(getp,8000);do_ajax(' / status_i ',{},function (json){if(json){ptit(json['
pt '])}});$(document).on('
click ','.drem ',function(){if(confirm('
Are you sure to remove offline device from list ? ')) $(this).parents().eq(1).remove()});var sort_i=0;var sort_d=-1;function ldz3(v){return ('
000 '+v).substr(-3,3)}function my_sort(a,b){var A;var B;console.log(A);if(sort_i==7){B=$(a).children('
td ').eq(sort_i).attr('
data - value ');A=$(b).children('
td ').eq(sort_i).attr('
data - value ')} else {A=$(a).children('
td ').eq(sort_i).text();B=$(b).children('
td ').eq(sort_i).text()}switch (sort_i){case 1:case 5:case 6:case 7:A=parseInt(A);B=parseInt(B);break;case 4:A=A.split('.
');A=ldz3(A[0])+ldz3(A[2])+ldz3(A[3])+ldz3(A[4]);B=B.split('.
');B=ldz3(B[0])+ldz3(B[2])+ldz3(B[3])+ldz3(B[4]);break}if(A > B) return 1*sort_d;else if(A < B) return -1 * sort_d;
else return 0
}
$('table th i').click(function() {
$('table th i').removeClass('as');
$(this).addClass('as');
sort_i = $(this).parent().index();
sort_d = $(this).hasClass('ab') ? -1 : 1;
document.cookie = 'srt_s=' + sort_i;
document.cookie = 'srt_d=' + sort_d;
var et = $('#w-ot').prop('checked');
if (et == true) {
var rw_e = $('#d-t tbody.rd tr.err').remove();
var rw_n = $('#d-t tbody.rd tr.na').remove();
rw_e.sort(my_sort);
rw_n.sort(my_sort)
}
var rw = $('#d-t tbody.rd tr').remove();
rw.sort(my_sort);
if (et == true) {
$.each(rw_e, function(i, r) {
$('#d-t').children('tbody.rd').append(r)
</div>
<script>
$(document).ready(function() {
$('h1').html('Discovery');
$('#boxes').html('<div class="col-12"><div class="clearfix"><div class="float-left pt02"><input type = "checkbox" id="w-ot"><label for="w-ot" class="pl04">Move devices with warning to top</label></div><button class="btn btn-primary float-right" id="scan" disabled><div class="loader"></div> Discovering</button></div><h2 > Columns selection(max.7 items) </h2><div class="clearfix" id="cols"></div><div class="clearfix"><button class="btn btn-primary float-right" id="acs">Apply selection</button></div><div class="table-responsive"><table class="table mt-2" id="d-t"><thead id="dmax"><tr><th><i></i><i class="ab"></i> Device</th></tr></thead><tbody><tr id="myd" class="myd"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody><tbody class="rd" id="scd"></tbody></table></div></div>');
var s=0;
var bsy=false;
var i=0;
var ti;
var tb;
var tr;
var c_n=['DMX address','DMX preset','RDM UID','IP address','Head temperature [&deg;C]','Relative humidity [%]','RAINS (max wet)','Last pressure test','Device status'];
var c_js=['dmxa','dmxp','rdm','ip','t','rh','wet','prt','sta'];
var c_s=get_cookie('dc_sel',335);
var i=0;
c_n.forEach(function(v){
$('#dmax>tr').append('<th><i></i><i class="ab"></i> '+v+'</th>');
$('#cols').append('<div class="dchb"><input type="checkbox" class="cchb"'+((c_s & (1 << i)) ? ' checked' : '') + ' id="cchb-' + i + '"><label for="cchb-'+i+'">'+v+'</label></div>');i++});
$('#dmax>tr').append('<th>&nbsp;</th>');
var ccb=$('#cols .cchb');
var tcs=$('#dmax>tr>th');
function upd_cols_in_rows(){
var c_s=get_cookie('dc_sel',335);
var r=$('#d-t>tbody>tr');
r.each(function(){var c=$(this).find('td');
c.each(function(i){if((i > 0)&&(i<=c_js.length)){if(c_s & (1<<(i - 1))) $(this).show();else $(this).hide()}})})}function ccb_en_dis(){var chck=ccb.filter(':checked');if(chck.length>=6){ccb.filter(':not(":checked")').attr('disabled',true)} else ccb.removeAttr('disabled')}ccb_en_dis();$('.cchb').change(function(){ccb_en_dis()});$('#acs').click(function(){var c_s=0;
var i=0;
c_n.forEach(function(v){if(ccb.eq(i).prop('checked')) c_s|=(1 << i);
if (c_s & (1 << i)) tcs.eq(i + 1).show();
else tcs.eq(i + 1).hide();
i++
});
$.each(rw_n, function(i, r) {
document.cookie = 'dc_sel=' + c_s;
upd_cols_in_rows();
var ups = $('#dmax>tr i.as');
if (ups.parent().is(':hidden')) tcs.eq(0).find('i').eq(0).click()
});
$('#acs').click();
$('#scan').click(function() {
if (bsy) return;
$('#dmax').removeClass('dmax');
$('#scan').html('<div class="loader"></div> Discovering');$('#scd').html('');set_bsy(true);set_bsy(true,true);do_ajax('/start - scan ',{},function (json){if(json){set_bsy(false);s=0;clearInterval(tr)} else set_bsy(false);$('body').click()})});function set_bsy(v,b_o=false){if(!b_o) bsy=v;clearTimeout(tb);tb=setTimeout(function(){if(!v) $('#scan').removeAttr('disabled');else $('#scan').attr('disabled','1')},b_o ? 5:400)}function max_w(w){if(isNaN(w)) return w;else return '<div class="rains sl"><div style = "width:'+w+'%"></div></div>'}function do_scan(){if(bsy) return;switch (s){case 0:set_bsy(true);do_ajax('/get - child ',{},function (json){if(json){if(json['sd']==0){s=1;i=0;if(json['max']==1) $('#dmax').addClass('dmax')}} else s=255;set_bsy(false)});break;case 1:set_bsy(true);do_ajax('/get-child','i = '+i,function (json){if(json){if(json['ip']){$('#scd').append(' < tr data - value = "'+json['ip']+'" class="dn dis"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td><img class="rdmi a dn" src="../files/identify.svg"><button class="btn btn-danger btn-sm drem dn" > & #10005;</button></td></tr>');upd_cols_in_rows();i++} else s= 2}
else s = 255;
set_bsy(false)
});
break;
case 2: clearInterval(tr);
set_bsy(true);
$('#scan').html('<div class="loader"></div> Collecting');
var devs=$('#scd tr');if(devs.length==0){$('#scan').html('Discover (1)');set_bsy(false);s=255} else {i=0;devs.each(function(){var r=$(this);if(r.attr('data-value')){do_ajax('http:/'+' / '+r.attr('data-value')+'/remote',{},function (json){var t=r.find('td');if(json){t.eq(0).html('<a href="http:/'+'/'+r.attr('data-value')+'" target="_blank" > '+json['dn']+'</a>');c_js.forEach(function(v,i){if(json[v]){if(i!=6) t.eq(i+1).html(json[v]);else {t.eq(i+1).html(max_w(json[v]));t.eq(i+1).attr('data-value',json[v])}} else t.eq(i+1).html('-')});r.removeClass('na');r.find('.drem').hide();if(json['stat']==1) r.addClass('err');else r.removeClass('err');r.removeClass('dis');r.show();if(json['rdmi']==1) r.find('.rdmi').show();else r.find('.rdmi').hide()} else {if(r.hasClass('dis')){r.remove()} else {r.addClass('na').removeClass('err');r.find('.drem').show()}t.eq(9).html('disconnected')}i++;if(i>=devs.length){set_bsy(false);s=255;$('#scan').html('Discover ('+($('#scd tr').length+1)+')');tr=setInterval(function(){set_bsy(true,true);s=2},10000);$('#d-t th i.as').click()}})} else { i++}})}break}}ti=setInterval(do_scan,100);function getp(){do_ajax('/pdev_i',{},function (json){var c=$('#myd > td');if(json){c.eq(0).html(json['dn']);c_js.forEach(function(v,i){c.eq(i+1).html(i==6 ? max_w(json[v]):json[v])});upd_cols_in_rows();$('#myd').removeClass('na')} else {c.eq(9).html('disconnected');$('#myd').addClass('na')}})}getp();setInterval(getp,8000);do_ajax('/status_i',{},function (json){if(json){ptit(json['pt'])}});$(document).on('click','.drem',function(){if(confirm('Are you sure to remove offline device from list ?')) $(this).parents().eq(1).remove()});
var sort_i=0;
var sort_d=-1;function ldz3(v){return ('000'+v).substr(-3,3)}function my_sort(a,b){var A;var B;console.log(A);if(sort_i==7){B=$(a).children('td').eq(sort_i).attr('data-value');A=$(b).children('td').eq(sort_i).attr('data-value')} else {A=$(a).children('td').eq(sort_i).text();B=$(b).children('td').eq(sort_i).text()}switch (sort_i){case 1:case 5:case 6:case 7:A=parseInt(A);B=parseInt(B);break;case 4:A=A.split('.');A=ldz3(A[0])+ldz3(A[2])+ldz3(A[3])+ldz3(A[4]);B=B.split('.');B=ldz3(B[0])+ldz3(B[2])+ldz3(B[3])+ldz3(B[4]);break}if(A > B) return 1*sort_d;else if(A < B) return -1 * sort_d;
else return 0
}
$('table th i').click(function() {
$('table th i').removeClass('as');
$(this).addClass('as');
sort_i = $(this).parent().index();
sort_d = $(this).hasClass('ab') ? -1 : 1;
document.cookie = 'srt_s=' + sort_i;
document.cookie = 'srt_d=' + sort_d;
var et = $('#w-ot').prop('checked');
if (et == true) {
var rw_e = $('#d-t tbody.rd tr.err').remove();
var rw_n = $('#d-t tbody.rd tr.na').remove();
rw_e.sort(my_sort);
rw_n.sort(my_sort)
}
var rw = $('#d-t tbody.rd tr').remove();
rw.sort(my_sort);
if (et == true) {
$.each(rw_e, function(i, r) {
$('#d-t').children('tbody.rd').append(r)
});
$.each(rw_n, function(i, r) {
$('#d-t').children('tbody.rd').append(r)
})
}
$.each(rw, function(i, r) {
$('#d-t').children('tbody.rd').append(r)
})
}
$.each(rw, function(i, r) {
$('#d-t').children('tbody.rd').append(r)
});
sort_d = get_cookie('srt_d', 1);
$('#d-t th i').eq(get_cookie('srt_s', 0) * 2 + (sort_d == 1 ? 0 : 1)).click();
if (get_cookie('wot', 1) == 1) $('#w-ot').prop('checked', true);
$('#w-ot').change(function() {
document.cookie = 'wot=' + ($('#w-ot').prop('checked') == true ? 1 : 0);
$('#d-t th i.as').click()
})
});
sort_d = get_cookie('srt_d', 1);
$('#d-t th i').eq(get_cookie('srt_s', 0) * 2 + (sort_d == 1 ? 0 : 1)).click();
if (get_cookie('wot', 1) == 1) $('#w-ot').prop('checked', true);
$('#w-ot').change(function() {
document.cookie = 'wot=' + ($('#w-ot').prop('checked') == true ? 1 : 0);
$('#d-t th i.as').click()
})
});
</script>
</body>
</html>
</html>

View File

@@ -1,443 +1,456 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<link rel="stylesheet" href="../files/bootstrap.min.css">
<link rel="stylesheet" href="../files/layout.css">
<script src="../files/jquery-3.3.1.min.js"></script>
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
<title id="pt_v">iForte</title>
</head>
<body>
<!-- NAV WILL BE ADDED HERE BY FUNCTION IN BASE JS -->
<div class="fixed-top text-center device-label" id="pth"></div>
<div class="container-fluid in">
<h1>Device status</h1>
<div class="row" id="boxes">
<div class="col-md-6 col-xl-4 box-c">
<h2>DMX/RDM settings <a class="cfg" onclick="open_modal(0);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>DMX address</li>
<li>DMX preset</li>
<li>DMX input</li>
<li class="mt-2">IP address</li>
<li>MAC address</li>
<li class="mt-2">RDM UID</li>
<li>RDM label</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_dmxa_v"></div>
</li>
<li>
<div id="iforte_dmxp_v"></div>
<small id="iforte_dmxf_v"></small>
</li>
<li>
<div id="iforte_dmxi_v"></div>
</li>
<li class="mt-2">
<div id="iforte_ip_v"></div>
</li>
<li>
<div id="iforte_mac_v"></div>
</li>
<li class="mt-2">
<div id="iforte_rdmu_v"></div>
</li>
<li>
<div id="iforte_rdmn_v"></div>
</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Device times <a class="cfg" onclick="open_modal(1);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>Power on time</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_h0_v"></div>h / <div id="iforte_hr0_v"></div>h
</li>
</ul>
<p>
<small>total / resettable</small>
</p>
<ul class="group">
<li>LED on time total</li>
<li>LED on time adaptive</li>
</ul>
<ul class="group vals">
<li>
<div id="iforte_h1_v"></div>h
</li>
<li>
<div id="iforte_hr1_v"></div>h
</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Device temperatures <a class="cfg" onclick="open_modal(2);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>LEDs</li>
<li>PSU</li>
<li>Driver</li>
<li>Base</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_t0_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm0_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr0_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t3_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm3_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr3_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t1_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm1_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr1_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t2_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm2_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr2_v"></div>° <div class="iforte_tu"></div>
</li>
</ul>
<p>
<small>current / maximum / resettable</small>
</p>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Wireless state <a class="cfg" onclick="open_modal(3);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>State</li>
<li>Signal strength</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_lwc_v"></div>
</li>
<li>
<div id="iforte_lws_v">%</div>
</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Software versions</h2>
<div class="box">
<ul class="group">
<li>Display System</li>
<li>Module M</li>
<li>Module L1</li>
<li>Module L2</li>
<li>Module O</li>
<li>Module F-A</li>
<li>Module F-B</li>
<li>Module G1</li>
<li>Module G2</li>
<li>Module P</li>
<li>Module C1</li>
<li>Module C2</li>
<li>Module DL</li>
</ul>
<ul class="group vals" id="sw_vers">
<li>1.9</li>
<li>1.4</li>
<li>1.6</li>
<li>1.5</li>
<li>1.3</li>
<li>1.1</li>
<li>1.1</li>
<li>1.5</li>
<li>1.5</li>
<li>1.2</li>
<li>1.2</li>
<li>1.2</li>
<li>1.2</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Device state</h2>
<div class="box">
<ul class="group">
<li>Device status</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_devs_v"></div>
</li>
</ul>
<button class="btn btn-primary btn-block esm dn btn-success" value="0" style="display: inline-block;">Enter standby mode</button>
<div>Current RAINS status</div>
<div>
<small class="fl">WET</small>
<small class="fr">DRY</small>
</div>
<div id="iforte_rai" class="rains">
<div style="width: 63%;"></div>
</div>
<div>MAX WET/resettable</div>
<div>
<small class="fl">WET</small>
<small class="fr">DRY</small>
</div>
<div id="iforte_rair" class="rains">
<div style="width: 63%;"></div>
</div>
<button class="btn btn-primary btn-block mwr" value="0">MAX WET reset</button>
<p>
<small id="iforte_wrt">last reset: 2.3.2023 16:19:57</small>
</p>
</div>
</div>
<div class="col-12 box-c">
<h2 id="sta_err">Status messages</h2>
<div class="box">
<li>This is a simulated REAP™ page for demo purposes. Some content might be different on real fixtures.</li>
<li>Big thanks to Vincent BOUQUET for creating this simulator.</li>
</div>
</div>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<link rel="stylesheet" href="../files/bootstrap.min.css">
<link rel="stylesheet" href="../files/layout.css">
<script src="../files/jquery-3.3.1.min.js"></script>
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
</head>
<body>
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item active"><a class="nav-link" href="./index.html">Status</a></li>
<li class="nav-item"><a class="nav-link" href="./personality.html">Personality</a></li>
<li class="nav-item"><a class="nav-link" href="./logs.html">Logs</a></li>
<li class="nav-item"><a class="nav-link" href="./sensors.html">RAINS logs</a></li>
<li class="nav-item"><a class="nav-link" href="./discovery.html">Discovery</a></li>
<li class="nav-item"><a class="nav-link" id="scfg">Settings</a></li>
<li class="nav-item"><a class="nav-link" id="idnt"><img class="rdmi" src="../files/identify.svg"></a></li>
</ul>
</div>
</div>
<div id="cfg-modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<img src="../files/settings.svg">
<h5 class="modal-title" id="m-t"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="m-b"></div>
<div class="modal-footer" id="m-f">
<button type="button" class="btn btn-primary sb">Save</button>
</div>
</div>
</nav>
<div class="fixed-top text-center device-label" id="pth" onclick="window.location = ('../index.html')"></div>
<div class="container-fluid in">
<h1>Device status</h1>
<div class="row" id="boxes">
<div class="col-md-6 col-xl-4 box-c">
<h2>DMX/RDM settings <a class="cfg" onclick="open_modal(0);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>DMX address</li>
<li>DMX preset</li>
<li>DMX input</li>
<li class="mt-2">IP address</li>
<li>MAC address</li>
<li class="mt-2">RDM UID</li>
<li>RDM label</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_dmxa_v"></div>
</li>
<li>
<div id="iforte_dmxp_v"></div>
<small id="iforte_dmxf_v"></small>
</li>
<li>
<div id="iforte_dmxi_v"></div>
</li>
<li class="mt-2">
<div id="iforte_ip_v"></div>
</li>
<li>
<div id="iforte_mac_v"></div>
</li>
<li class="mt-2">
<div id="iforte_rdmu_v"></div>
</li>
<li>
<div id="iforte_rdmn_v"></div>
</li>
</ul>
</div>
</div>
<script>
var a_m = -1;
var m_t = ['DMX/RDM settings', 'Reset timers', 'Reset temperatures', 'Wireless settings', ];
function open_modal(i) {
a_m = i;
mhdr_status('');
if (a_m < m_t.length) {
$('#m-t').html(m_t[a_m])
<div class="col-md-6 col-xl-4 box-c">
<h2>Device times <a class="cfg" onclick="open_modal(1);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>Power on time</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_h0_v"></div>h / <div id="iforte_hr0_v"></div>h
</li>
</ul>
<p>
<small>total / resettable</small>
</p>
<ul class="group">
<li>LED on time total</li>
<li>LED on time adaptive</li>
</ul>
<ul class="group vals">
<li>
<div id="iforte_h1_v"></div>h
</li>
<li>
<div id="iforte_hr1_v"></div>h
</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Device temperatures <a class="cfg" onclick="open_modal(2);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>LEDs</li>
<li>PSU</li>
<li>Driver</li>
<li>Base</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_t0_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm0_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr0_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t3_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm3_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr3_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t1_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm1_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr1_v"></div>° <div class="iforte_tu"></div>
</li>
<li>
<div id="iforte_t2_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tm2_v"></div>° <div class="iforte_tu"></div> / <div id="iforte_tmr2_v"></div>° <div class="iforte_tu"></div>
</li>
</ul>
<p>
<small>current / maximum / resettable</small>
</p>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Wireless state <a class="cfg" onclick="open_modal(3);">
<img src="../files/settings.svg">
</a>
</h2>
<div class="box">
<ul class="group">
<li>State</li>
<li>Signal strength</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_lwc_v"></div>
</li>
<li>
<div id="iforte_lws_v">%</div>
</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Software versions</h2>
<div class="box">
<ul class="group">
<li>Display System</li>
<li>Module M</li>
<li>Module L1</li>
<li>Module L2</li>
<li>Module O</li>
<li>Module F-A</li>
<li>Module F-B</li>
<li>Module G1</li>
<li>Module G2</li>
<li>Module P</li>
<li>Module C1</li>
<li>Module C2</li>
<li>Module DL</li>
</ul>
<ul class="group vals" id="sw_vers">
<li>1.9</li>
<li>1.4</li>
<li>1.6</li>
<li>1.5</li>
<li>1.3</li>
<li>1.1</li>
<li>1.1</li>
<li>1.5</li>
<li>1.5</li>
<li>1.2</li>
<li>1.2</li>
<li>1.2</li>
<li>1.2</li>
</ul>
</div>
</div>
<div class="col-md-6 col-xl-4 box-c">
<h2>Device state</h2>
<div class="box">
<ul class="group">
<li>Device status</li>
</ul>
<ul class="group vals" id="">
<li>
<div id="iforte_devs_v"></div>
</li>
</ul>
<button class="btn btn-primary btn-block esm dn btn-success" value="0" style="display: inline-block;">Enter standby mode</button>
<div>Current RAINS status</div>
<div>
<small class="fl">WET</small>
<small class="fr">DRY</small>
</div>
<div id="iforte_rai" class="rains">
<div style="width: 63%;"></div>
</div>
<div>MAX WET/resettable</div>
<div>
<small class="fl">WET</small>
<small class="fr">DRY</small>
</div>
<div id="iforte_rair" class="rains">
<div style="width: 63%;"></div>
</div>
<button class="btn btn-primary btn-block mwr" value="0">MAX WET reset</button>
<p>
<small id="iforte_wrt">last reset: 2.3.2023 16:19:57</small>
</p>
</div>
</div>
<div class="col-12 box-c">
<h2 id="sta_err">Status messages</h2>
<div class="box">
<li>This is a simulated REAP™ page for demo purposes. Some content might be different on real fixtures.</li>
<li>Big thanks to Vincent BOUQUET for creating this simulator.</li>
</div>
</div>
</div>
</div>
<div id="cfg-modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<img src="../files/settings.svg">
<h5 class="modal-title" id="m-t"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="m-b"></div>
<div class="modal-footer" id="m-f">
<button type="button" class="btn btn-primary sb">Save</button>
</div>
</div>
</div>
</div>
<script>
var a_m = -1;
var m_t = ['DMX/RDM settings', 'Reset timers', 'Reset temperatures', 'Wireless settings', ];
function open_modal(i) {
a_m = i;
mhdr_status('');
if (a_m < m_t.length) {
$('#m-t').html(m_t[a_m])
}
$('.sb').unbind();
$('#m-f').empty();
$('#m-f').append(' <button type="button" class="btn btn-primary sb">Save</button>');
if(a_m==0) $('#m-f').show();
else $('#m-f').hide();
var h='';if(a_m==0){
h+=c_txt('dmxa','DMX address','Please put DMX address from 1 to 512');
h+=c_opt('dmxp','DMX preset',[1],'Mode ',0,1,'');
h+=c_opt('dmxi','DMX input',['wired','wireless','wireless XLR out'],'',0,1,'Can not set wireless input now!');
h+=c_txt('rdmn','RDM label','Please insert label,max 32 characters')
} else if(a_m==1){
h+=c_btn('Power on time reset',0,' rh')
} else if(a_m==2){
h+=c_btn('LEDs temperature reset',0,' rt');
h+=c_btn('PSU temperature reset',3,' rt');
h+=c_btn('Driver temperature reset',1,' rt');
h+=c_btn('Base temperature reset',2,' rt')
} else if(a_m==3){
h+=c_btn('Unlink Wireless module',0,' lwu')
}
$('#m-b').html(h);
copy_form_values(1);
$('#cfg-modal').modal();
$('.sb').bind('click',function(){
loader(1);
var par=['dmxa','dmxp','dmxi','rdmn'];
do_ajax('/set_dmx',pv(par),function (json){
if(json){
if(json['status']==0){
mhdr_status('suc');
copy_form_values(0);
if(a_m==0){
console.log(json['dmxf']);
fill_values(json,['dmxf'])
} ptit(json['pt']);
close_modal()
}
show_errors(json['status'],par);
loader(0)
}
$('.sb').unbind();
$('#m-f').empty();
$('#m-f').append(' <button type="button" class="btn btn-primary sb">Save</button>');
if(a_m==0) $('#m-f').show();
else $('#m-f').hide();
var h='';if(a_m==0){
h+=c_txt('dmxa','DMX address','Please put DMX address from 1 to 512');
h+=c_opt('dmxp','DMX preset',[1],'Mode ',0,1,'');
h+=c_opt('dmxi','DMX input',['wired','wireless','wireless XLR out'],'',0,1,'Can not set wireless input now!');
h+=c_txt('rdmn','RDM label','Please insert label,max 32 characters')
} else if(a_m==1){
h+=c_btn('Power on time reset',0,' rh')
} else if(a_m==2){
h+=c_btn('LEDs temperature reset',0,' rt');
h+=c_btn('PSU temperature reset',3,' rt');
h+=c_btn('Driver temperature reset',1,' rt');
h+=c_btn('Base temperature reset',2,' rt')
} else if(a_m==3){
h+=c_btn('Unlink Wireless module',0,' lwu')
})
});
$('.rh ').bind('click ',function(){
loader(1);
do_ajax('/reset_hours',{
index: $(this).attr('value')
},function (json){
if(json){
mhdr_status('suc');
fill_values(json,['hr0','hr1','hr2','hr3'])
}
$('#m-b').html(h);
copy_form_values(1);
$('#cfg-modal').modal();
$('.sb').bind('click',function(){
loader(1);
var par=['dmxa','dmxp','dmxi','rdmn'];
do_ajax('/set_dmx',pv(par),function (json){
if(json){
if(json['status']==0){
mhdr_status('suc');
copy_form_values(0);
if(a_m==0){
console.log(json['dmxf']);
fill_values(json,['dmxf'])
} ptit(json['pt']);
close_modal()
}
show_errors(json['status'],par);
loader(0)
}
})
});
$('.rh ').bind('click ',function(){
loader(1);
do_ajax('/reset_hours',{
index: $(this).attr('value')
},function (json){
if(json){
mhdr_status('suc');
fill_values(json,['hr0','hr1','hr2','hr3'])
}
loader(0)
})
});
$('.rt').bind('click',function(){
loader(1);
do_ajax('/reset_temps',{
index: $(this).attr('value')
},function (json){
if(json){
mhdr_status('suc');
fill_values(json,['tmr0','tmr1','tmr2'])
}
loader(0)
})
});
$('.lwu').bind('click',function(){
loader(1);
do_ajax('/lwm',{
unlink:1
},function (json){
if(json){
fill_values(json,['lwc','lws']);
mhdr_status('suc');
close_modal()
}
loader(0)
})
loader(0)
})
});
$('.rt').bind('click',function(){
loader(1);
do_ajax('/reset_temps',{
index: $(this).attr('value')
},function (json){
if(json){
mhdr_status('suc');
fill_values(json,['tmr0','tmr1','tmr2'])
}
loader(0)
})
});
$('.lwu').bind('click',function(){
loader(1);
do_ajax('/lwm',{
unlink:1
},function (json){
if(json){
fill_values(json,['lwc','lws']);
mhdr_status('suc');
close_modal()
}
loader(0)
})
})
}
$(document).ready(function(){
var emb=$('button.esm');
emb.addClass('btn-success');
function ems_btn(v){
if(v==0){
emb.removeClass('sa btn-warning').html('Enter standby mode').show()
} else {
emb.addClass('sa btn-warning').html('Escape standby mode').show()
}
}
emb.click(function(){
var run=true;
var s_v=(emb.hasClass('sa') ? 0:1);
if((s_v==1)&&!confirm('Are you sure you want to enter standby mode?')) run=false;
if(run){
do_ajax('/sbm',{
s:s_v
},function (json){
ems_btn(json['sm']);
fill_values(json,['devs'])
})
}
$(document).ready(function(){
var emb=$('button.esm');
emb.addClass('btn-success');
function ems_btn(v){
if(v==0){
emb.removeClass('sa btn-warning').html('Enter standby mode').show()
} else {
emb.addClass('sa btn-warning').html('Escape standby mode').show()
}
});
var bussy=0;
function do_5s(){bussy|=(1 << 0);
do_ajax('/lwm', {}, function(json) {
if (json) {
fill_values(json, ['lwc', 'lws'])
}
emb.click(function(){
var run=true;
var s_v=(emb.hasClass('sa') ? 0:1);
if((s_v==1)&&!confirm('Are you sure you want to enter standby mode?')) run=false;
if(run){
do_ajax('/sbm',{
s:s_v
},function (json){
ems_btn(json['sm']);
fill_values(json,['devs'])
})
}
});
var bussy=0;
function do_5s(){bussy|=(1 << 0);
do_ajax('/lwm', {}, function(json) {
if (json) {
fill_values(json, ['lwc', 'lws'])
}
bussy &= ~(1 << 0)
});
bussy |= (1 << 1);
do_ajax('/reset_temps', {}, function(json) {
if (json) {
fill_values(json, ['t0', 't1', 't2', 't3', 'tm0', 'tm1', 'tm2', 'tm3', 'tmr0', 'tmr1', 'tmr2', 'tmr3']);
$('.tu').html(json['tu'])
}
bussy &= ~(1 << 1)
});
bussy |= (1 << 3);
do_ajax('/reset_hours', {}, function(json) {
if (json) {
fill_values(json, ['h0', 'h1', 'h2', 'h3', 'hr0', 'hr1', 'hr2', 'hr3'])
}
bussy &= ~(1 << 3)
});
bussy |= (1 << 4);
do_ajax('/devsta', {}, function(json) {
if (json) {
fill_values(json, ['devs']);
$('#rai>div').css('width', json['rains']);
$('#rair>div').css('width', json['maxw']);
$('#wrt').html('last reset: ' + json['maxwt']);
ems_btn(json['sm'])
} else {
fill_values({
devs: 'disconnected'
}, ['devs'])
}
bussy &= ~(1 << 4)
});
bussy |= (1 << 7);
do_ajax('/errors', {}, function(json) {
if (json) {
if (json['err']) {
if (json['err'].length) $('#sta_err').addClass('err');
else $('#sta_err').removeClass('err');
var html = '';
for (i = 0; i < json['err'].length; i++) html += ' <li> ' + json['err'][i] + ' </li>';
$('#err_v').html(html)
}
}
bussy&=~(1 << 7)})
}
do_ajax('/status_i', {}, function(json) {
if (json) {
fill_values(json, ['dmxa', 'dmxp', 'dmxf', 'dmxi', 'pt', 'ip', 'mac', 'rdmu', 'rdmn']);
ptit(json['pt']);
$('.tu').html(json['tu'])
}
});
do_ajax('/reset_hours', {}, function(json) {
if (json) {
fill_values(json, ['h0', 'h1', 'h2', 'h3', 'hr0', 'hr1', 'hr2', 'hr3'])
}
});
do_ajax('/sw_ver', {}, function(json) {
if (json) {
$('#sw_vers li').each(function(i) {
var v = json['vers'][i];
$(this).html(v == 0 ? '-' : Math.floor(v / 10) + '.' + (v % 10))
})
}
});
do_5s();
setInterval(function() {
if (bussy == 0) do_5s()
}, 5000);
$('button.mwr').click(function() {
do_ajax('/mwres', {}, function(json) {
if (json) {
$('#rair>div').css('width', json['maxw']);
$('#wrt').html('last reset: ' + json['maxwt'])
}
})
})
bussy &= ~(1 << 0)
});
</script>
</body>
bussy |= (1 << 1);
do_ajax('/reset_temps', {}, function(json) {
if (json) {
fill_values(json, ['t0', 't1', 't2', 't3', 'tm0', 'tm1', 'tm2', 'tm3', 'tmr0', 'tmr1', 'tmr2', 'tmr3']);
$('.tu').html(json['tu'])
}
bussy &= ~(1 << 1)
});
bussy |= (1 << 3);
do_ajax('/reset_hours', {}, function(json) {
if (json) {
fill_values(json, ['h0', 'h1', 'h2', 'h3', 'hr0', 'hr1', 'hr2', 'hr3'])
}
bussy &= ~(1 << 3)
});
bussy |= (1 << 4);
do_ajax('/devsta', {}, function(json) {
if (json) {
fill_values(json, ['devs']);
$('#rai>div').css('width', json['rains']);
$('#rair>div').css('width', json['maxw']);
$('#wrt').html('last reset: ' + json['maxwt']);
ems_btn(json['sm'])
} else {
fill_values({
devs: 'disconnected'
}, ['devs'])
}
bussy &= ~(1 << 4)
});
bussy |= (1 << 7);
do_ajax('/errors', {}, function(json) {
if (json) {
if (json['err']) {
if (json['err'].length) $('#sta_err').addClass('err');
else $('#sta_err').removeClass('err');
var html = '';
for (i = 0; i < json['err'].length; i++) html += ' <li> ' + json['err'][i] + ' </li>';
$('#err_v').html(html)
}
}
bussy&=~(1 << 7)})
}
do_ajax('/status_i', {}, function(json) {
if (json) {
fill_values(json, ['dmxa', 'dmxp', 'dmxf', 'dmxi', 'pt', 'ip', 'mac', 'rdmu', 'rdmn']);
ptit(json['pt']);
$('.tu').html(json['tu'])
}
});
do_ajax('/reset_hours', {}, function(json) {
if (json) {
fill_values(json, ['h0', 'h1', 'h2', 'h3', 'hr0', 'hr1', 'hr2', 'hr3'])
}
});
do_ajax('/sw_ver', {}, function(json) {
if (json) {
$('#sw_vers li').each(function(i) {
var v = json['vers'][i];
$(this).html(v == 0 ? '-' : Math.floor(v / 10) + '.' + (v % 10))
})
}
});
do_5s();
setInterval(function() {
if (bussy == 0) do_5s()
}, 5000);
$('button.mwr').click(function() {
do_ajax('/mwres', {}, function(json) {
if (json) {
$('#rair>div').css('width', json['maxw']);
$('#wrt').html('last reset: ' + json['maxwt'])
}
})
})
});
</script>
</body>
</html>

View File

@@ -8,11 +8,25 @@
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
<title id="pt_v">iForte</title>
</head>
<body>
<!-- NAV WILL BE ADDED HERE BY FUNCTION IN BASE JS -->
<div class="fixed-top text-center device-label" id="pth">iForte</div>
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a class="nav-link" href="./index.html">Status</a></li>
<li class="nav-item"><a class="nav-link" href="./personality.html">Personality</a></li>
<li class="nav-item active"><a class="nav-link" href="./logs.html">Logs</a></li>
<li class="nav-item"><a class="nav-link" href="./sensors.html">RAINS logs</a></li>
<li class="nav-item"><a class="nav-link" href="./discovery.html">Discovery</a></li>
<li class="nav-item"><a class="nav-link" id="scfg">Settings</a></li>
<li class="nav-item"><a class="nav-link" id="idnt"><img class="rdmi" src="../files/identify.svg"></a></li>
</ul>
</div>
</div>
</nav>
<div class="fixed-top text-center device-label" id="pth" onclick="window.location = ('../index.html')"></div>
<div class="container-fluid in">
<h1>Device logs</h1>
<div class="row" id="boxes">

View File

@@ -8,11 +8,25 @@
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
<title id="pt_v">iForte</title>
</head>
<body>
<!-- NAV WILL BE ADDED HERE BY FUNCTION IN BASE JS -->
<div class="fixed-top text-center device-label" id="pth">iForte</div>
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a class="nav-link" href="./index.html">Status</a></li>
<li class="nav-item active"><a class="nav-link" href="./personality.html">Personality</a></li>
<li class="nav-item"><a class="nav-link" href="./logs.html">Logs</a></li>
<li class="nav-item"><a class="nav-link" href="./sensors.html">RAINS logs</a></li>
<li class="nav-item"><a class="nav-link" href="./discovery.html">Discovery</a></li>
<li class="nav-item"><a class="nav-link" id="scfg">Settings</a></li>
<li class="nav-item"><a class="nav-link" id="idnt"><img class="rdmi" src="../files/identify.svg"></a></li>
</ul>
</div>
</div>
</nav>
<div class="fixed-top text-center device-label" id="pth" onclick="window.location = ('../index.html')"></div>
<div class="container-fluid in">
<h1>Personality</h1>
<div class="row" id="boxes">

View File

@@ -8,11 +8,25 @@
<script src="../files/popper.min.js"></script>
<script src="../files/bootstrap.min.js"></script>
<script src="./base.js"></script>
<title id="pt_v">iForte</title>
</head>
<body>
<!-- NAV WILL BE ADDED HERE BY FUNCTION IN BASE JS -->
<div class="fixed-top text-center device-label" id="pth">iForte</div>
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="./index.html"><img src="../files/robe_logo_white.svg"></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a class="nav-link" href="./index.html">Status</a></li>
<li class="nav-item"><a class="nav-link" href="./personality.html">Personality</a></li>
<li class="nav-item"><a class="nav-link" href="./logs.html">Logs</a></li>
<li class="nav-item active"><a class="nav-link" href="./sensors.html">RAINS logs</a></li>
<li class="nav-item"><a class="nav-link" href="./discovery.html">Discovery</a></li>
<li class="nav-item"><a class="nav-link" id="scfg">Settings</a></li>
<li class="nav-item"><a class="nav-link" id="idnt"><img class="rdmi" src="../files/identify.svg"></a></li>
</ul>
</div>
</div>
</nav>
<div class="fixed-top text-center device-label" id="pth" onclick="window.location = ('../index.html')"></div>
<div class="container-fluid in">
<h1>RAINS logs</h1>
<div class="row" id="boxes">
@@ -205,588 +219,7 @@
<td>15.0</td>
<td>1013</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 14:37:23</td>
<td>40</td>
<td>14.5</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 14:22:14</td>
<td>39</td>
<td>14.5</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 14:09:07</td>
<td>38</td>
<td>14.5</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:57:46</td>
<td>37</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:47:52</td>
<td>36</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:34:57</td>
<td>35</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:27:38</td>
<td>34</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:21:20</td>
<td>33</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:16:00</td>
<td>32</td>
<td>14.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:11:49</td>
<td>31</td>
<td>14.5</td>
<td>1015</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:07:53</td>
<td>30</td>
<td>15.5</td>
<td>1015</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:06:27</td>
<td>29</td>
<td>16.0</td>
<td>1015</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:05:33</td>
<td>28</td>
<td>17.0</td>
<td>1015</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:04:55</td>
<td>27</td>
<td>17.5</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:04:29</td>
<td>26</td>
<td>18.5</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-3-2">2.3.2023 13:04:27</td>
<td>25</td>
<td>19.0</td>
<td>1014</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 17:18:05</td>
<td>45</td>
<td>16.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 15:25:35</td>
<td>44</td>
<td>16.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 14:31:57</td>
<td>43</td>
<td>15.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 13:59:13</td>
<td>42</td>
<td>15.0</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 13:34:59</td>
<td>41</td>
<td>15.0</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 13:07:05</td>
<td>40</td>
<td>14.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 12:51:56</td>
<td>39</td>
<td>14.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 12:38:54</td>
<td>38</td>
<td>13.5</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 12:27:25</td>
<td>37</td>
<td>13.5</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 12:17:14</td>
<td>36</td>
<td>13.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 12:02:59</td>
<td>35</td>
<td>13.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:54:48</td>
<td>34</td>
<td>12.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:47:16</td>
<td>33</td>
<td>12.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:40:27</td>
<td>32</td>
<td>12.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:33:47</td>
<td>31</td>
<td>12.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:24:50</td>
<td>30</td>
<td>12.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:19:32</td>
<td>29</td>
<td>11.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:15:04</td>
<td>28</td>
<td>11.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:11:11</td>
<td>27</td>
<td>11.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:08:33</td>
<td>26</td>
<td>12.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:06:43</td>
<td>25</td>
<td>12.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:06:05</td>
<td>24</td>
<td>13.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:05:05</td>
<td>23</td>
<td>13.5</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:04:27</td>
<td>22</td>
<td>14.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-28">28.2.2023 11:03:59</td>
<td>21</td>
<td>15.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 19:12:54</td>
<td>47</td>
<td>18.0</td>
<td>1019</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 19:12:52</td>
<td>46</td>
<td>18.0</td>
<td>1019</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 18:34:19</td>
<td>48</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 18:34:17</td>
<td>47</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 18:09:40</td>
<td>49</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 18:09:36</td>
<td>48</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:49:22</td>
<td>50</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:49:20</td>
<td>49</td>
<td>18.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:26:01</td>
<td>51</td>
<td>17.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:25:59</td>
<td>50</td>
<td>17.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:14:44</td>
<td>52</td>
<td>17.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:14:42</td>
<td>51</td>
<td>17.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:04:53</td>
<td>53</td>
<td>16.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 17:04:51</td>
<td>52</td>
<td>16.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:56:23</td>
<td>54</td>
<td>16.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:56:21</td>
<td>53</td>
<td>16.0</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:40:54</td>
<td>55</td>
<td>15.0</td>
<td>1017</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:36:41</td>
<td>57</td>
<td>14.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:36:39</td>
<td>56</td>
<td>14.5</td>
<td>1018</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:33:03</td>
<td>58</td>
<td>14.0</td>
<td>1017</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:33:01</td>
<td>57</td>
<td>14.0</td>
<td>1017</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:24:56</td>
<td>59</td>
<td>13.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:22:46</td>
<td>58</td>
<td>13.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:20:52</td>
<td>57</td>
<td>13.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:19:10</td>
<td>56</td>
<td>13.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:16:52</td>
<td>55</td>
<td>14.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:15:30</td>
<td>54</td>
<td>14.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:14:16</td>
<td>53</td>
<td>14.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:13:10</td>
<td>52</td>
<td>15.0</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:12:06</td>
<td>51</td>
<td>15.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:10:41</td>
<td>50</td>
<td>16.0</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:09:43</td>
<td>49</td>
<td>16.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:08:51</td>
<td>48</td>
<td>16.5</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 16:07:55</td>
<td>47</td>
<td>17.0</td>
<td>1021</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:59:36</td>
<td>46</td>
<td>13.5</td>
<td>1019</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:51:00</td>
<td>45</td>
<td>13.5</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:50:06</td>
<td>44</td>
<td>14.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:49:14</td>
<td>43</td>
<td>14.0</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:48:22</td>
<td>42</td>
<td>14.5</td>
<td>1022</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:47:25</td>
<td>41</td>
<td>15.0</td>
<td>1023</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:36:01</td>
<td>40</td>
<td>14.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:20:20</td>
<td>39</td>
<td>14.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 12:06:37</td>
<td>38</td>
<td>13.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:55:32</td>
<td>37</td>
<td>13.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:44:59</td>
<td>36</td>
<td>13.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:31:20</td>
<td>35</td>
<td>12.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:23:24</td>
<td>34</td>
<td>12.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:16:09</td>
<td>33</td>
<td>12.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:09:37</td>
<td>32</td>
<td>12.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 11:03:06</td>
<td>31</td>
<td>12.0</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:54:30</td>
<td>30</td>
<td>11.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:49:27</td>
<td>29</td>
<td>11.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:45:43</td>
<td>28</td>
<td>11.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:41:39</td>
<td>27</td>
<td>11.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:38:39</td>
<td>26</td>
<td>11.5</td>
<td>1020</td>
</tr>
<tr>
<td data-target="2023-2-27">27.2.2023 10:36:32</td>
<td>25</td>
<td>12.0</td>
<td>1020</td>
</tr>
</tbody>
</table>
</div>
@@ -872,60 +305,6 @@
<td>01:58</td>
<td>OK</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 20:10:07</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 20:02:52</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 20:01:55</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 19:56:35</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 19:54:28</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
<tr>
<td data-target="2023-2-7">7.2.2023 19:52:21</td>
<td>-32</td>
<td>0.0</td>
<td>0</td>
<td>0.00</td>
<td>00:00</td>
<td>valve seal error</td>
</tr>
</tbody>
</table>
</div>
@@ -951,243 +330,5 @@
</div>
</div>
</div>
<script>
$(document).ready(function() {
$('h1').html('RAINS logs');
function gth(i) {
var html = ' < div class = "table-responsive" > < table class = "table mt-2" > < thead > < tr > < th > Date / Time < /th> < th > Temperature[ & deg; C] < /th> < th > Relative humidity[ % ] < /th> < th > Pressure[hPa] < /th>';if(i==1){html+=' < th > Pressure difference[hPa] < /th> < th > Duration[m: s] < /th> < th > Result < /th>'}html+=' < /tr> < /thead>';if(i==0){html+=' < tbody id = "sensd" > '} else {html+=' < tbody id = "presr" > '}html+=' < /tbody> < /table> < /div>';return html}var html=' < div class = "col-12" > < ul class = "nav nav-tabs"
id = "tab" > < li class = "nav-item" > < a class = "nav-link active"
href = "#sl" > Sensors < /a> < /li> < li class = "nav-item" > < a class = "nav-link"
href = "#pl" > Pressure measurements < /a> < /li> < /ul> < div class = "tab-content" > < div class = "tab-pane fade show active"
id = "sl"
role = "tabpanel" > ';html+=' < div class = "row" > < div class = "col-12 box-c mt-2 mb-2" > ';html+=' < h2 id = "sta_err" > < button class = "btn btn-primary btn-pm collapsed"
type = "button"
data - toggle = "collapse"
data - target = "#lfb" > < i class = "blue" > < /i> < /button>';html+=' Logs filter';html+=' < /h2>';html+=' < div class = "box collapse clearfix"
id = "lfb" > ';html+=' < div class = "form-row" > ';html+=c_dt('
fsd ','
Start date ','
','
col - auto ','
date ');html+=c_dt('
fed ','
End date ','
','
col - auto ','
date ');html+=' < /div>';html+=c_fsens(0,'Temperature','&deg;C');html+=c_fsens(1,'Relative humidity','%');html+=c_fsens(2,'Pressure','hPa');html+=' < div class = "float-right" > < button type = "button"
class = "btn btn-primary mr06"
id = "fap" > Apply filter < /button> < button type = "button"
class = "btn btn-primary"
id = "fcl" > Clear filter < /button> < /div>';html+=' < /div>';html+=' < /div>';html+=' < /div>';html += ' < div class = "clearfix mt-2" > < button class = "btn btn-primary float-right dslog" > Download log file < /button> < /div>';html+=gth(0);html +=' < /div> < div class = "tab-pane fade"
id = "pl"
role = "tabpanel" > < div class = "clearfix mt-2" > < button class = "btn btn-primary float-right dsprs" > Download measurements file < /button> < /div>';html+=gth(1);html +=' < /div> < /div> < /div>';$('#boxes').html(html);$('#tab a').on('click',function (e){e.preventDefault();$('#tab a').removeClass('active');$(this).addClass('active');var o=$($(this).attr('href'));o.parent().find('div.tab-pane').removeClass('show active');o.addClass('show active')});var df='';var def='';function filter_item(o){var dsp=true;if(df!=''){var dr=o.find('td').eq(0).attr('data-target');if(Date.parse(dr) > Date.parse(df)) dsp=false}if(def!=''){var dr=o.find('td').eq(0).attr('data-target');if(Date.parse(dr) < Date.parse(def)) dsp = false
}
var vf;
var v;
for (i = 0; i < 3; i++) {
if (dsp && ($('#fts' + i).val() > 0)) {
if (i == 1) {
vf = parseFloat($('#ftv' + i).val());
v = parseFloat(o.find('td').eq(i + 1).html())
} else {
vf = parseInt($('#ftv' + i).val());
v = parseInt(o.find('td').eq(i + 1).html())
}
switch (parseInt($('#fts' + i).val())) {
case 1:
if (v != vf) dsp = false;
break;
case 2:
if (v >= vf) dsp = false;
break;
case 3:
if (v <= vf) dsp = false;
break;
case 4:
if (v > vf) dsp = false;
break;
case 5:
if (v < vf) dsp = false;
break
}
}
}
if (dsp) o.show();
else o.hide()
}
function fils(json, d, t) {
var stmp = json['data'].split(' ')[0].split('.');
stmp = stmp[2] + '-' + stmp[1] + '-' + stmp[0];
var l = ' < tr > ';l+=' < td data - target = "'+stmp+'" > '+json['
data ']+' < /td>';l+=' < td > '+json['
t ']+' < /td>';l+=' < td > '+json['
r ']+' < /td>';l+=' < td > '+json['
p ']+' < /td>';if(t==1){l+=' < td > '+json['
pd ']+' < /td>';l+=' < td > '+json['
mt ']+' < /td>';l+=' < td > '+json['
res ']+' < /td>'}l+=' < /tr>';var o='#sensd';if(t==1) o='#presr';if(d){$(o).prepend(l);if(t==0){filter_item($(o).find('tr').first())}} else {$(o).append(l);if(t==0){filter_item($(o).find('tr').last())}}}var lfn='data';$('.dslog').bind('click',function(){var p='';if($('#fap').hasClass('btn-danger')){var d=new Date($('#fsd').val());if(!!d.valueOf()){p+='&sdy='+d.getFullYear();p+='&sdm='+(d.getMonth()+1);p+='&sdd='+d.getDate()}d=new Date($('#fed').val());if(!!d.valueOf()){p+='&edy='+d.getFullYear();p+='&edm='+(d.getMonth()+1);p+='&edd='+d.getDate()}for (i=0;i < 3;
i++) {
if ($('#fts' + i).val() > 0) {
if (p.length) p += '&';
var mul = 1;
var add = 0;
switch (i) {
case 0:
add = 32;
break;
case 1:
mul = 2;
break
}
p += 'fts' + i + '=' + $('#fts' + i).val() + '&';
p += 'ftv' + i + '=' + Math.floor($('#ftv' + i).val() * mul + add)
}
}
}
do_ajax('/dl_logf', p, function(json) {
if (json) {
location = 'sensors-' + lfn + '.csv';
close_modal()
}
})
});
$('.dsprs').bind('click', function() {
location = 'pressure-tests-' + lfn + '.csv';
close_modal()
});
do_ajax('/status_i', {}, function(json) {
if (json) {
ptit(json['pt']);
lfn = json['lfn']
}
});
var dlti = 0;
var dli = 0;
var secs = Math.round(new Date().getTime() / 1000);
function dlr() {
do_ajax('/dl_log', 'i=' + dli, function(json) {
if (json) {
var nsecs = Math.round(new Date().getTime() / 1000);
if ((nsecs - secs) >= 60) {
window.location = '/sensors'
} else {
secs = nsecs;
if (json['data']) {
if (json['type'] == 0) fils(json, dli, json['type']);
setTimeout(dlr, 4)
} else {
if (dli == 0) dli = 1;
setTimeout(dlr, 4000)
}
}
} else {
setTimeout(dlr, 2000)
}
})
}
dlr();
var pti = 2;
function ptr() {
do_ajax('/dl_log', 'i=' + pti, function(json) {
if (json) {
if (json['data']) {
fils(json, pti - 2, json['type']);
setTimeout(ptr, 4)
} else {
if (pti == 2) pti = 3;
setTimeout(ptr, 4000)
}
}
})
}
ptr();
$('#fap').bind('click', function() {
var ec = 0;
var er = 0;
for (i = 0; i < 3; i++) {
$('#ftv' + i).removeClass('is-invalid');
var r;
if (i == 1) r = parseFloat($('#ftv' + i).val());
else r = parseInt($('#ftv' + i).val());
if ($('#fts' + i).val() > 0) {
if (isNaN(r)) {
$('#ftv' + i).addClass('is-invalid');
er++
} else ec++
}
}
var d = new Date($('#fsd').val());
if (!!d.valueOf()) {
df = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
ec++
}
d = new Date($('#fed').val());
if (!!d.valueOf()) {
def = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
ec++
}
if (ec > 0) {
$(this).addClass('btn-danger');
document.cookie = 'fsd=' + $('#fsd').val();
document.cookie = 'fed=' + $('#fed').val();
for (i = 0; i < 3; i++) {
document.cookie = 'ftv' + i + '=' + $('#ftv' + i).val();
document.cookie = 'fts' + i + '=' + $('#fts' + i).val()
}
if ($('#sta_err>button').hasClass('collapsed')) {
$('#sta_err>button').click()
}
} else {
$(this).removeClass('btn-danger');
if (er > 0) return
}
$('#sensd tr').each(function(e) {
filter_item($(this))
})
});
$('#fsd').bind('change', function() {
if ($('#fsd').val().length === 0) {
df = '';
$('#fap').click()
}
});
$('#fed').bind('change', function() {
if ($('#fed').val().length === 0) {
def = '';
$('#fap').click()
}
});
$('#fcl').bind('click', function() {
$('#lfb select').val('0');
$('#lfb input[type=text]').val('');
$('#sensd tr').show();
df = '';
def = '';
for (i = 0; i < 3; i++) {
$('#ftv' + i).removeClass('is-invalid')
}
$('#fap').removeClass('btn-danger');
$('#fsd').val('');
$('#fed').val('');
document.cookie = 'fsd=';
document.cookie = 'fed=';
for (i = 0; i < 3; i++) {
document.cookie = 'ftv' + i + '=';
document.cookie = 'fts' + i + '='
}
});
$('#fsd').val(get_cookie('fsd', ''));
$('#fed').val(get_cookie('fed', ''));
for (i = 0; i < 3; i++) {
$('#ftv' + i).val(get_cookie('ftv' + i, ''));
$('#fts' + i).val(get_cookie('fts' + i, 0))
}
$('#fap').click()
});
</script>
</body>
</html>