Get device list for dashboard and upgrade chart.js

This commit is contained in:
Reimar 2025-04-01 12:27:57 +02:00
parent 49c9a5a792
commit a12784934b
Signed by: Reimar
GPG Key ID: 93549FA07F0AE268
5 changed files with 78 additions and 23 deletions

View File

@ -4,7 +4,9 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Temperature-Alarm-Web</title>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/moment"></script>
<script defer src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment"></script>
<script defer type="module" src="/scripts/home.js"></script>
<link rel="stylesheet" href="/styles/common.css">
<link rel="stylesheet" href="/styles/home.css" />

View File

@ -1,14 +1,12 @@
import { logout } from "../shared/utils.js";
import { getLogsOnDeviceId } from "./services/devices.service.js";
import { getUser } from "../shared/utils.js";
import { getDevices, getLogsOnDeviceId } from "./services/devices.service.js";
async function buildChart(data) {
data.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
const xValues = data.map((log) =>
new Date(log.date).toLocaleString()
); // Full Date labels
const yValues = data.map((log) => log.temperature); // Temperature values
buildTable(data);
new Chart("myChart", {
type: "line",
data: {
@ -41,6 +39,9 @@ async function buildChart(data) {
function buildTable(data) {
var table = document.getElementById(`TemperatureTable`);
data.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
data.forEach((log) => {
var averageTemp = (log.tempHigh + log.tempLow) / 2.0;
var color;
@ -73,15 +74,64 @@ function buildTable(data) {
});
}
// TODO change device id
getLogsOnDeviceId(1)
.then(buildChart)
.catch(err => {
document.getElementById("error").innerText = err;
document.getElementById("error").style.display = "block";
document.getElementById("container").style.display = "none";
function handleError(err) {
document.getElementById("error").innerText = err;
document.getElementById("error").style.display = "block";
document.getElementById("container").style.display = "none";
}
async function init() {
const devices = await getDevices()
.catch(handleError);
const deviceData = [];
for (const device of devices) {
const data = await getLogsOnDeviceId(device.id)
.catch(handleError);
deviceData.push(data);
}
if (deviceData.length === 0) {
return;
}
buildTable(deviceData[0]);
new Chart("myChart", {
type: "line",
data: {
datasets: deviceData.map(dataset => ({
label: "Temperature",
fill: false,
lineTension: 0.4,
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: dataset.map(log => ({
x: log.date,
y: log.temperature,
})),
})),
},
options: {
plugins: {
tooltip: {
callbacks: {
label: item => `Temperature: ${item.formattedValue}°C`,
},
},
},
scales: {
x: {
type: "time",
},
},
},
});
}
init();
document.querySelector(".logout-container").addEventListener("click", logout);

View File

@ -12,10 +12,10 @@ document.getElementById("loginForm").addEventListener("submit", function(event)
.then(response => {
document.cookie = `auth-token=${response.token}; Path=/`;
localStorage.setItem("user", {
localStorage.setItem("user", JSON.stringify({
id: response.id,
username: response.userName,
});
}));
location.href = "/home";
})

View File

@ -25,6 +25,8 @@ export async function request(method, path, body = null) {
if (json.message) return reject(json.message);
if (json.title) return reject(json.title);
if (json.errors) return reject(Object.values(json.errors)[0][0]);
} finally {
reject("Request failed with HTTP code " + response.status);
@ -40,3 +42,7 @@ export function logout() {
window.location.href = "/";
}
export function getUser() {
return JSON.parse(localStorage.getItem("user"));
}

View File

@ -2,7 +2,6 @@ body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background-color: #F9F9F9;
font-family: Arial, Helvetica, sans-serif;
}
#container {
@ -46,10 +45,8 @@ table {
width: 100%;
background-color: white;
color: #616161;
margin: 20px;
font-family: arial, sans-serif;
border-collapse: collapse;
width: 95%;
font-family: arial, sans-serif;
border-collapse: collapse;
}
td,
@ -114,10 +111,10 @@ table tr:not(:last-child) .temperature {
}
.chartContainer{
margin: 20px;
margin: 20px;
}
.tableConatiner{
display: flex;
justify-content: center;
display: flex;
justify-content: center;
}