'use client'; import { useEffect, useState } from 'react'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; type Measurement = { timestamp: number; soil_moisture: number; }; function formatTime(ts: number): string { return new Date(ts).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', }); } export default function Home() { const [data, setData] = useState([]); const [lastUpdate, setLastUpdate] = useState(''); const fetchData = async () => { const res = await fetch('/bodenfeuchte/api/data'); const json: Measurement[] = await res.json(); setData(json); setLastUpdate(new Date().toLocaleTimeString('de-DE')); }; useEffect(() => { fetchData(); const interval = setInterval(fetchData, 60_000); return () => clearInterval(interval); }, []); const latest = data.at(-1); return (

Bodenfeuchte

Letzte 6 Stunden · Aktualisierung: {lastUpdate || '…'}

{latest && (
{latest.soil_moisture.toFixed(1)} %

{formatTime(latest.timestamp)} Uhr

)}
{data.length === 0 ? (
Noch keine Daten vorhanden
) : ( [`${Number(v).toFixed(1)} %`, 'Bodenfeuchte']} labelFormatter={(ts) => formatTime(Number(ts))} contentStyle={{ background: '#1f2937', border: 'none', borderRadius: 8 }} /> )}
); }