Files
invertergui/plugins/webui/static/js/controller.js
Nicholas Thompson d3576031bb Use go native embed lib for static assets
Use built in embed library to serve static files instead of the statik library
2021-04-23 22:33:14 +02:00

91 lines
2.0 KiB
JavaScript

var app;
const timeoutMax = 30000;
const timeoutMin = 1000;
var timeout = timeoutMin;
function loadContent() {
app = new Vue({
el: "#app",
data: {
error: {
has_error: false,
error_message: ""
},
state: {
output_current: null,
output_voltage: 0,
output_frequency: 0,
output_power: 0,
input_current: 0,
input_voltage: 0,
input_frequency: 0,
input_power: 0,
battery_current: 0,
battery_voltage: 0,
battery_charge: 0,
battery_power: 0,
led_map: [
{ led_mains: "dot-off" },
{ led_absorb: "dot-off" },
{ led_bulk: "dot-off" },
{ led_float: "dot-off" },
{ led_inverter: "dot-off" },
{ led_overload: "dot-off" },
{ led_bat_low: "dot-off" },
{ led_over_temp: "dot-off" }
]
}
}
});
connect();
}
function connect() {
if (window["WebSocket"]) {
var conn = new WebSocket(getURI());
conn.onclose = function(evt) {
app.error.has_error = true;
app.error.error_message =
"Server not reachable. Trying to reconnect in " +
timeout / 1000 +
" second(s).";
console.log(app.error.error_message, evt.reason);
setTimeout(function() {
connect();
}, timeout);
timeout = timeout * 2;
if (timeout > timeoutMax) {
timeout = timeoutMax;
}
};
conn.onopen = function(evt) {
timeout = timeoutMin;
app.error.has_error = false;
};
conn.onmessage = function(evt) {
var update = JSON.parse(evt.data);
app.state = update;
};
} else {
app.error.has_error = true;
app.error.error_message = "Our browser does not support WebSockets.";
}
}
function getURI() {
var loc = window.location,
new_uri;
if (loc.protocol === "https:") {
new_uri = "wss:";
} else {
new_uri = "ws:";
}
new_uri += "//" + loc.host;
new_uri += loc.pathname + "ws";
return new_uri;
}