diff --git a/backend/src/api/grafana/controllers/grafana.js b/backend/src/api/grafana/controllers/grafana.js index 6454c36..90b5ef3 100644 --- a/backend/src/api/grafana/controllers/grafana.js +++ b/backend/src/api/grafana/controllers/grafana.js @@ -12,9 +12,10 @@ module.exports = { const grafanaHost = "https://monitoring.hypso.space"; // Grafana URL const datasourceId = 3; // Replace with your datasource UID - const fields = [ + const baseFields = [ { refId: "batteryVoltage", field: "vBatt", measurement: "eps" }, - { refId: "battCurr", field: "curBattIn", measurement: "eps" }, + { refId: "battCurrIn", field: "curBattIn", measurement: "eps" }, + { refId: "battCurrOut", field: "curBattOut", measurement: "eps" }, { refId: "uptime", field: "uptimeInS", measurement: "eps" }, { refId: "solarPanelTemp1", @@ -47,6 +48,17 @@ module.exports = { measurement: "fc", }, ]; + const tempFields = []; + for (let i = 0; i <= 13; i++) { + tempFields.push({ + refId: `tempPanelData${i}`, + field: `temp_${i}`, + measurement: "eps", + }); + } + + // Combine both arrays + const fields = [...baseFields, ...tempFields]; const queries = fields.map((item) => ({ refId: item.refId, diff --git a/frontend/src/app/satellites/[satelliteSlug]/satTelemetry.tsx b/frontend/src/app/satellites/[satelliteSlug]/satTelemetry.tsx index b6cef43..965a19f 100644 --- a/frontend/src/app/satellites/[satelliteSlug]/satTelemetry.tsx +++ b/frontend/src/app/satellites/[satelliteSlug]/satTelemetry.tsx @@ -71,6 +71,8 @@ export default function SatTelemetry({ return
{error}
; } + const currentTime = Date.now(); + { /* Battery Voltage Data */ } @@ -83,15 +85,57 @@ export default function SatTelemetry({ ); { - /* Solar Panel Temperature Data */ + /* Battery Current Data */ } - const SolarTempData = data.solarPanelTemp1; - console.log( - "SolarTempData", - SolarTempData[0].map((timestamp: number) => { - return new Date(timestamp).toLocaleString(); + + const batteryCurrentData = [data?.battCurrIn, data?.battCurrOut].filter( + (curr) => curr, + ); // Filter out any undefined values + const chartDataIBatt = batteryCurrentData.map( + (currData: any, currIndex: number) => ({ + name: + currIndex === 0 ? "Battery Current In" : "Battery Current Out", + data: currData[0] + .map((timestamp: number, index: number) => [ + timestamp, + currData[1][index] / 1000, // Assuming you need to divide by 1000 + ]) + .filter(([timestamp]: number[]) => timestamp <= currentTime), // Filter out future timestamps + color: currIndex === 0 ? "yellow" : "red", // Different color for in and out }), ); + + { + /* Temperature Panel Data */ + } + + const checkLine = (data: number[]) => { + return data.every((index) => data[index] === data[0]); + }; + + const tempPanelChart = []; + for (let i = 0; i <= 13; i++) { + const tempData = data?.[`tempPanelData${i}`]; + if (tempData && !checkLine(tempData[1])) { + tempPanelChart.push({ + name: `Panel ${i}`, + data: tempData[0] + .map((timestamp: number, index: number) => [ + timestamp, + tempData[1][index], // Assuming you need to divide by 1000 + ]) + .filter( + ([timestamp]: number[]) => timestamp <= currentTime, + ), // Filter out future timestamps + color: `hsl(${i * 30}, 70%, 50%)`, // Different color for each panel + }); + } + } + + { + /* Solar Panel Temperature Data */ + } + const solarPanelTempData = [ data?.solarPanelTemp1, data?.solarPanelTemp2, @@ -100,7 +144,6 @@ export default function SatTelemetry({ data?.solarPanelTemp5, data?.solarPanelTemp6, ].filter((temp) => temp); // Filter out any undefined values - const currentTime = Date.now(); const solarPanelChartData = solarPanelTempData.map( (tempData, panelIndex) => ({ name: `Solar Panel ${panelIndex + 1}`, @@ -114,17 +157,6 @@ export default function SatTelemetry({ }), ); - { - /* Battery Current Data */ - } - const batteryCurrentData = data?.battCurr; - const chartDataIBatt = batteryCurrentData[0].map( - (timestamp: number, index: number) => [ - timestamp, - batteryCurrentData[1][index] / 1000, // Convert to Amperes - ], - ); - { /* Uptime Data */ } @@ -152,15 +184,16 @@ export default function SatTelemetry({ { title: "Battery Current", yAxisTitle: "Current (A)", - series: [ - { - name: "Battery Current", - data: chartDataIBatt, - color: "yellow", - }, - ], + series: chartDataIBatt, valueSuffix: " A", }, + { + title: "Panel Temperatures", + yAxisTitle: "Temperature (°C)", + series: tempPanelChart, + valueSuffix: " °C", + }, + { title: "Solar Panel Temperatures", yAxisTitle: "Temperature (°C)",