Skip to content

Commit

Permalink
adding panel temperatures and battery current out (#466)
Browse files Browse the repository at this point in the history
* adding panel temperatures and battery current out

* fix lint
  • Loading branch information
Thibault authored and GitHub committed Jul 14, 2025
1 parent f5e100b commit 8165d87
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 27 deletions.
16 changes: 14 additions & 2 deletions backend/src/api/grafana/controllers/grafana.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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,
Expand Down
83 changes: 58 additions & 25 deletions frontend/src/app/satellites/[satelliteSlug]/satTelemetry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ export default function SatTelemetry({
return <div className="text-red-500">{error}</div>;
}

const currentTime = Date.now();

{
/* Battery Voltage Data */
}
Expand All @@ -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,
Expand All @@ -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}`,
Expand All @@ -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 */
}
Expand Down Expand Up @@ -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)",
Expand Down

0 comments on commit 8165d87

Please sign in to comment.