91 lines
2.0 KiB
JavaScript
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;
|
|
}
|