Datum: 2025-01-02
Status: Identifierad, ej åtgärdad
Analyserad av: Claude Code via Playwright
Webbgränssnittets graf i "Historical Data"-sektionen är tom och visar inga datapunkter, trots att realtidsdata fungerar korrekt.
Fil: data/script.js:865-886
Problem: updateChartOptions() körs aldrig automatiskt när sidan laddas.
Symptom:
- Sensor dropdown: "Environmental" (funkar)
- Reading dropdown: Tom vid sidladdning
- Time Range dropdown: "Last 24 hours" (funkar)
Orsak: Funktionen körs bara när användaren manuellt ändrar sensor-dropdown (rad 227 event listener).
Lösning:
// I initApp() funktionen, efter initChart():
updateChartOptions(); // Lägg till denna radEndpoint: /history?sensor=env&reading=temperature&range=24h
Aktuell respons:
{
"sensorId": "env",
"readingType": "temperature",
"startTime": 0,
"endTime": 1756833826,
"readings": [] // <-- TOM ARRAY
}Problem: Inga historiska mätningar finns lagrade i systemet.
Fil: data/script.js:930-931
Klientkod förväntar sig:
if (!appState.chart || !data || !data.timestamps || !data.values) {
return;
}
// ...
appState.chart.data.labels = data.timestamps.map(t => new Date(t));
appState.chart.data.datasets[0].data = data.values;Server returnerar:
{
"readings": [] // Inte timestamps + values
}VIKTIGT: Undersök hur historisk sensordata ska lagras och hämtas:
-
Backend-implementation:
- Sök i ESP32-koden efter
/historyendpoint implementation - Kontrollera om data lagras i LittleFS eller bara i minnet
- Verifiera dataformat som skickas från server
- Sök i ESP32-koden efter
-
Databasfrågor att besvara:
- Var lagras historisk sensordata? (LittleFS files, JSON arrays i minnet?)
- Hur ofta sparas mätningar? (varje 5s som realtidsdata, eller mindre frekvent?)
- Vilken datastruktur används för lagring?
- Finns det en retention policy (rensning av gammal data)?
-
Filer att undersöka:
src/katalogen för/historyendpoint handlerstorage/klasser för datalagring- Eventuella config-filer för datalagring
-
Test att köra:
- Låt systemet köra i några timmar
- Kontrollera om
/historyendpoint börjar returnera data - Verifiera att dataformatet matchar client-förväntningarna
// I data/script.js, function initApp() runt rad 146
// Efter: initChart();
// Lägg till:
updateChartOptions();Antingen:
- A) Ändra server för att returnera
{timestamps: [], values: []} - B) Ändra klient för att hantera
{readings: []}format
- Implementera historisk datalagring om den saknas
- Konfigurera lämplig sampling-frekvens för grafer
- Säkerställ att gammal data rensas för att spara utrymme
- Steg 1: Fix dropdown-problem och testa manuellt
- Steg 2: Undersök backend-datalagring grundligt
- Steg 3: Åtgärda dataformat-mismatch
- Steg 4: Implementera/fixa datalagring om nödvändigt
- Steg 5: E2E-test med Playwright för att verifiera graf fungerar
- Realtidsdata fungerar perfekt: BME280 (temp, humidity, pressure) uppdateras var 5:e sekund
- Jordsensor problem: "Soil sensor read failed: 3" (separat problem, ej relaterat till graf)
- Chart.js implementation: Korrekt implementerad med mörk tema-stöd
- API endpoints:
/sensorsoch/statusfungerar,/historyreturnerar tom data
- Analyserad kod:
data/script.js:759-986(Chart implementation) - Test endpoint:
http://192.168.1.123/history?sensor=env&reading=temperature&range=24h - Console logs: Kontinuerliga "Soil sensor read failed: 3" meddelanden
- Webbläsare: Playwright automation i Chrome/Chromium
Detta dokument ska användas som arbetsmaterial när tid finns för att implementera graf-fixes.