Enhance live view
* Load initial data immediatly * Count data age on client side (sync with server)
This commit is contained in:
parent
3f8ee18de9
commit
bc56477c0e
@ -3,7 +3,13 @@
|
|||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1>Live Data</h1>
|
<h1>Live Data</h1>
|
||||||
</div>
|
</div>
|
||||||
<template v-if="waitForData == true">Waiting for data... </template>
|
|
||||||
|
<div class="text-center" v-if="dataLoading">
|
||||||
|
<div class="spinner-border" role="status">
|
||||||
|
<span class="visually-hidden">Loading...</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div class="row gy-3">
|
<div class="row gy-3">
|
||||||
<div class="col-sm-3 col-md-2">
|
<div class="col-sm-3 col-md-2">
|
||||||
@ -113,7 +119,8 @@ export default defineComponent({
|
|||||||
return {
|
return {
|
||||||
socket: {} as WebSocket,
|
socket: {} as WebSocket,
|
||||||
heartInterval: 0,
|
heartInterval: 0,
|
||||||
waitForData: true,
|
dataAgeInterval: 0,
|
||||||
|
dataLoading: true,
|
||||||
inverterData: [] as Inverter[],
|
inverterData: [] as Inverter[],
|
||||||
isFirstFetchAfterConnect: true,
|
isFirstFetchAfterConnect: true,
|
||||||
eventLogView: {} as bootstrap.Modal,
|
eventLogView: {} as bootstrap.Modal,
|
||||||
@ -122,7 +129,9 @@ export default defineComponent({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
this.getInitialData();
|
||||||
this.initSocket();
|
this.initSocket();
|
||||||
|
this.initDataAgeing();
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.eventLogView = new bootstrap.Modal('#eventView');
|
this.eventLogView = new bootstrap.Modal('#eventView');
|
||||||
@ -145,6 +154,15 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getInitialData() {
|
||||||
|
this.dataLoading = true;
|
||||||
|
fetch("/api/livedata/status")
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((data) => {
|
||||||
|
this.inverterData = data;
|
||||||
|
this.dataLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
initSocket() {
|
initSocket() {
|
||||||
console.log("Starting connection to WebSocket Server");
|
console.log("Starting connection to WebSocket Server");
|
||||||
|
|
||||||
@ -157,7 +175,7 @@ export default defineComponent({
|
|||||||
this.socket.onmessage = (event) => {
|
this.socket.onmessage = (event) => {
|
||||||
console.log(event);
|
console.log(event);
|
||||||
this.inverterData = JSON.parse(event.data);
|
this.inverterData = JSON.parse(event.data);
|
||||||
this.waitForData = false;
|
this.dataLoading = false;
|
||||||
this.heartCheck(); // Reset heartbeat detection
|
this.heartCheck(); // Reset heartbeat detection
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -171,6 +189,13 @@ export default defineComponent({
|
|||||||
this.closeSocket();
|
this.closeSocket();
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
initDataAgeing() {
|
||||||
|
this.dataAgeInterval = setInterval(() => {
|
||||||
|
this.inverterData.forEach(element => {
|
||||||
|
element.data_age++;
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
// Send heartbeat packets regularly * 59s Send a heartbeat
|
// Send heartbeat packets regularly * 59s Send a heartbeat
|
||||||
heartCheck() {
|
heartCheck() {
|
||||||
this.heartInterval && clearTimeout(this.heartInterval);
|
this.heartInterval && clearTimeout(this.heartInterval);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user