feat: update lake water data, implement service worker and manifest, and add favicon

This commit is contained in:
David Fencl
2026-06-08 20:06:23 +02:00
parent f8a7be7fa3
commit 7a7abdd3e5
61 changed files with 1455 additions and 184 deletions
+16 -1
View File
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/jpeg" href="/favicon.jpg" />
<link rel="icon" type="image/png" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hladinátor - Aktuální stav přehrad a nádrží</title>
<meta name="description" content="Sledujte aktuální vodní stav, průtok a vývoj počasí na českých přehradách a nádržích v reálném čase." />
@@ -10,9 +10,24 @@
<meta property="og:description" content="Sledujte aktuální vodní stav, průtok a vývoj počasí na českých přehradách a nádržích v reálném čase." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://hladinator.cz" />
<!-- PWA Settings -->
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content="#1e293b" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="apple-touch-icon" href="/favicon.png" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('Service Worker registered:', reg.scope))
.catch(err => console.error('Service Worker failed:', err));
});
}
</script>
</body>
</html>
+18
View File
@@ -2326,5 +2326,23 @@
"volume": 0,
"temperature": 26,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 97,
"flow": 8.815,
"inflow": 0,
"volume": 0,
"temperature": 25.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 97,
"flow": 8.963,
"inflow": 0,
"volume": 0,
"temperature": 25.7,
"precipitation": 0
}
]
+10 -1
View File
@@ -2214,7 +2214,16 @@
"flow": 4.745,
"inflow": 0,
"volume": 0,
"temperature": 25.5,
"temperature": 25.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 90,
"flow": 4.82,
"inflow": 0,
"volume": 0,
"temperature": 25.2,
"precipitation": 0
}
]
+18
View File
@@ -2279,5 +2279,23 @@
"volume": 0,
"temperature": 24.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 151,
"flow": 6.53,
"inflow": 0,
"volume": 0,
"temperature": 24.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 151,
"flow": 6.486,
"inflow": 0,
"volume": 0,
"temperature": 24.4,
"precipitation": 0
}
]
+10 -1
View File
@@ -8222,7 +8222,16 @@
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 23.7,
"temperature": 23.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:45:00.000Z",
"level": 463.42,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 23.4,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 2.44,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 521.28,
"flow": 0.65,
"inflow": 0.6,
"volume": 2.44,
"temperature": 21.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 521.28,
"flow": 0.65,
"inflow": 0.6,
"volume": 2.44,
"temperature": 21.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 521.28,
"flow": 0.65,
"inflow": 0.6,
"volume": 2.44,
"temperature": 21.5,
"precipitation": 0
}
]
+18
View File
@@ -8890,5 +8890,23 @@
"volume": 0.09,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 416.72,
"flow": 0,
"inflow": 0,
"volume": 0.09,
"temperature": 23.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 416.72,
"flow": 0,
"inflow": 0,
"volume": 0.09,
"temperature": 23.5,
"precipitation": 0
}
]
+18
View File
@@ -8863,5 +8863,23 @@
"volume": 0.67,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 448.81,
"flow": 0,
"inflow": 0,
"volume": 0.67,
"temperature": 23.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 448.8,
"flow": 0,
"inflow": 0,
"volume": 0.67,
"temperature": 23.4,
"precipitation": 0
}
]
+27
View File
@@ -8080,5 +8080,32 @@
"volume": 0.03,
"temperature": 23,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 580.98,
"flow": 0,
"temperature": 23,
"precipitation": 0,
"inflow": 0,
"volume": 0.03
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 580.97,
"flow": 0,
"temperature": 23,
"precipitation": 0,
"inflow": 0,
"volume": 0.03
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 580.95,
"flow": 0,
"inflow": 0,
"volume": 0.03,
"temperature": 22.8,
"precipitation": 0
}
]
+29 -2
View File
@@ -8912,7 +8912,7 @@
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 447.09,
"flow": 0,
"flow": 0.21,
"inflow": 0.64,
"volume": 1.68,
"temperature": 23.2,
@@ -8921,10 +8921,37 @@
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 447.09,
"flow": 0,
"flow": 0.21,
"inflow": 0.64,
"volume": 1.68,
"temperature": 22.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 447.09,
"flow": 0.23,
"temperature": 22.6,
"precipitation": 0,
"inflow": 0.64,
"volume": 1.68
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 447.09,
"flow": 0,
"inflow": 0.64,
"volume": 1.68,
"temperature": 22.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 447.1,
"flow": 0,
"inflow": 0.64,
"volume": 1.68,
"temperature": 22.3,
"precipitation": 0
}
]
+32 -8
View File
@@ -6531,7 +6531,8 @@
"inflow": 10.531307943184332,
"volume": 0.14,
"temperature": 17.568065740810052,
"precipitation": 0
"precipitation": 0,
"qn": "> Q1"
},
{
"timestamp": "2026-06-05T18:00:00.000Z",
@@ -6639,7 +6640,8 @@
"inflow": 10.531307943184332,
"volume": 0.14,
"temperature": 17.568065740810052,
"precipitation": 0
"precipitation": 0,
"qn": "> Q1"
},
{
"timestamp": "2026-06-06T06:00:00.000Z",
@@ -7107,7 +7109,8 @@
"inflow": 0.42,
"volume": 0.14,
"temperature": 14.7,
"precipitation": 0.6
"precipitation": 0.6,
"qn": "> Q1"
},
{
"timestamp": "2026-06-07T06:00:00.000Z",
@@ -8286,7 +8289,8 @@
"inflow": 0.4,
"volume": 0.14,
"temperature": 9.6,
"precipitation": 0
"precipitation": 0,
"qn": "> Q1"
},
{
"timestamp": "2026-06-08T05:10:00.000Z",
@@ -8340,7 +8344,8 @@
"inflow": 0.4,
"volume": 0.14,
"temperature": 13,
"precipitation": 0
"precipitation": 0,
"qn": "> Q1"
},
{
"timestamp": "2026-06-08T06:10:00.000Z",
@@ -8394,7 +8399,8 @@
"inflow": 0.4,
"volume": 0.14,
"temperature": 16,
"precipitation": 0
"precipitation": 0,
"qn": "> Q1"
},
{
"timestamp": "2026-06-08T07:10:00.000Z",
@@ -8948,7 +8954,7 @@
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 407.64,
"flow": 0,
"flow": 0.2,
"inflow": 0.4,
"volume": 0.14,
"temperature": 22.3,
@@ -8957,10 +8963,28 @@
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 407.64,
"flow": 0,
"flow": 0.2,
"inflow": 0.4,
"volume": 0.14,
"temperature": 22.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 407.64,
"flow": 0,
"inflow": 0.4,
"volume": 0.14,
"temperature": 22,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 407.64,
"flow": 0,
"inflow": 0.4,
"volume": 0.14,
"temperature": 22,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 7.48,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 292.89,
"flow": 0.02,
"inflow": -0.03,
"volume": 7.48,
"temperature": 23.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 292.89,
"flow": 0,
"temperature": 23.5,
"precipitation": 0,
"inflow": -0.03,
"volume": 7.48
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 292.89,
"flow": 0,
"inflow": -0.03,
"volume": 7.48,
"temperature": 23.5,
"precipitation": 0
}
]
+27
View File
@@ -8206,5 +8206,32 @@
"volume": 0,
"temperature": 21.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 632.76,
"flow": 0,
"temperature": 21.7,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 632.76,
"flow": 0,
"temperature": 21.7,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 632.76,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 21.4,
"precipitation": 0
}
]
+27
View File
@@ -8206,5 +8206,32 @@
"volume": 0,
"temperature": 22,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 635.7,
"flow": 0,
"temperature": 22,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 635.7,
"flow": 0,
"temperature": 22,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 635.7,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 21.7,
"precipitation": 0
}
]
+27
View File
@@ -8908,5 +8908,32 @@
"volume": 0.67,
"temperature": 24.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 345.02,
"flow": 0.57,
"temperature": 24.3,
"precipitation": 0,
"inflow": 0.59,
"volume": 0.67
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 345.02,
"flow": 0.57,
"inflow": 0.59,
"volume": 0.67,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 345.02,
"flow": 0.57,
"inflow": 0.59,
"volume": 0.67,
"temperature": 24,
"precipitation": 0
}
]
+27
View File
@@ -8944,5 +8944,32 @@
"volume": 0.73,
"temperature": 21.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 640.65,
"flow": 0.01,
"temperature": 21.3,
"precipitation": 0,
"inflow": 0.01,
"volume": 0.73
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 640.65,
"flow": 0.01,
"inflow": 0.01,
"volume": 0.73,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 640.65,
"flow": 0.01,
"inflow": 0.01,
"volume": 0.73,
"temperature": 21,
"precipitation": 0
}
]
+18
View File
@@ -2254,5 +2254,23 @@
"volume": 0,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 84,
"flow": 3.056,
"inflow": 0,
"volume": 0,
"temperature": 23.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 85,
"flow": 3.152,
"inflow": 0,
"volume": 0,
"temperature": 23.7,
"precipitation": 0
}
]
+18
View File
@@ -1968,5 +1968,23 @@
"volume": 0,
"temperature": 24.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 51,
"flow": 3.92,
"temperature": 24.1,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 51,
"flow": 3.92,
"inflow": 0,
"volume": 0,
"temperature": 23.8,
"precipitation": 0
}
]
+28 -1
View File
@@ -9245,10 +9245,37 @@
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 467.79,
"flow": 0,
"flow": 0.7,
"inflow": 1.6,
"volume": 26.61,
"temperature": 24.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 467.79,
"flow": 0.7,
"temperature": 24.1,
"precipitation": 0,
"inflow": 1.6,
"volume": 26.61
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 467.79,
"flow": 0.7,
"inflow": 1.6,
"volume": 26.61,
"temperature": 23.9,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 467.79,
"flow": 0,
"inflow": 1.6,
"volume": 26.61,
"temperature": 23.9,
"precipitation": 0
}
]
+27
View File
@@ -9277,5 +9277,32 @@
"volume": 32.11,
"temperature": 24.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 352.79,
"flow": 2.52,
"temperature": 24.7,
"precipitation": 0,
"inflow": 1.42,
"volume": 32.11
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 352.79,
"flow": 2.52,
"inflow": 1.42,
"volume": 32.11,
"temperature": 24.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 352.79,
"flow": 0,
"inflow": 1.42,
"volume": 32.11,
"temperature": 24.5,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 2.92,
"temperature": 22.9,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 530.66,
"flow": 0.49,
"temperature": 22.9,
"precipitation": 0,
"inflow": 0.33,
"volume": 2.92
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 530.66,
"flow": 0.49,
"inflow": 0.33,
"volume": 2.92,
"temperature": 22.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 0.49,
"inflow": 0.33,
"volume": 2.92,
"temperature": 22.6,
"precipitation": 0
}
]
+27
View File
@@ -8755,5 +8755,32 @@
"volume": 0.46,
"temperature": 22.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 563.66,
"flow": 0.02,
"temperature": 22.3,
"precipitation": 0,
"inflow": 0,
"volume": 0.46
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 563.66,
"flow": 0.02,
"inflow": 0,
"volume": 0.46,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 0.02,
"inflow": 0,
"volume": 0.46,
"temperature": 22.1,
"precipitation": 0
}
]
+18
View File
@@ -2261,5 +2261,23 @@
"volume": 0,
"temperature": 24.9,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 43,
"flow": 4.73,
"inflow": 0,
"volume": 0,
"temperature": 24.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 43,
"flow": 4.75,
"inflow": 0,
"volume": 0,
"temperature": 24.6,
"precipitation": 0
}
]
+18
View File
@@ -2326,5 +2326,23 @@
"volume": 0,
"temperature": 23,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 25,
"flow": 2.95,
"inflow": 0,
"volume": 0,
"temperature": 22.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 26,
"flow": 3.21,
"inflow": 0,
"volume": 0,
"temperature": 22.5,
"precipitation": 0
}
]
+1 -1
View File
@@ -8105,7 +8105,7 @@
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 21.8,
"temperature": 21.5,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 2.93,
"temperature": 25.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 313.43,
"flow": 1.03,
"temperature": 25.1,
"precipitation": 0,
"inflow": 1.25,
"volume": 2.93
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 313.43,
"flow": 1.03,
"inflow": 1.25,
"volume": 2.93,
"temperature": 24.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 1.03,
"inflow": 1.25,
"volume": 2.93,
"temperature": 24.8,
"precipitation": 0
}
]
+18
View File
@@ -2279,5 +2279,23 @@
"volume": 0,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 74,
"flow": 2.74,
"inflow": 0,
"volume": 0,
"temperature": 23.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 74,
"flow": 2.74,
"inflow": 0,
"volume": 0,
"temperature": 23.4,
"precipitation": 0
}
]
+18
View File
@@ -2236,5 +2236,23 @@
"volume": 0,
"temperature": 23.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 44,
"flow": 4.17,
"inflow": 0,
"volume": 0,
"temperature": 23.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 44,
"flow": 4.17,
"inflow": 0,
"volume": 0,
"temperature": 23.3,
"precipitation": 0
}
]
+18
View File
@@ -8926,5 +8926,23 @@
"volume": 1.06,
"temperature": 21.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 575.7,
"flow": 0.02,
"inflow": 0,
"volume": 1.06,
"temperature": 21.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 575.7,
"flow": 0.02,
"inflow": 0,
"volume": 1.06,
"temperature": 21.2,
"precipitation": 0
}
]
+18
View File
@@ -2279,5 +2279,23 @@
"volume": 0,
"temperature": 23.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 26,
"flow": 1.535,
"inflow": 0,
"volume": 0,
"temperature": 23.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 25,
"flow": 1.524,
"inflow": 0,
"volume": 0,
"temperature": 23.1,
"precipitation": 0
}
]
+18
View File
@@ -2279,5 +2279,23 @@
"volume": 0,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 68,
"flow": 1.456,
"inflow": 0,
"volume": 0,
"temperature": 23.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 68,
"flow": 1.456,
"inflow": 0,
"volume": 0,
"temperature": 23.7,
"precipitation": 0
}
]
+19 -1
View File
@@ -8929,11 +8929,29 @@
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 0,
"level": 534.7,
"flow": 0.06,
"inflow": 0.07,
"volume": 0.1,
"temperature": 23.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 534.7,
"flow": 0.06,
"inflow": 0.07,
"volume": 0.1,
"temperature": 23.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 0.06,
"inflow": 0.07,
"volume": 0.1,
"temperature": 23.3,
"precipitation": 0
}
]
+9
View File
@@ -8908,5 +8908,14 @@
"volume": 0.41,
"temperature": 24.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 260.09,
"flow": 0.06,
"inflow": 0.07,
"volume": 0.41,
"temperature": 23.7,
"precipitation": 0
}
]
+18
View File
@@ -8917,5 +8917,23 @@
"volume": 0.39,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 668.4,
"flow": 0,
"inflow": 0,
"volume": 0.39,
"temperature": 23.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 668.4,
"flow": 0,
"inflow": 0,
"volume": 0.39,
"temperature": 23.5,
"precipitation": 0
}
]
+18
View File
@@ -8638,5 +8638,23 @@
"volume": 0.84,
"temperature": 22.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 385.01,
"flow": 0.02,
"inflow": 0,
"volume": 0.84,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 385.01,
"flow": 0.02,
"inflow": 0,
"volume": 0.84,
"temperature": 22.1,
"precipitation": 0
}
]
+18
View File
@@ -8908,5 +8908,23 @@
"volume": 0.16,
"temperature": 20.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 678.6,
"flow": 0,
"inflow": 0,
"volume": 0.16,
"temperature": 20.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 678.6,
"flow": 0,
"inflow": 0,
"volume": 0.16,
"temperature": 20.2,
"precipitation": 0
}
]
+27
View File
@@ -8962,5 +8962,32 @@
"volume": 0.32,
"temperature": 23,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 588.39,
"flow": 0.08,
"temperature": 23,
"precipitation": 0,
"inflow": 0,
"volume": 0.32
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 588.39,
"flow": 0.08,
"inflow": 0,
"volume": 0.32,
"temperature": 22.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 0.08,
"inflow": 0,
"volume": 0.32,
"temperature": 22.7,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 9.28,
"temperature": 22.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 505.63,
"flow": 0.22,
"temperature": 22.6,
"precipitation": 0,
"inflow": 0.05,
"volume": 9.28
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 505.63,
"flow": 0.22,
"inflow": 0.05,
"volume": 9.28,
"temperature": 22.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 505.63,
"flow": 0.22,
"inflow": 0.05,
"volume": 9.28,
"temperature": 22.3,
"precipitation": 0
}
]
+19 -1
View File
@@ -8911,11 +8911,29 @@
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 0,
"level": 580.52,
"flow": 0.05,
"inflow": 0,
"volume": 0.41,
"temperature": 21.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 0,
"flow": 0.05,
"inflow": 0,
"volume": 0.41,
"temperature": 21.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 0,
"flow": 0.05,
"inflow": 0,
"volume": 0.41,
"temperature": 21.1,
"precipitation": 0
}
]
+27
View File
@@ -8935,5 +8935,32 @@
"volume": 5.16,
"temperature": 23.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 412.8,
"flow": 0.34,
"temperature": 23.2,
"precipitation": 0,
"inflow": 0.34,
"volume": 5.16
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 412.8,
"flow": 0.34,
"inflow": 0.34,
"volume": 5.16,
"temperature": 22.9,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 412.8,
"flow": 0.34,
"inflow": 0.34,
"volume": 5.16,
"temperature": 22.9,
"precipitation": 0
}
]
+27
View File
@@ -8935,5 +8935,32 @@
"volume": 15.31,
"temperature": 19.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 520.32,
"flow": 0.72,
"temperature": 19.6,
"precipitation": 0,
"inflow": 0.53,
"volume": 15.31
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 520.32,
"flow": 0.72,
"inflow": 0.53,
"volume": 15.31,
"temperature": 19.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 520.32,
"flow": 0,
"inflow": 0.53,
"volume": 15.31,
"temperature": 19.2,
"precipitation": 0
}
]
+18
View File
@@ -1968,5 +1968,23 @@
"volume": 0,
"temperature": 25.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 98,
"flow": 9.24,
"temperature": 25.8,
"precipitation": 0,
"inflow": 0,
"volume": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 100,
"flow": 8.57,
"inflow": 0,
"volume": 0,
"temperature": 25.6,
"precipitation": 0
}
]
+18
View File
@@ -2252,5 +2252,23 @@
"volume": 0,
"temperature": 26.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 45,
"flow": 51.71,
"inflow": 0,
"volume": 0,
"temperature": 25.9,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 46,
"flow": 52.52,
"inflow": 0,
"volume": 0,
"temperature": 25.9,
"precipitation": 0
}
]
+18
View File
@@ -9223,5 +9223,23 @@
"volume": 19.77,
"temperature": 24.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 369.61,
"flow": 15.23,
"temperature": 24.4,
"precipitation": 0,
"inflow": 0,
"volume": 19.77
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 369.61,
"flow": 15.26,
"inflow": 0,
"volume": 19.77,
"temperature": 24.1,
"precipitation": 0
}
]
+27
View File
@@ -8917,5 +8917,32 @@
"volume": 10.12,
"temperature": 24.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 283.19,
"flow": 39.59,
"inflow": 1.43,
"volume": 10.12,
"temperature": 24.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 283.27,
"flow": 39.75,
"inflow": 1.43,
"volume": 10.12,
"temperature": 24.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 283.26,
"flow": 39.79,
"inflow": 1.43,
"volume": 10.12,
"temperature": 24.4,
"precipitation": 0
}
]
+27
View File
@@ -9250,5 +9250,32 @@
"volume": 2.77,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 352.52,
"flow": 25.5,
"temperature": 23.8,
"precipitation": 0,
"inflow": 15.72,
"volume": 2.77
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 352.52,
"flow": 22.96,
"inflow": 15.72,
"volume": 2.77,
"temperature": 23.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 352.53,
"flow": 19.89,
"inflow": 15.72,
"volume": 2.77,
"temperature": 23.6,
"precipitation": 0
}
]
+18
View File
@@ -9232,5 +9232,23 @@
"volume": 198.92,
"temperature": 22.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 723.06,
"flow": 51.86,
"inflow": -2.61,
"volume": 198.92,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 723.07,
"flow": 51.87,
"inflow": -2.61,
"volume": 198.92,
"temperature": 22.1,
"precipitation": 0
}
]
+20 -2
View File
@@ -9236,7 +9236,7 @@
{
"timestamp": "2026-06-08T17:00:00.000Z",
"level": 559.61,
"flow": 0,
"flow": 7.48,
"inflow": 2.61,
"volume": 0.61,
"temperature": 24.2,
@@ -9245,7 +9245,7 @@
{
"timestamp": "2026-06-08T17:10:00.000Z",
"level": 559.6,
"flow": 0,
"flow": 7.48,
"inflow": 2.61,
"volume": 0.59,
"temperature": 23.7,
@@ -9259,5 +9259,23 @@
"volume": 0.59,
"temperature": 23.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 559.63,
"flow": 0,
"temperature": 23.3,
"precipitation": 0,
"inflow": 2.61,
"volume": 0.59
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 559.7,
"flow": 0,
"inflow": 2.61,
"volume": 0.59,
"temperature": 22.9,
"precipitation": 0
}
]
+18
View File
@@ -9259,5 +9259,23 @@
"volume": 521.33,
"temperature": 24.2,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 345.22,
"flow": 148.9,
"inflow": 18.49,
"volume": 521.33,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 345.22,
"flow": 148.83,
"inflow": 18.49,
"volume": 521.33,
"temperature": 24,
"precipitation": 0
}
]
+27
View File
@@ -9250,5 +9250,32 @@
"volume": 260.55,
"temperature": 24.4,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 269.81,
"flow": 236.61,
"inflow": 1.16,
"volume": 260.55,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 269.81,
"flow": 237.63,
"inflow": 1.16,
"volume": 260.55,
"temperature": 24,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 269.79,
"flow": 239.31,
"inflow": 1.16,
"volume": 260.55,
"temperature": 24,
"precipitation": 0
}
]
+27
View File
@@ -9250,5 +9250,32 @@
"volume": 7.56,
"temperature": 23.8,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 216.68,
"flow": 51.45,
"temperature": 23.8,
"precipitation": 0,
"inflow": 12.66,
"volume": 7.56
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 216.71,
"flow": 51.45,
"inflow": 12.66,
"volume": 7.56,
"temperature": 23.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 216.89,
"flow": 51.48,
"inflow": 12.66,
"volume": 7.56,
"temperature": 23.3,
"precipitation": 0
}
]
+18
View File
@@ -2299,5 +2299,23 @@
"volume": 0,
"temperature": 23.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 65,
"flow": 7.458,
"inflow": 0,
"volume": 0,
"temperature": 23.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 65,
"flow": 7.482,
"inflow": 0,
"volume": 0,
"temperature": 23.3,
"precipitation": 0
}
]
+27
View File
@@ -8953,5 +8953,32 @@
"volume": 9.02,
"temperature": 24.6,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 199.29,
"flow": 39.59,
"inflow": 25.05,
"volume": 9.02,
"temperature": 24.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 199.28,
"flow": 39.64,
"inflow": 25.05,
"volume": 9.02,
"temperature": 24.3,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:50:00.000Z",
"level": 199.3,
"flow": 39.64,
"inflow": 25.05,
"volume": 9.02,
"temperature": 24.3,
"precipitation": 0
}
]
+19 -1
View File
@@ -8894,10 +8894,28 @@
{
"timestamp": "2026-06-08T17:20:00.000Z",
"level": 375.12,
"flow": 0,
"flow": 0.44,
"inflow": 0.58,
"volume": 240.58,
"temperature": 23.7,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:30:00.000Z",
"level": 375.12,
"flow": 0.44,
"inflow": 0.58,
"volume": 240.58,
"temperature": 23.5,
"precipitation": 0
},
{
"timestamp": "2026-06-08T17:40:00.000Z",
"level": 375.12,
"flow": 0,
"inflow": 0.58,
"volume": 240.58,
"temperature": 23.5,
"precipitation": 0
}
]
+147 -147
View File
@@ -4,11 +4,11 @@
"name": "Lipno 1",
"river": "Vltava",
"priority": true,
"level": "723.06",
"level": "723.07",
"capacity": 65,
"storageDiff": -1.84,
"storageDiff": -1.83,
"inflow": "-2.6",
"outflow": "48.5",
"outflow": "51.9",
"volume": 198.92,
"maxVolume": 306,
"navigationForbidden": false,
@@ -23,10 +23,10 @@
723.07,
723.07,
723.07,
723.07,
723.07,
723.06,
723.06
723.06,
723.06,
723.07
],
"type": "lake"
},
@@ -35,9 +35,9 @@
"name": "Lipno II",
"river": "Vltava",
"priority": true,
"level": "559.58",
"level": "559.70",
"capacity": 36.9,
"storageDiff": -3.12,
"storageDiff": -3,
"inflow": "2.6",
"outflow": "0.0",
"volume": 0.59,
@@ -46,8 +46,6 @@
"lat": 48.625,
"lng": 14.318,
"sparkline": [
559.72,
559.71,
559.69,
559.68,
559.67,
@@ -57,7 +55,9 @@
559.62,
559.61,
559.6,
559.58
559.58,
559.63,
559.7
],
"type": "lake"
},
@@ -70,15 +70,13 @@
"capacity": 93.7,
"storageDiff": -0.49,
"inflow": "0.0",
"outflow": "15.2",
"outflow": "15.3",
"volume": 19.77,
"maxVolume": 21.1,
"navigationForbidden": false,
"lat": 49.183,
"lng": 14.444,
"sparkline": [
369.65,
369.64,
369.64,
369.64,
369.64,
@@ -88,6 +86,8 @@
369.61,
369.61,
369.61,
369.61,
369.61,
369.61
],
"type": "lake"
@@ -97,11 +97,11 @@
"name": "Kořensko",
"river": "Vltava",
"priority": true,
"level": "352.52",
"level": "352.53",
"capacity": 98.9,
"storageDiff": -0.08,
"storageDiff": -0.07,
"inflow": "15.7",
"outflow": "26.1",
"outflow": "19.9",
"volume": 2.77,
"maxVolume": 2.8,
"navigationForbidden": false,
@@ -109,8 +109,6 @@
"lng": 14.398,
"sparkline": [
352.52,
352.51,
352.51,
352.52,
352.52,
352.52,
@@ -119,7 +117,9 @@
352.52,
352.52,
352.52,
352.52
352.52,
352.52,
352.53
],
"type": "lake"
},
@@ -132,7 +132,7 @@
"capacity": 72.8,
"storageDiff": -4.68,
"inflow": "18.5",
"outflow": "149.0",
"outflow": "148.8",
"volume": 521.33,
"maxVolume": 716.5,
"navigationForbidden": false,
@@ -147,9 +147,9 @@
345.22,
345.22,
345.22,
345.22,
345.22,
345.23,
345.22,
345.22,
345.22
],
"type": "lake"
@@ -159,20 +159,17 @@
"name": "Slapy",
"river": "Vltava",
"priority": true,
"level": "269.81",
"level": "269.79",
"capacity": 96.8,
"storageDiff": -0.79,
"storageDiff": -0.81,
"inflow": "1.2",
"outflow": "236.3",
"outflow": "239.3",
"volume": 260.55,
"maxVolume": 269.3,
"navigationForbidden": false,
"lat": 49.822,
"lng": 14.436,
"sparkline": [
269.85,
269.85,
269.85,
269.85,
269.85,
269.85,
@@ -181,7 +178,10 @@
269.85,
269.83,
269.81,
269.81
269.81,
269.81,
269.81,
269.79
],
"type": "lake"
},
@@ -190,9 +190,9 @@
"name": "Štěchovice",
"river": "Vltava",
"priority": true,
"level": "216.51",
"level": "216.89",
"capacity": 67.5,
"storageDiff": -2.89,
"storageDiff": -2.51,
"inflow": "12.7",
"outflow": "51.5",
"volume": 7.56,
@@ -201,9 +201,6 @@
"lat": 49.845,
"lng": 14.412,
"sparkline": [
216.46,
216.45,
216.44,
216.41,
216.4,
216.38,
@@ -212,7 +209,10 @@
216.34,
216.32,
216.28,
216.51
216.51,
216.68,
216.71,
216.89
],
"type": "lake"
},
@@ -252,20 +252,17 @@
"name": "Hracholusky",
"river": "Mže",
"priority": true,
"level": "352.78",
"level": "352.79",
"capacity": 56.6,
"storageDiff": -1.32,
"storageDiff": -1.31,
"inflow": "1.4",
"outflow": "2.5",
"outflow": "0.0",
"volume": 32.11,
"maxVolume": 56.7,
"navigationForbidden": false,
"lat": 49.789,
"lng": 13.155,
"sparkline": [
352.79,
352.79,
352.79,
352.79,
352.79,
352.79,
@@ -274,7 +271,10 @@
352.78,
352.79,
352.79,
352.78
352.78,
352.79,
352.79,
352.79
],
"type": "lake"
},
@@ -314,20 +314,17 @@
"name": "Kamýk",
"river": "",
"priority": false,
"level": "283.07",
"level": "283.26",
"capacity": 79.1,
"storageDiff": -1.53,
"storageDiff": -1.34,
"inflow": "1.4",
"outflow": "39.4",
"outflow": "39.8",
"volume": 10.12,
"maxVolume": 12.8,
"navigationForbidden": false,
"lat": 49.638,
"lng": 14.258,
"sparkline": [
283.1,
283.09,
283.1,
283.08,
283.1,
283.11,
@@ -336,7 +333,10 @@
283.09,
283.09,
283.08,
283.07
283.07,
283.19,
283.27,
283.26
],
"type": "lake"
},
@@ -345,9 +345,9 @@
"name": "Vrané",
"river": "",
"priority": false,
"level": "199.28",
"level": "199.30",
"capacity": 81.3,
"storageDiff": -0.82,
"storageDiff": -0.8,
"inflow": "25.1",
"outflow": "39.6",
"volume": 9.02,
@@ -356,9 +356,6 @@
"lat": 49.939,
"lng": 14.391,
"sparkline": [
199.27,
199.25,
199.27,
199.27,
199.27,
199.28,
@@ -367,7 +364,10 @@
199.25,
199.27,
199.28,
199.28
199.28,
199.29,
199.28,
199.3
],
"type": "lake"
},
@@ -380,7 +380,7 @@
"capacity": 42.8,
"storageDiff": -1.05,
"inflow": "0.6",
"outflow": "0.6",
"outflow": "0.7",
"volume": 2.44,
"maxVolume": 5.7,
"navigationForbidden": true,
@@ -411,7 +411,7 @@
"capacity": 95.7,
"storageDiff": -1.23,
"inflow": "0.5",
"outflow": "0.7",
"outflow": "0.0",
"volume": 15.31,
"maxVolume": 16,
"navigationForbidden": true,
@@ -419,9 +419,9 @@
"lng": 13.123,
"sparkline": [
520.31,
520.31,
520.31,
520.31,
520.32,
520.32,
520.32,
520.32,
520.32,
520.32,
@@ -500,9 +500,9 @@
"name": "České Údolí",
"river": "",
"priority": false,
"level": "313.42",
"level": "0.00",
"capacity": 53.3,
"storageDiff": -0.18,
"storageDiff": 0,
"inflow": "1.3",
"outflow": "1.0",
"volume": 2.93,
@@ -511,9 +511,6 @@
"lat": 49.715,
"lng": 13.364,
"sparkline": [
313.43,
313.42,
0,
313.43,
313.42,
313.42,
@@ -522,7 +519,10 @@
0,
313.42,
313.43,
313.42
313.42,
313.43,
313.43,
0
],
"type": "lake"
},
@@ -562,9 +562,9 @@
"name": "Sedlice",
"river": "",
"priority": false,
"level": "447.09",
"level": "447.10",
"capacity": 88.4,
"storageDiff": -0.31,
"storageDiff": -0.3,
"inflow": "0.6",
"outflow": "0.0",
"volume": 1.68,
@@ -584,7 +584,7 @@
447.09,
447.09,
447.09,
447.09
447.1
],
"type": "lake"
},
@@ -593,9 +593,9 @@
"name": "Lučina",
"river": "",
"priority": false,
"level": "530.66",
"level": "0.00",
"capacity": 100,
"storageDiff": -1.44,
"storageDiff": 0,
"inflow": "0.3",
"outflow": "0.5",
"volume": 2.92,
@@ -604,9 +604,6 @@
"lat": 49.805,
"lng": 12.639,
"sparkline": [
530.66,
530.66,
530.66,
530.66,
530.66,
530.66,
@@ -615,7 +612,10 @@
0,
530.66,
530.66,
530.66
530.66,
530.66,
530.66,
0
],
"type": "lake"
},
@@ -702,12 +702,12 @@
640.65,
640.65,
640.65,
640.65,
640.65,
640.65,
0,
640.65,
640.65,
640.65,
640.65,
640.65,
640.65
],
"type": "lake"
@@ -717,9 +717,9 @@
"name": "Obecnice",
"river": "",
"priority": false,
"level": "563.66",
"level": "0.00",
"capacity": 76.7,
"storageDiff": -0.89,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "0.0",
"volume": 0.46,
@@ -739,7 +739,7 @@
563.66,
563.66,
563.66,
563.66
0
],
"type": "lake"
},
@@ -748,9 +748,9 @@
"name": "Strž",
"river": "",
"priority": false,
"level": "588.39",
"level": "0.00",
"capacity": 32,
"storageDiff": -0.21,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "0.1",
"volume": 0.32,
@@ -759,6 +759,9 @@
"lat": 49.791,
"lng": 14.004,
"sparkline": [
588.39,
588.39,
588.39,
588.39,
588.39,
0,
@@ -767,10 +770,7 @@
588.39,
588.39,
588.39,
0,
588.39,
588.39,
588.39
0
],
"type": "lake"
},
@@ -810,9 +810,9 @@
"name": "Soběnov",
"river": "",
"priority": false,
"level": "580.99",
"level": "580.95",
"capacity": 2.1,
"storageDiff": -1.22,
"storageDiff": -1.26,
"inflow": "0.0",
"outflow": "0.0",
"volume": 0.03,
@@ -821,9 +821,6 @@
"lat": 48.775,
"lng": 14.536,
"sparkline": [
580.98,
580.99,
580.99,
581.01,
581.02,
581.03,
@@ -832,7 +829,10 @@
581.05,
581.04,
581.03,
580.99
580.99,
580.98,
580.97,
580.95
],
"type": "lake"
},
@@ -852,8 +852,6 @@
"lat": 48.784,
"lng": 14.735,
"sparkline": [
534.69,
0,
534.69,
534.69,
534.69,
@@ -863,6 +861,8 @@
534.69,
534.69,
534.7,
534.7,
534.7,
0
],
"type": "lake"
@@ -883,8 +883,6 @@
"lat": 49.575,
"lng": 15.952,
"sparkline": [
580.52,
0,
580.52,
580.52,
580.52,
@@ -894,6 +892,8 @@
580.52,
580.52,
580.52,
580.52,
0,
0
],
"type": "lake"
@@ -965,9 +965,9 @@
"name": "Záskalská",
"river": "",
"priority": false,
"level": "448.81",
"level": "448.80",
"capacity": 100,
"storageDiff": 0.02,
"storageDiff": 0.01,
"inflow": "0.0",
"outflow": "0.0",
"volume": 0.67,
@@ -980,14 +980,14 @@
448.81,
448.8,
448.81,
448.81,
448.81,
448.8,
448.8,
448.8,
448.81,
448.81,
448.81,
448.8,
448.8,
448.8,
448.81
448.8
],
"type": "lake"
},
@@ -1162,9 +1162,6 @@
"lat": 49.655,
"lng": 13.761,
"sparkline": [
635.7,
635.7,
635.7,
635.69,
635.7,
635.7,
@@ -1173,6 +1170,9 @@
635.7,
635.7,
635.7,
635.7,
635.7,
635.7,
635.7
],
"type": "lake"
@@ -1217,15 +1217,13 @@
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "53.9",
"outflow": "52.5",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 50.0294,
"lng": 14.3986,
"sparkline": [
46,
46,
47,
47,
46,
@@ -1235,6 +1233,8 @@
47,
46,
49,
46,
45,
46
],
"type": "river"
@@ -1244,19 +1244,17 @@
"name": "České Budějovice",
"river": "Vltava",
"priority": false,
"level": "101.00",
"level": "100.00",
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "9.2",
"outflow": "8.6",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 48.9712,
"lng": 14.4714,
"sparkline": [
100,
99,
101,
100,
99,
@@ -1266,7 +1264,9 @@
101,
101,
98,
101
101,
98,
100
],
"type": "river"
},
@@ -1275,19 +1275,17 @@
"name": "Beroun",
"river": "Berounka",
"priority": false,
"level": "96.00",
"level": "97.00",
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "8.7",
"outflow": "9.0",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 49.9642,
"lng": 14.0792,
"sparkline": [
100,
99,
99,
98,
97,
@@ -1297,7 +1295,9 @@
96,
96,
96,
96
96,
97,
97
],
"type": "river"
},
@@ -1341,15 +1341,13 @@
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "4.7",
"outflow": "4.8",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 49.3083,
"lng": 14.1436,
"sparkline": [
44,
45,
45,
43,
41,
@@ -1359,6 +1357,8 @@
45,
44,
43,
43,
43,
43
],
"type": "river"
@@ -1368,19 +1368,17 @@
"name": "Sušice",
"river": "Otava",
"priority": false,
"level": "25.00",
"level": "26.00",
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "3.0",
"outflow": "3.2",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 49.2319,
"lng": 13.5186,
"sparkline": [
25,
25,
25,
25,
26,
@@ -1390,7 +1388,9 @@
25,
25,
25,
25
25,
25,
26
],
"type": "river"
},
@@ -1399,19 +1399,17 @@
"name": "Bechyně",
"river": "Lužnice",
"priority": false,
"level": "82.00",
"level": "85.00",
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "2.7",
"outflow": "3.2",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 49.2931,
"lng": 14.4758,
"sparkline": [
80,
79,
82,
82,
81,
@@ -1421,7 +1419,9 @@
84,
83,
81,
82
82,
84,
85
],
"type": "river"
},
@@ -1446,8 +1446,8 @@
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
@@ -1492,19 +1492,17 @@
"name": "Světlá nad Sázavou",
"river": "Sázava",
"priority": false,
"level": "26.00",
"level": "25.00",
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "1.6",
"outflow": "1.5",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
"lat": 49.6677,
"lng": 15.4048,
"sparkline": [
25,
25,
25,
24,
23,
@@ -1514,7 +1512,9 @@
26,
26,
26,
26
26,
26,
25
],
"type": "river"
},
@@ -1527,7 +1527,7 @@
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "2.8",
"outflow": "2.7",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
@@ -1558,7 +1558,7 @@
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "6.6",
"outflow": "6.5",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
@@ -1571,8 +1571,8 @@
152,
152,
152,
152,
152,
151,
151,
151,
151,
151,
@@ -1589,7 +1589,7 @@
"capacity": 0,
"storageDiff": 0,
"inflow": "0.0",
"outflow": "4.7",
"outflow": "4.8",
"volume": 0,
"maxVolume": 0,
"navigationForbidden": false,
@@ -1602,11 +1602,11 @@
87,
87,
87,
87,
88,
89,
89,
90,
90,
90
],
"type": "river"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

+17
View File
@@ -0,0 +1,17 @@
{
"short_name": "Hladinátor",
"name": "Hladinátor - Stav přehrad a nádrží",
"icons": [
{
"src": "/favicon.png",
"type": "image/png",
"sizes": "512x512",
"purpose": "any maskable"
}
],
"start_url": "/",
"background_color": "#1e293b",
"theme_color": "#1e293b",
"display": "standalone",
"orientation": "portrait"
}
+66
View File
@@ -0,0 +1,66 @@
const CACHE_NAME = 'hladinator-v1';
const ASSETS_TO_CACHE = [
'/',
'/index.html',
'/favicon.png',
'/manifest.json'
];
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll(ASSETS_TO_CACHE);
})
);
self.skipWaiting();
});
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((keys) => {
return Promise.all(
keys.map((key) => {
if (key !== CACHE_NAME) {
return caches.delete(key);
}
})
);
})
);
self.clients.claim();
});
self.addEventListener('fetch', (event) => {
// Only handle same-origin HTTP/HTTPS requests
if (!event.request.url.startsWith(self.location.origin)) return;
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
// Fetch new version in background to update cache (stale-while-revalidate)
fetch(event.request).then((networkResponse) => {
if (networkResponse.status === 200) {
caches.open(CACHE_NAME).then((cache) => cache.put(event.request, networkResponse));
}
}).catch(() => {/* ignore network failures */});
return cachedResponse;
}
return fetch(event.request).then((networkResponse) => {
// Cache static files and JSON data on the fly
if (networkResponse.status === 200 && (
event.request.url.includes('.json') ||
event.request.url.includes('.css') ||
event.request.url.includes('.js')
)) {
const responseToCache = networkResponse.clone();
caches.open(CACHE_NAME).then((cache) => cache.put(event.request, responseToCache));
}
return networkResponse;
}).catch(() => {
// Offline fallback
});
})
);
});
+30 -10
View File
@@ -13,6 +13,7 @@ interface DataRecord {
volume?: number;
temperature?: number | null;
precipitation?: number | null;
qn?: string;
}
// Parse date from DD.MM.YYYY HH:MM to ISO
@@ -91,24 +92,42 @@ async function scrapeLake(lakeId: string, oid: string, internalId: string) {
});
if (dataTable) {
dataTable.find('tr').each((i, row) => {
let qnColIndex = -1;
let flowColIndex = 2;
let levelColIndex = 1;
// Find column indices from header dynamically
$(dataTable).find('tr').first().find('th, td').each((idx, cell) => {
const headerText = $(cell).text().trim().toLowerCase();
if (headerText.includes('qn')) {
qnColIndex = idx;
} else if (headerText.includes('hladina') || headerText.includes('stav')) {
levelColIndex = idx;
} else if (headerText.includes('odtok') || headerText.includes('průtok') || headerText.includes('prutok') || headerText.includes('flow')) {
flowColIndex = idx;
}
});
$(dataTable).find('tr').each((i, row) => {
if (i === 0) return; // skip header
const cols = $(row).find('td');
if (cols.length >= 3) {
if (cols.length > Math.max(levelColIndex, flowColIndex)) {
const rawDate = $(cols[0]).text().trim();
const levelStr = $(cols[1]).text().trim().replace(',', '.');
let flowStr = $(cols[2]).text().trim().replace(',', '.');
if (flowStr === '' && cols.length >= 4) {
flowStr = $(cols[3]).text().trim().replace(',', '.');
}
const levelStr = $(cols[levelColIndex]).text().trim().replace(',', '.');
const flowStr = $(cols[flowColIndex]).text().trim().replace(',', '.');
const qn = qnColIndex !== -1 && cols.length > qnColIndex ? $(cols[qnColIndex]).text().trim() : '';
const parsedDateStr = parseDateString(rawDate);
if (parsedDateStr) {
records.push({
const newRecord: DataRecord = {
timestamp: parsedDateStr,
level: parseFloat(levelStr) || 0,
flow: parseFloat(flowStr) || 0
});
};
if (qn) {
newRecord.qn = qn;
}
records.push(newRecord);
}
}
});
@@ -153,7 +172,8 @@ async function scrapeLake(lakeId: string, oid: string, internalId: string) {
...existing,
...item,
inflow: item.inflow !== undefined ? item.inflow : existing.inflow,
volume: item.volume !== undefined ? item.volume : existing.volume
volume: item.volume !== undefined ? item.volume : existing.volume,
qn: item.qn !== undefined ? item.qn : existing.qn
});
} else {
dataMap.set(item.timestamp, item);
+47 -7
View File
@@ -22,6 +22,7 @@ interface LipnoData {
fullness: number;
temperature?: number | null;
precipitation?: number | null;
qn?: string;
}
interface Props {
@@ -89,12 +90,21 @@ const CustomTooltip = ({ active, payload, label, language, isWeather, isRiver }:
if (!labelStr || entry.value === null || entry.value === undefined) return null;
return (
<div key={index} style={{ margin: 0, color: 'var(--text-main)', display: 'flex', alignItems: 'center', marginBottom: '4px' }}>
<span style={{ display: 'inline-block', width: '8px', height: '8px', borderRadius: '50%', backgroundColor: color, marginRight: '8px' }}></span>
{labelStr}: <span style={{ fontWeight: 'bold', marginLeft: '4px' }}>{entry.value.toFixed(entry.dataKey === 'level' ? (isRiver ? 0 : 2) : 1)} {unit}</span>
</div>
);
<div key={index} style={{ margin: 0, color: 'var(--text-main)', display: 'flex', alignItems: 'center', marginBottom: '4px' }}>
<span style={{ display: 'inline-block', width: '8px', height: '8px', borderRadius: '50%', backgroundColor: color, marginRight: '8px' }}></span>
{labelStr}: <span style={{ fontWeight: 'bold', marginLeft: '4px' }}>{entry.value.toFixed(entry.dataKey === 'level' ? (isRiver ? 0 : 2) : 1)} {unit}</span>
</div>
);
})}
{payload[0]?.payload?.qn ? (
<div style={{ marginTop: '8px', paddingTop: '8px', borderTop: '1px solid var(--border-color)', fontSize: '0.8rem', color: '#f59e0b', display: 'flex', alignItems: 'center', gap: '4px' }}>
{language === 'cs' ? `Neověřené měření (QN: ${payload[0].payload.qn})` : `Unverified measurement (QN: ${payload[0].payload.qn})`}
</div>
) : (
<div style={{ marginTop: '8px', paddingTop: '8px', borderTop: '1px solid var(--border-color)', fontSize: '0.8rem', color: 'var(--color-green)', display: 'flex', alignItems: 'center', gap: '4px' }}>
{language === 'cs' ? 'Měření ověřeno dispečinkem' : 'Measurement verified'}
</div>
)}
</div>
);
}
@@ -162,7 +172,8 @@ const LakeDetail = ({ language, lakeId, windUnit = 'kmh' }: Props) => {
volume: item.volume || 0,
fullness: 0,
temperature: item.temperature,
precipitation: item.precipitation === null ? undefined : item.precipitation
precipitation: item.precipitation === null ? undefined : item.precipitation,
qn: item.qn || ''
};
});
setData(formattedData);
@@ -350,9 +361,38 @@ const LakeDetail = ({ language, lakeId, windUnit = 'kmh' }: Props) => {
</>
)}
<div style={{ color: 'var(--text-muted)', fontSize: '0.9rem', marginTop: '-0.5rem', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
<div style={{ color: 'var(--text-muted)', fontSize: '0.9rem', marginTop: '-0.5rem', display: 'flex', alignItems: 'center', gap: '0.75rem', flexWrap: 'wrap' }}>
<span>{topbarDict.updated} {new Date().toLocaleDateString(language === 'cs' ? 'cs-CZ' : 'en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' })}, {new Date().toLocaleTimeString(language === 'cs' ? 'cs-CZ' : 'en-GB', { hour: '2-digit', minute: '2-digit' })} UTC</span>
<div className="status-dot"></div>
{latestData.qn ? (
<span style={{
fontSize: '0.75rem',
padding: '0.15rem 0.4rem',
borderRadius: '4px',
backgroundColor: 'rgba(245, 158, 11, 0.1)',
color: '#f59e0b',
border: '1px solid rgba(245, 158, 11, 0.2)',
display: 'inline-flex',
alignItems: 'center',
gap: '0.25rem'
}}>
{language === 'cs' ? `Neověřená data (QN: ${latestData.qn})` : `Unverified data (QN: ${latestData.qn})`}
</span>
) : (
<span style={{
fontSize: '0.75rem',
padding: '0.15rem 0.4rem',
borderRadius: '4px',
backgroundColor: 'rgba(34, 197, 94, 0.1)',
color: 'var(--color-green)',
border: '1px solid rgba(34, 197, 94, 0.2)',
display: 'inline-flex',
alignItems: 'center',
gap: '0.25rem'
}}>
{language === 'cs' ? 'Ověřená data dispečinkem' : 'Data verified by dispatch'}
</span>
)}
</div>
<div className="kpi-grid-container">