mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-13 15:37:03 +00:00
404 lines
11 KiB
JavaScript
404 lines
11 KiB
JavaScript
var nextVersion;
|
|
var im, em, vm, am;
|
|
$(function() {
|
|
im = $("#im");
|
|
if(im && im.gaugeMeter) {
|
|
im.gaugeMeter({
|
|
percent: 0,
|
|
text: "-",
|
|
append: "W"
|
|
});
|
|
}
|
|
|
|
em = $("#em");
|
|
if(em && em.gaugeMeter) {
|
|
em.gaugeMeter({
|
|
percent: 0,
|
|
text: "-",
|
|
append: "W"
|
|
});
|
|
}
|
|
|
|
vm = $("#vm");
|
|
if(vm && vm.gaugeMeter) {
|
|
vm.gaugeMeter({
|
|
percent: 0,
|
|
text: "-",
|
|
append: "V"
|
|
});
|
|
}
|
|
|
|
am = $("#am");
|
|
if(am && am.gaugeMeter) {
|
|
am.gaugeMeter({
|
|
percent: 0,
|
|
text: "-",
|
|
append: "A"
|
|
});
|
|
}
|
|
|
|
var meters = $('.SimpleMeter');
|
|
|
|
if(meters.length > 0) {
|
|
fetch();
|
|
}
|
|
|
|
// For mqtt
|
|
$('#m').on('change', function() {
|
|
var inputs = $('.mc');
|
|
inputs.prop('disabled', !$(this).is(':checked'));
|
|
});
|
|
|
|
$('#f').on('change', function() {
|
|
var val = parseInt($(this).val());
|
|
if(val == 3) {
|
|
$('.f3-s').show();
|
|
} else {
|
|
$('.f3-s').hide();
|
|
}
|
|
});
|
|
|
|
$('#s').on('change', function() {
|
|
var port = $('#p');
|
|
if($(this).is(':checked')) {
|
|
if(port.val() == 1883) {
|
|
port.val(8883);
|
|
}
|
|
} else {
|
|
if(port.val() == 8883) {
|
|
port.val(1883);
|
|
}
|
|
}
|
|
});
|
|
|
|
$('#m').trigger('change');
|
|
$('#f').trigger('change');
|
|
|
|
// For meter
|
|
$('.sd').on('change', function() {
|
|
if(($('#mt').val() == 2 || $('#mt').val() == 3) && $('#d').val() == 1) {
|
|
$('#ss').show();
|
|
} else {
|
|
$('#ss').hide();
|
|
}
|
|
});
|
|
|
|
$('#mt').on('change', function() {
|
|
if($('#mt').val() == 4) {
|
|
$('.enc').show();
|
|
} else {
|
|
$('.enc').hide();
|
|
}
|
|
});
|
|
|
|
$('#mt').trigger('change');
|
|
|
|
// For wifi
|
|
$('#st').on('change', function() {
|
|
if($(this).is(':checked')) {
|
|
$('#i').show();
|
|
} else {
|
|
$('#i').hide();
|
|
}
|
|
});
|
|
$('#st').trigger('change');
|
|
|
|
// For web
|
|
$('#as').on('change', function() {
|
|
var inputs = $('.ac');
|
|
inputs.prop('disabled', $(this).val() == 0);
|
|
});
|
|
|
|
$('#as').trigger('change');
|
|
|
|
// For file upload
|
|
$('#fileUploadField').on('change',function(){
|
|
var fileName = $(this).val();
|
|
$(this).next('.custom-file-label').html(fileName);
|
|
})
|
|
|
|
// For NTP
|
|
$('#n').on('change', function() {
|
|
var inputs = $('.nc');
|
|
inputs.prop('disabled', !$(this).is(':checked'));
|
|
});
|
|
$('#n').trigger('change');
|
|
|
|
// Navbar
|
|
switch(window.location.pathname) {
|
|
case '/temperature':
|
|
$('#temp-link').addClass('active');
|
|
break;
|
|
case '/price':
|
|
$('#price-link').addClass('active');
|
|
break;
|
|
case '/meter':
|
|
case '/wifi':
|
|
case '/mqtt':
|
|
case '/mqtt-ca':
|
|
case '/mqtt-cert':
|
|
case '/mqtt-key':
|
|
case '/domoticz':
|
|
case '/web':
|
|
case '/ntp':
|
|
case '/entsoe':
|
|
$('#config-link').addClass('active');
|
|
break;
|
|
case '/gpio':
|
|
case '/debugging':
|
|
case '/firmware':
|
|
case '/reset':
|
|
$('#system-link').addClass('active');
|
|
break;
|
|
}
|
|
|
|
// Check for software upgrade
|
|
var swv = $('#swVersion')
|
|
if(meters.length > 0 && swv.length == 1 && swv.text() != "SNAPSHOT") {
|
|
var v = swv.text().substring(1).split('.');
|
|
var v_major = parseInt(v[0]);
|
|
var v_minor = parseInt(v[1]);
|
|
var v_patch = parseInt(v[2]);
|
|
$.ajax({
|
|
url: swv.data('url'),
|
|
dataType: 'json'
|
|
}).done(function(releases) {
|
|
releases.reverse();
|
|
var me;
|
|
var next_patch;
|
|
var next_minor;
|
|
var next_major;
|
|
$.each(releases, function(i, release) {
|
|
var ver2 = release.tag_name;
|
|
var v2 = ver2.substring(1).split('.');
|
|
var v2_major = parseInt(v2[0]);
|
|
var v2_minor = parseInt(v2[1]);
|
|
var v2_patch = parseInt(v2[2]);
|
|
|
|
if(v2_major == v_major) {
|
|
if(v2_minor == v_minor) {
|
|
if(v2_patch > v_patch) {
|
|
next_patch = release;
|
|
}
|
|
} else if(v2_minor == v_minor+1) {
|
|
next_minor = release;
|
|
}
|
|
} else if(v2_major == v_major+1) {
|
|
if(next_major) {
|
|
var mv = next_major.tag_name.substring(1).split('.');
|
|
var mv_major = parseInt(mv[0]);
|
|
var mv_minor = parseInt(mv[1]);
|
|
var mv_patch = parseInt(mv[2]);
|
|
if(v2_minor == mv_minor) {
|
|
next_major = release;
|
|
}
|
|
} else {
|
|
next_major = release;
|
|
}
|
|
}
|
|
});
|
|
if(next_minor) {
|
|
nextVersion = next_minor;
|
|
} else if(next_major) {
|
|
nextVersion = next_major;
|
|
} else if(next_patch) {
|
|
nextVersion = next_patch;
|
|
}
|
|
if(nextVersion) {
|
|
$('#newVersionTag').text(nextVersion.tag_name);
|
|
$('#newVersionUrl').prop('href', nextVersion.html_url);
|
|
$('#newVersion').removeClass('d-none');
|
|
}
|
|
});
|
|
}
|
|
|
|
// Temperature
|
|
var tt = $('#temp-template');
|
|
if(tt.length > 0) {
|
|
setTimeout(loadTempSensors, 500);
|
|
}
|
|
});
|
|
|
|
var setStatus = function(id, sid) {
|
|
var item = $('#'+id);
|
|
item.removeClass('d-none');
|
|
item.removeClass (function (index, className) {
|
|
return (className.match (/(^|\s)badge-\S+/g) || []).join(' ');
|
|
});
|
|
var status;
|
|
if(sid == 0) {
|
|
status = "secondary";
|
|
} else if(sid == 1) {
|
|
status = "success";
|
|
} else if(sid == 2) {
|
|
status = "warning";
|
|
} else {
|
|
status = "danger";
|
|
}
|
|
item.addClass('badge badge-' + status);
|
|
};
|
|
|
|
var interval = 5000;
|
|
var fetch = function() {
|
|
$.ajax({
|
|
url: '/data.json',
|
|
timeout: 10000,
|
|
dataType: 'json',
|
|
}).done(function(json) {
|
|
if(im) {
|
|
$(".SimpleMeter").hide();
|
|
im.show();
|
|
em.show();
|
|
vm.show();
|
|
am.show();
|
|
}
|
|
|
|
for(var id in json) {
|
|
var str = json[id];
|
|
if(typeof str === "object") {
|
|
continue;
|
|
}
|
|
if(isNaN(str)) {
|
|
$('.j'+id).html(str);
|
|
} else {
|
|
var num = parseFloat(str);
|
|
$('.j'+id).html(num.toFixed(num < 0 ? 0 : num < 10 ? 2 : 1));
|
|
}
|
|
$('.r'+id).show();
|
|
}
|
|
|
|
if(window.moment) {
|
|
$('.ju').html(moment.duration(parseInt(json.u), 'seconds').humanize());
|
|
}
|
|
|
|
setStatus("esp", json.em);
|
|
setStatus("han", json.hm);
|
|
setStatus("wifi", json.wm);
|
|
setStatus("mqtt", json.mm);
|
|
|
|
|
|
if(im && im.gaugeMeter) {
|
|
var v = parseInt(json.i);
|
|
var pct = (v*100)/parseInt(json.im);
|
|
var append = "W";
|
|
if(v > 1000) {
|
|
v = (v/1000).toFixed(1);
|
|
append = "kW";
|
|
}
|
|
im.gaugeMeter({
|
|
percent: pct,
|
|
text: v,
|
|
append: append
|
|
});
|
|
}
|
|
|
|
if(em && em.gaugeMeter && json.om) {
|
|
var v = parseInt(json.e);
|
|
var pct = (v*100)/(parseInt(json.om)*1000);
|
|
var append = "W";
|
|
if(v > 1000) {
|
|
v = (v/1000).toFixed(1);
|
|
append = "kW";
|
|
}
|
|
em.gaugeMeter({
|
|
percent: pct,
|
|
text: v,
|
|
append: append
|
|
});
|
|
}
|
|
|
|
if(vm && vm.gaugeMeter && json.u1) {
|
|
var v = parseFloat(json.u1);
|
|
if(json.u2) {
|
|
v = (v+parseFloat(json.u2)+parseFloat(json.u3)) / 3;
|
|
}
|
|
var pct = (Math.max(v-207, 1)*100/46);
|
|
vm.gaugeMeter({
|
|
percent: pct,
|
|
text: v.toFixed(1)
|
|
});
|
|
}
|
|
|
|
if(am && am.gaugeMeter && json.i1 && json.mf) {
|
|
var v = parseFloat(json.i1);
|
|
if(json.i2) {
|
|
v = Math.max(v, parseFloat(json.i2));
|
|
}
|
|
if(json.i3) {
|
|
v = Math.max(v, parseFloat(json.i3));
|
|
}
|
|
var pct = (v*100)/parseInt(json.mf);
|
|
am.gaugeMeter({
|
|
percent: pct,
|
|
text: v.toFixed(1)
|
|
});
|
|
}
|
|
|
|
if(json.me) {
|
|
$('.me').addClass('d-none');
|
|
$('.me'+json.me).removeClass('d-none');
|
|
$('#ml').html(json.me);
|
|
}
|
|
|
|
var temp = parseInt(json.t);
|
|
if(temp == -127) {
|
|
$('.jt').html("N/A");
|
|
}
|
|
setTimeout(fetch, interval);
|
|
}).fail(function(x, text, error) {
|
|
console.log("Failed request");
|
|
console.log(text);
|
|
console.log(error);
|
|
setTimeout(fetch, interval*4);
|
|
|
|
setStatus("mqtt", 0);
|
|
setStatus("wifi", 0);
|
|
setStatus("han", 0);
|
|
setStatus("esp", 3);
|
|
});
|
|
}
|
|
|
|
var upgrade = function() {
|
|
if(nextVersion) {
|
|
if(confirm("Are you sure you want to perform upgrade to " + nextVersion.tag_name + "?")) {
|
|
window.location.href="/upgrade?version=" + nextVersion.tag_name;
|
|
}
|
|
}
|
|
}
|
|
|
|
var loadTempSensors = function() {
|
|
$.ajax({
|
|
url: '/temperature.json',
|
|
timeout: 10000,
|
|
dataType: 'json',
|
|
}).done(function(json) {
|
|
if($('#loading').length > 0) {
|
|
$('#loading').hide();
|
|
|
|
var list = $('#sensors');
|
|
if(json.c > 0) {
|
|
list.empty();
|
|
var temp = $.trim($('#temp-template').html());
|
|
$.each(json.s, function(i, o) {
|
|
var item = temp.replace(/{{index}}/ig, o.i);
|
|
var item = item.replace(/{{address}}/ig, o.a);
|
|
var item = item.replace(/{{name}}/ig, o.n);
|
|
var item = item.replace(/{{value}}/ig, o.v > -50 && o.v < 127 ? o.v : "N/A");
|
|
var item = item.replace(/{{common}}/ig, o.c ? "checked" : "");
|
|
list.append(item);
|
|
});
|
|
} else {
|
|
$('#notemp').show();
|
|
}
|
|
} else {
|
|
$.each(json.s, function(i, o) {
|
|
$('#temp-'+o.i).html(o.v > -50 && o.v < 127 ? o.v : "N/A");
|
|
});
|
|
}
|
|
setTimeout(loadTempSensors, 10000);
|
|
}).fail(function() {
|
|
setTimeout(loadTempSensors, 60000);
|
|
$('#loading').hide();
|
|
$('#error').show();
|
|
});
|
|
} |