From 8165d876b95af199e06ce74ae41c1b79b7a403b2 Mon Sep 17 00:00:00 2001
From: Thibault <54189871+Asaren1070@users.noreply.github.com>
Date: Mon, 14 Jul 2025 11:23:16 +0200
Subject: [PATCH] adding panel temperatures and battery current out (#466)
* adding panel temperatures and battery current out
* fix lint
---
.../src/api/grafana/controllers/grafana.js | 16 +++-
.../[satelliteSlug]/satTelemetry.tsx | 83 +++++++++++++------
2 files changed, 72 insertions(+), 27 deletions(-)
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)",