feat: implement weather radar component and update water resource data records. before river

This commit is contained in:
David Fencl
2026-06-06 21:04:19 +02:00
parent 231961da19
commit ec540e056d
49 changed files with 1038 additions and 198 deletions
+10 -1
View File
@@ -6800,7 +6800,16 @@
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 19, "temperature": 20.2,
"precipitation": 0.1
},
{
"timestamp": "2026-06-06T18:45:00.000Z",
"level": 463.42,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 18.5,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 521.29, "level": 521.29,
"flow": 0.65, "flow": 0.65,
"inflow": 0,
"volume": 0,
"temperature": 18.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 521.29,
"flow": 0.64,
"inflow": 0,
"volume": 0,
"temperature": 18.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 521.29,
"flow": 0.63,
"inflow": 0,
"volume": 0,
"temperature": 18.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 521.29,
"flow": 0.63,
"inflow": 0.92, "inflow": 0.92,
"volume": 2.44, "volume": 2.44,
"temperature": 17.2, "temperature": 16.7,
"precipitation": 0 "precipitation": 0
} }
] ]
+10 -1
View File
@@ -6826,8 +6826,17 @@
"level": 416.74, "level": 416.74,
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 20.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 416.74,
"flow": 0,
"inflow": 0,
"volume": 0.09, "volume": 0.09,
"temperature": 18.8, "temperature": 18,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6826,8 +6826,26 @@
"level": 448.82, "level": 448.82,
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 20.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 448.82,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 20.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 448.82,
"flow": 0,
"inflow": 0,
"volume": 0.67, "volume": 0.67,
"temperature": 18.8, "temperature": 18,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6781,8 +6781,35 @@
"level": 581.35, "level": 581.35,
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 19.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:10:00.000Z",
"level": 581.35,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 19.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:20:00.000Z",
"level": 581.35,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 19.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 581.34,
"flow": 0,
"inflow": 0,
"volume": 0.04, "volume": 0.04,
"temperature": 18.3, "temperature": 17.5,
"precipitation": 0 "precipitation": 0
} }
] ]
+20 -2
View File
@@ -6806,7 +6806,7 @@
{ {
"timestamp": "2026-06-06T18:10:00.000Z", "timestamp": "2026-06-06T18:10:00.000Z",
"level": 447.02, "level": 447.02,
"flow": 0, "flow": 0.24,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 19.9, "temperature": 19.9,
@@ -6815,10 +6815,28 @@
{ {
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 447.02, "level": 447.02,
"flow": 0.25,
"inflow": 0,
"volume": 0,
"temperature": 19.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 447.02,
"flow": 0.26,
"inflow": 0,
"volume": 0,
"temperature": 19.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 447.02,
"flow": 0, "flow": 0,
"inflow": 1.08, "inflow": 1.08,
"volume": 1.65, "volume": 1.65,
"temperature": 18.5, "temperature": 17.8,
"precipitation": 0 "precipitation": 0
} }
] ]
+20 -2
View File
@@ -6815,7 +6815,7 @@
{ {
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 407.64, "level": 407.64,
"flow": 0, "flow": 0.2,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 19.4, "temperature": 19.4,
@@ -6824,10 +6824,28 @@
{ {
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 407.64, "level": 407.64,
"flow": 0.2,
"inflow": 0,
"volume": 0,
"temperature": 19.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 407.64,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 19.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 407.64,
"flow": 0, "flow": 0,
"inflow": 0.42, "inflow": 0.42,
"volume": 0.14, "volume": 0.14,
"temperature": 17.9, "temperature": 17.3,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 292.9, "level": 292.9,
"flow": 0.02, "flow": 0.02,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 292.9,
"flow": 0.02,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 292.9,
"flow": 0.02,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 0,
"flow": 0.02,
"inflow": 0.01, "inflow": 0.01,
"volume": 7.49, "volume": 7.49,
"temperature": 19.1, "temperature": 18.3,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6782,7 +6782,34 @@
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 17.8, "temperature": 18.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:10:00.000Z",
"level": 632.77,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 18.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:20:00.000Z",
"level": 632.77,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 18.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 632.77,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 17.4,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6782,7 +6782,34 @@
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 18.1, "temperature": 18.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:10:00.000Z",
"level": 635.7,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 18.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:20:00.000Z",
"level": 635.7,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 18.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 635.7,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 17.7,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 345, "level": 345,
"flow": 1.5, "flow": 1.5,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 345,
"flow": 1.5,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 345,
"flow": 1.5,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 345,
"flow": 1.5,
"inflow": 1.06, "inflow": 1.06,
"volume": 0.66, "volume": 0.66,
"temperature": 20.3, "temperature": 20,
"precipitation": 0 "precipitation": 0
} }
] ]
+10 -1
View File
@@ -6825,9 +6825,18 @@
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 640.67, "level": 640.67,
"flow": 0.01, "flow": 0.01,
"inflow": 0,
"volume": 0,
"temperature": 18.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 640.67,
"flow": 0.01,
"inflow": 0.02, "inflow": 0.02,
"volume": 0.73, "volume": 0.73,
"temperature": 17.8, "temperature": 17.6,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -7130,10 +7130,37 @@
{ {
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 467.75, "level": 467.75,
"flow": 0.7,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 467.75,
"flow": 0.7,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 467.76,
"flow": 0.7,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 467.76,
"flow": 0, "flow": 0,
"inflow": 2.24, "inflow": 2.24,
"volume": 26.54, "volume": 26.54,
"temperature": 19.4, "temperature": 18.8,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -7140,9 +7140,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 352.83, "level": 352.83,
"flow": 2.52, "flow": 2.52,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 352.84,
"flow": 2.52,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 352.84,
"flow": 2.52,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 352.83,
"flow": 0,
"inflow": 1.47, "inflow": 1.47,
"volume": 32.28, "volume": 32.28,
"temperature": 20.1, "temperature": 19.8,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 530.7, "level": 530.7,
"flow": 0.49, "flow": 0.49,
"inflow": 0,
"volume": 0,
"temperature": 19.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 530.7,
"flow": 0.49,
"inflow": 0,
"volume": 0,
"temperature": 19.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 530.7,
"flow": 0.49,
"inflow": 0,
"volume": 0,
"temperature": 19.4,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 530.7,
"flow": 0.49,
"inflow": 0.48, "inflow": 0.48,
"volume": 2.94, "volume": 2.94,
"temperature": 18.3, "temperature": 17.9,
"precipitation": 0 "precipitation": 0
} }
] ]
+11 -2
View File
@@ -6823,11 +6823,20 @@
}, },
{ {
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 0, "level": 563.67,
"flow": 0.01,
"inflow": 0,
"volume": 0,
"temperature": 19.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 563.67,
"flow": 0.01, "flow": 0.01,
"inflow": 0.02, "inflow": 0.02,
"volume": 0.46, "volume": 0.46,
"temperature": 18.3, "temperature": 17.8,
"precipitation": 0 "precipitation": 0
} }
] ]
+1 -1
View File
@@ -6746,7 +6746,7 @@
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 17.6, "temperature": 17.1,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 313.39, "level": 313.39,
"flow": 2.84, "flow": 2.84,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 313.39,
"flow": 1.21,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 313.39,
"flow": 1.07,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 0,
"flow": 1.06,
"inflow": 1.27, "inflow": 1.27,
"volume": 2.9, "volume": 2.9,
"temperature": 20.9, "temperature": 20.4,
"precipitation": 0 "precipitation": 0
} }
] ]
+10 -1
View File
@@ -6826,8 +6826,17 @@
"level": 575.72, "level": 575.72,
"flow": 0.02, "flow": 0.02,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 19,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 575.72,
"flow": 0.02,
"inflow": 0,
"volume": 1.07, "volume": 1.07,
"temperature": 17.8, "temperature": 17.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6823,11 +6823,29 @@
}, },
{ {
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 534.62,
"flow": 0.06,
"inflow": 0,
"volume": 0,
"temperature": 20.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 534.62,
"flow": 0.06,
"inflow": 0,
"volume": 0,
"temperature": 20.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 0, "level": 0,
"flow": 0.06, "flow": 0.06,
"inflow": 0.11, "inflow": 0.11,
"volume": 0.09, "volume": 0.09,
"temperature": 18.4, "temperature": 17.6,
"precipitation": 0 "precipitation": 0
} }
] ]
+10 -1
View File
@@ -6825,9 +6825,18 @@
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 260.09, "level": 260.09,
"flow": 0.06, "flow": 0.06,
"inflow": 0,
"volume": 0,
"temperature": 21.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 260.09,
"flow": 0.06,
"inflow": 0.1, "inflow": 0.1,
"volume": 0.41, "volume": 0.41,
"temperature": 19.7, "temperature": 19.1,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6817,8 +6817,26 @@
"level": 668.4, "level": 668.4,
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 19.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 668.4,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 19.5,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 668.4,
"flow": 0,
"inflow": 0,
"volume": 0.39, "volume": 0.39,
"temperature": 18.5, "temperature": 18,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6826,8 +6826,26 @@
"level": 385.01, "level": 385.01,
"flow": 0.03, "flow": 0.03,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 19.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 385.01,
"flow": 0.03,
"inflow": 0,
"volume": 0,
"temperature": 19.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 385.01,
"flow": 0.03,
"inflow": 0,
"volume": 0.84, "volume": 0.84,
"temperature": 18.2, "temperature": 17.4,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6817,8 +6817,26 @@
"level": 678.61, "level": 678.61,
"flow": 0, "flow": 0,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 17,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 678.61,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 17,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 678.61,
"flow": 0,
"inflow": 0,
"volume": 0.16, "volume": 0.16,
"temperature": 15.9, "temperature": 15.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6817,8 +6817,26 @@
"level": 588.42, "level": 588.42,
"flow": 0.08, "flow": 0.08,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 19.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 588.42,
"flow": 0.08,
"inflow": 0,
"volume": 0,
"temperature": 19.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 588.42,
"flow": 0.08,
"inflow": 0,
"volume": 0.33, "volume": 0.33,
"temperature": 18.2, "temperature": 17.5,
"precipitation": 0 "precipitation": 0
} }
] ]
+10 -1
View File
@@ -6825,9 +6825,18 @@
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 505.67, "level": 505.67,
"flow": 0.22, "flow": 0.22,
"inflow": 0,
"volume": 0,
"temperature": 19.6,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 505.67,
"flow": 0.22,
"inflow": 0.1, "inflow": 0.1,
"volume": 9.32, "volume": 9.32,
"temperature": 18.4, "temperature": 17.9,
"precipitation": 0 "precipitation": 0
} }
] ]
+11 -2
View File
@@ -6823,11 +6823,20 @@
}, },
{ {
"timestamp": "2026-06-06T18:30:00.000Z", "timestamp": "2026-06-06T18:30:00.000Z",
"level": 0, "level": 580.54,
"flow": 0.05,
"inflow": 0,
"volume": 0,
"temperature": 18.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 580.54,
"flow": 0.05, "flow": 0.05,
"inflow": 0, "inflow": 0,
"volume": 0.41, "volume": 0.41,
"temperature": 17.6, "temperature": 17,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6816,9 +6816,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 412.8, "level": 412.8,
"flow": 0.34, "flow": 0.34,
"inflow": 0,
"volume": 0,
"temperature": 20.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 412.8,
"flow": 0.33,
"inflow": 0,
"volume": 0,
"temperature": 20.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 412.8,
"flow": 0.34,
"inflow": 0,
"volume": 0,
"temperature": 20.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 412.8,
"flow": 0.34,
"inflow": 0.46, "inflow": 0.46,
"volume": 5.16, "volume": 5.16,
"temperature": 18.7, "temperature": 18,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6816,9 +6816,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 520.35, "level": 520.35,
"flow": 0.72, "flow": 0.72,
"inflow": 0,
"volume": 0,
"temperature": 17.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 520.35,
"flow": 0.72,
"inflow": 0,
"volume": 0,
"temperature": 17.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 520.35,
"flow": 0.71,
"inflow": 0.68, "inflow": 0.68,
"volume": 15.35, "volume": 15.35,
"temperature": 16.5, "temperature": 16.3,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -7141,8 +7141,26 @@
"level": 369.81, "level": 369.81,
"flow": 14.21, "flow": 14.21,
"inflow": 0, "inflow": 0,
"volume": 0,
"temperature": 20.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 369.81,
"flow": 14.21,
"inflow": 0,
"volume": 0,
"temperature": 20.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 369.82,
"flow": 14.21,
"inflow": 0,
"volume": 20.32, "volume": 20.32,
"temperature": 19.8, "temperature": 19.1,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6816,9 +6816,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 282.99, "level": 282.99,
"flow": 397.75, "flow": 397.75,
"inflow": 0,
"volume": 0,
"temperature": 21.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 283.08,
"flow": 399.85,
"inflow": 0,
"volume": 0,
"temperature": 21.7,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 283.17,
"flow": 401,
"inflow": 85.78, "inflow": 85.78,
"volume": 10.12, "volume": 10.12,
"temperature": 19.8, "temperature": 18.9,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -7140,9 +7140,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 352.43, "level": 352.43,
"flow": 19.05, "flow": 19.05,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 352.43,
"flow": 19.05,
"inflow": 0,
"volume": 0,
"temperature": 20.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 352.43,
"flow": 19.05,
"inflow": 13.43, "inflow": 13.43,
"volume": 2.74, "volume": 2.74,
"temperature": 19.8, "temperature": 19.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -7140,9 +7140,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 723.1, "level": 723.1,
"flow": 45.19, "flow": 45.19,
"inflow": 0,
"volume": 0,
"temperature": 19.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 723.1,
"flow": 38.81,
"inflow": 0,
"volume": 0,
"temperature": 19.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 723.1,
"flow": 38.84,
"inflow": 9.25, "inflow": 9.25,
"volume": 199.28, "volume": 199.28,
"temperature": 17.9, "temperature": 17.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+21 -3
View File
@@ -7121,7 +7121,7 @@
{ {
"timestamp": "2026-06-06T18:00:00.000Z", "timestamp": "2026-06-06T18:00:00.000Z",
"level": 558.61, "level": 558.61,
"flow": 0, "flow": 7.53,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 19.8, "temperature": 19.8,
@@ -7130,7 +7130,7 @@
{ {
"timestamp": "2026-06-06T18:10:00.000Z", "timestamp": "2026-06-06T18:10:00.000Z",
"level": 558.77, "level": 558.77,
"flow": 0, "flow": 7.53,
"inflow": 0, "inflow": 0,
"volume": 0, "volume": 0,
"temperature": 19.8, "temperature": 19.8,
@@ -7139,10 +7139,28 @@
{ {
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 558.92, "level": 558.92,
"flow": 7.53,
"inflow": 0,
"volume": 0,
"temperature": 19.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 559.05,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 19.8,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 559.16,
"flow": 0, "flow": 0,
"inflow": 5.37, "inflow": 5.37,
"volume": 0.38, "volume": 0.38,
"temperature": 18.1, "temperature": 17.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -7140,9 +7140,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 345.25, "level": 345.25,
"flow": 459.43, "flow": 459.43,
"inflow": 0,
"volume": 0,
"temperature": 21.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 345.25,
"flow": 460,
"inflow": 0,
"volume": 0,
"temperature": 21.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 345.24,
"flow": 458.76,
"inflow": 0,
"volume": 0,
"temperature": 21.2,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 345.23,
"flow": 0,
"inflow": 24.39, "inflow": 24.39,
"volume": 522.52, "volume": 522.52,
"temperature": 20.6, "temperature": 20.2,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -7140,9 +7140,36 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 269.86, "level": 269.86,
"flow": 294.34, "flow": 294.34,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 269.85,
"flow": 294.17,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 269.84,
"flow": 296.4,
"inflow": 0,
"volume": 0,
"temperature": 21.9,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 269.81,
"flow": 0,
"inflow": 81.06, "inflow": 81.06,
"volume": 260.87, "volume": 260.87,
"temperature": 20.2, "temperature": 19.5,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -7140,9 +7140,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 217.24, "level": 217.24,
"flow": 150.52, "flow": 150.52,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 217.36,
"flow": 150.46,
"inflow": 0,
"volume": 0,
"temperature": 21,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 217.36,
"flow": 150.31,
"inflow": 48.25, "inflow": 48.25,
"volume": 8.22, "volume": 8.22,
"temperature": 19.5, "temperature": 18.9,
"precipitation": 0 "precipitation": 0
} }
] ]
+19 -1
View File
@@ -6816,9 +6816,27 @@
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 199.5, "level": 199.5,
"flow": 39.53, "flow": 39.53,
"inflow": 0,
"volume": 0,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 199.48,
"flow": 39.56,
"inflow": 0,
"volume": 0,
"temperature": 22.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 199.48,
"flow": 39.54,
"inflow": 45, "inflow": 45,
"volume": 9.49, "volume": 9.49,
"temperature": 20.1, "temperature": 19.3,
"precipitation": 0 "precipitation": 0
} }
] ]
+28 -1
View File
@@ -6815,10 +6815,37 @@
{ {
"timestamp": "2026-06-06T18:20:00.000Z", "timestamp": "2026-06-06T18:20:00.000Z",
"level": 375.15, "level": 375.15,
"flow": 0.44,
"inflow": 0,
"volume": 0,
"temperature": 21.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:30:00.000Z",
"level": 375.15,
"flow": 0.44,
"inflow": 0,
"volume": 0,
"temperature": 21.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:40:00.000Z",
"level": 375.15,
"flow": 0,
"inflow": 0,
"volume": 0,
"temperature": 21.1,
"precipitation": 0
},
{
"timestamp": "2026-06-06T18:50:00.000Z",
"level": 375.15,
"flow": 0, "flow": 0,
"inflow": 1.87, "inflow": 1.87,
"volume": 240.94, "volume": 240.94,
"temperature": 20, "temperature": 19.6,
"precipitation": 0 "precipitation": 0
} }
] ]
+89 -89
View File
@@ -8,15 +8,13 @@
"capacity": 65.1, "capacity": 65.1,
"storageDiff": -1.8, "storageDiff": -1.8,
"inflow": "9.3", "inflow": "9.3",
"outflow": "45.2", "outflow": "38.8",
"volume": 199.28, "volume": 199.28,
"maxVolume": 306, "maxVolume": 306,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 48.6322, "lat": 48.6322,
"lng": 14.2215, "lng": 14.2215,
"sparkline": [ "sparkline": [
723.09,
723.09,
723.09, 723.09,
723.09, 723.09,
723.09, 723.09,
@@ -26,6 +24,8 @@
723.08, 723.08,
723.08, 723.08,
723.1, 723.1,
723.1,
723.1,
723.1 723.1
] ]
}, },
@@ -34,9 +34,9 @@
"name": "Lipno II", "name": "Lipno II",
"river": "Vltava", "river": "Vltava",
"priority": true, "priority": true,
"level": "558.92", "level": "559.16",
"capacity": 23.8, "capacity": 23.8,
"storageDiff": -3.78, "storageDiff": -3.54,
"inflow": "5.4", "inflow": "5.4",
"outflow": "0.0", "outflow": "0.0",
"volume": 0.38, "volume": 0.38,
@@ -45,8 +45,6 @@
"lat": 48.625, "lat": 48.625,
"lng": 14.318, "lng": 14.318,
"sparkline": [ "sparkline": [
558.38,
558.37,
558.33, 558.33,
558.21, 558.21,
558.19, 558.19,
@@ -56,7 +54,9 @@
558.45, 558.45,
558.61, 558.61,
558.77, 558.77,
558.92 558.92,
559.05,
559.16
] ]
}, },
{ {
@@ -64,9 +64,9 @@
"name": "Hněvkovice", "name": "Hněvkovice",
"river": "Vltava", "river": "Vltava",
"priority": true, "priority": true,
"level": "369.81", "level": "369.82",
"capacity": 96.3, "capacity": 96.3,
"storageDiff": -0.29, "storageDiff": -0.28,
"inflow": "0.0", "inflow": "0.0",
"outflow": "14.2", "outflow": "14.2",
"volume": 20.32, "volume": 20.32,
@@ -75,8 +75,6 @@
"lat": 49.183, "lat": 49.183,
"lng": 14.444, "lng": 14.444,
"sparkline": [ "sparkline": [
369.83,
369.83,
369.82, 369.82,
369.82, 369.82,
369.82, 369.82,
@@ -86,7 +84,9 @@
369.81, 369.81,
369.81, 369.81,
369.81, 369.81,
369.81 369.81,
369.81,
369.82
] ]
}, },
{ {
@@ -124,20 +124,17 @@
"name": "Orlík", "name": "Orlík",
"river": "Vltava", "river": "Vltava",
"priority": true, "priority": true,
"level": "345.25", "level": "345.23",
"capacity": 72.9, "capacity": 72.9,
"storageDiff": -4.65, "storageDiff": -4.67,
"inflow": "24.4", "inflow": "24.4",
"outflow": "459.4", "outflow": "0.0",
"volume": 522.52, "volume": 522.52,
"maxVolume": 716.5, "maxVolume": 716.5,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.606, "lat": 49.606,
"lng": 14.17, "lng": 14.17,
"sparkline": [ "sparkline": [
345.29,
345.29,
345.3,
345.3, 345.3,
345.3, 345.3,
345.29, 345.29,
@@ -146,7 +143,10 @@
345.28, 345.28,
345.28, 345.28,
345.26, 345.26,
345.25 345.25,
345.25,
345.24,
345.23
] ]
}, },
{ {
@@ -154,20 +154,17 @@
"name": "Slapy", "name": "Slapy",
"river": "Vltava", "river": "Vltava",
"priority": true, "priority": true,
"level": "269.86", "level": "269.81",
"capacity": 96.9, "capacity": 96.9,
"storageDiff": -0.74, "storageDiff": -0.79,
"inflow": "81.1", "inflow": "81.1",
"outflow": "294.3", "outflow": "0.0",
"volume": 260.87, "volume": 260.87,
"maxVolume": 269.3, "maxVolume": 269.3,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.822, "lat": 49.822,
"lng": 14.436, "lng": 14.436,
"sparkline": [ "sparkline": [
269.88,
269.89,
269.89,
269.88, 269.88,
269.88, 269.88,
269.88, 269.88,
@@ -176,7 +173,10 @@
269.88, 269.88,
269.86, 269.86,
269.85, 269.85,
269.86 269.86,
269.85,
269.84,
269.81
] ]
}, },
{ {
@@ -184,19 +184,17 @@
"name": "Štěchovice", "name": "Štěchovice",
"river": "Vltava", "river": "Vltava",
"priority": true, "priority": true,
"level": "217.24", "level": "217.36",
"capacity": 73.4, "capacity": 73.4,
"storageDiff": -2.16, "storageDiff": -2.04,
"inflow": "48.3", "inflow": "48.3",
"outflow": "150.5", "outflow": "150.3",
"volume": 8.22, "volume": 8.22,
"maxVolume": 11.2, "maxVolume": 11.2,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.845, "lat": 49.845,
"lng": 14.412, "lng": 14.412,
"sparkline": [ "sparkline": [
216.94,
216.95,
216.93, 216.93,
216.94, 216.94,
216.93, 216.93,
@@ -206,7 +204,9 @@
217.02, 217.02,
217.04, 217.04,
216.99, 216.99,
217.24 217.24,
217.36,
217.36
] ]
}, },
{ {
@@ -214,9 +214,9 @@
"name": "Římov", "name": "Římov",
"river": "Malše", "river": "Malše",
"priority": true, "priority": true,
"level": "467.75", "level": "467.76",
"capacity": 78.5, "capacity": 78.5,
"storageDiff": -2.9, "storageDiff": -2.89,
"inflow": "2.2", "inflow": "2.2",
"outflow": "0.0", "outflow": "0.0",
"volume": 26.54, "volume": 26.54,
@@ -232,11 +232,11 @@
467.75, 467.75,
467.75, 467.75,
467.75, 467.75,
467.75, 467.76,
467.75, 467.75,
467.75, 467.75,
467.76, 467.76,
467.75 467.76
] ]
}, },
{ {
@@ -248,16 +248,13 @@
"capacity": 56.9, "capacity": 56.9,
"storageDiff": -1.27, "storageDiff": -1.27,
"inflow": "1.5", "inflow": "1.5",
"outflow": "2.5", "outflow": "0.0",
"volume": 32.28, "volume": 32.28,
"maxVolume": 56.7, "maxVolume": 56.7,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.789, "lat": 49.789,
"lng": 13.155, "lng": 13.155,
"sparkline": [ "sparkline": [
352.84,
352.84,
352.84,
352.83, 352.83,
352.83, 352.83,
352.83, 352.83,
@@ -266,6 +263,9 @@
352.84, 352.84,
352.83, 352.83,
352.83, 352.83,
352.83,
352.84,
352.84,
352.83 352.83
] ]
}, },
@@ -304,19 +304,17 @@
"name": "Kamýk", "name": "Kamýk",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "282.99", "level": "283.17",
"capacity": 79.1, "capacity": 79.1,
"storageDiff": -1.61, "storageDiff": -1.43,
"inflow": "85.8", "inflow": "85.8",
"outflow": "397.8", "outflow": "401.0",
"volume": 10.12, "volume": 10.12,
"maxVolume": 12.8, "maxVolume": 12.8,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.638, "lat": 49.638,
"lng": 14.258, "lng": 14.258,
"sparkline": [ "sparkline": [
282.96,
282.97,
282.96, 282.96,
282.97, 282.97,
282.95, 282.95,
@@ -326,7 +324,9 @@
283.12, 283.12,
283.1, 283.1,
282.97, 282.97,
282.99 282.99,
283.08,
283.17
] ]
}, },
{ {
@@ -334,9 +334,9 @@
"name": "Vrané", "name": "Vrané",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "199.50", "level": "199.48",
"capacity": 85.5, "capacity": 85.5,
"storageDiff": -0.6, "storageDiff": -0.62,
"inflow": "45.0", "inflow": "45.0",
"outflow": "39.5", "outflow": "39.5",
"volume": 9.49, "volume": 9.49,
@@ -345,8 +345,6 @@
"lat": 49.939, "lat": 49.939,
"lng": 14.391, "lng": 14.391,
"sparkline": [ "sparkline": [
199.65,
199.57,
199.51, 199.51,
199.48, 199.48,
199.47, 199.47,
@@ -356,7 +354,9 @@
199.45, 199.45,
199.47, 199.47,
199.48, 199.48,
199.5 199.5,
199.48,
199.48
] ]
}, },
{ {
@@ -368,15 +368,15 @@
"capacity": 42.8, "capacity": 42.8,
"storageDiff": -1.04, "storageDiff": -1.04,
"inflow": "0.9", "inflow": "0.9",
"outflow": "0.7", "outflow": "0.6",
"volume": 2.44, "volume": 2.44,
"maxVolume": 5.7, "maxVolume": 5.7,
"navigationForbidden": true, "navigationForbidden": true,
"lat": 49.027, "lat": 49.027,
"lng": 13.987, "lng": 13.987,
"sparkline": [ "sparkline": [
521.28, 521.29,
521.28, 521.29,
521.29, 521.29,
521.29, 521.29,
521.29, 521.29,
@@ -424,9 +424,9 @@
"name": "Klíčava", "name": "Klíčava",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "292.90", "level": "0.00",
"capacity": 80.5, "capacity": 80.5,
"storageDiff": -0.8, "storageDiff": 0,
"inflow": "0.0", "inflow": "0.0",
"outflow": "0.0", "outflow": "0.0",
"volume": 7.49, "volume": 7.49,
@@ -446,7 +446,7 @@
292.9, 292.9,
292.9, 292.9,
292.9, 292.9,
292.9 0
] ]
}, },
{ {
@@ -465,9 +465,6 @@
"lat": 49.754, "lat": 49.754,
"lng": 13.564, "lng": 13.564,
"sparkline": [ "sparkline": [
345.03,
345.03,
345.02,
345.01, 345.01,
345.01, 345.01,
345.01, 345.01,
@@ -476,6 +473,9 @@
345, 345,
345, 345,
345, 345,
345,
345,
345,
345 345
] ]
}, },
@@ -484,20 +484,17 @@
"name": "České Údolí", "name": "České Údolí",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "313.39", "level": "0.00",
"capacity": 52.7, "capacity": 52.7,
"storageDiff": -0.21, "storageDiff": 0,
"inflow": "1.3", "inflow": "1.3",
"outflow": "2.8", "outflow": "1.1",
"volume": 2.9, "volume": 2.9,
"maxVolume": 5.5, "maxVolume": 5.5,
"navigationForbidden": false, "navigationForbidden": false,
"lat": 49.715, "lat": 49.715,
"lng": 13.364, "lng": 13.364,
"sparkline": [ "sparkline": [
313.41,
313.41,
313.4,
313.4, 313.4,
313.39, 313.39,
313.39, 313.39,
@@ -506,7 +503,10 @@
0, 0,
313.39, 313.39,
313.39, 313.39,
313.39 313.39,
313.39,
313.39,
0
] ]
}, },
{ {
@@ -526,7 +526,7 @@
"lng": 15.195, "lng": 15.195,
"sparkline": [ "sparkline": [
412.8, 412.8,
412.79, 412.8,
412.8, 412.8,
412.8, 412.8,
412.8, 412.8,
@@ -555,8 +555,6 @@
"lat": 49.507, "lat": 49.507,
"lng": 15.263, "lng": 15.263,
"sparkline": [ "sparkline": [
447,
447.01,
447.01, 447.01,
447.01, 447.01,
447.02, 447.02,
@@ -566,6 +564,8 @@
447.02, 447.02,
447.02, 447.02,
447.02, 447.02,
447.02,
447.02,
447.02 447.02
] ]
}, },
@@ -694,9 +694,9 @@
"name": "Obecnice", "name": "Obecnice",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "0.00", "level": "563.67",
"capacity": 76.7, "capacity": 76.7,
"storageDiff": 0, "storageDiff": -0.88,
"inflow": "0.0", "inflow": "0.0",
"outflow": "0.0", "outflow": "0.0",
"volume": 0.46, "volume": 0.46,
@@ -708,7 +708,6 @@
563.67, 563.67,
563.67, 563.67,
563.67, 563.67,
563.67,
0, 0,
0, 0,
0, 0,
@@ -716,7 +715,8 @@
563.67, 563.67,
563.67, 563.67,
563.67, 563.67,
0 563.67,
563.67
] ]
}, },
{ {
@@ -735,8 +735,6 @@
"lat": 49.791, "lat": 49.791,
"lng": 14.004, "lng": 14.004,
"sparkline": [ "sparkline": [
588.43,
588.42,
588.42, 588.42,
588.42, 588.42,
588.42, 588.42,
@@ -746,6 +744,8 @@
0, 0,
588.42, 588.42,
588.42, 588.42,
588.42,
588.42,
588.42 588.42
] ]
}, },
@@ -784,9 +784,9 @@
"name": "Soběnov", "name": "Soběnov",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "581.35", "level": "581.34",
"capacity": 2.9, "capacity": 2.9,
"storageDiff": -0.86, "storageDiff": -0.87,
"inflow": "0.0", "inflow": "0.0",
"outflow": "0.0", "outflow": "0.0",
"volume": 0.04, "volume": 0.04,
@@ -795,9 +795,6 @@
"lat": 48.775, "lat": 48.775,
"lng": 14.536, "lng": 14.536,
"sparkline": [ "sparkline": [
581.45,
581.51,
581.58,
581.56, 581.56,
581.52, 581.52,
581.48, 581.48,
@@ -806,7 +803,10 @@
581.39, 581.39,
581.38, 581.38,
581.37, 581.37,
581.35 581.35,
581.35,
581.35,
581.34
] ]
}, },
{ {
@@ -830,12 +830,12 @@
534.61, 534.61,
534.61, 534.61,
534.61, 534.61,
534.61,
534.61,
0, 0,
534.62, 534.62,
534.62, 534.62,
534.62, 534.62,
534.62,
534.62,
0 0
] ]
}, },
@@ -844,9 +844,9 @@
"name": "Staviště", "name": "Staviště",
"river": "", "river": "",
"priority": false, "priority": false,
"level": "0.00", "level": "580.54",
"capacity": 34.2, "capacity": 34.2,
"storageDiff": 0, "storageDiff": -0.06,
"inflow": "0.0", "inflow": "0.0",
"outflow": "0.1", "outflow": "0.1",
"volume": 0.41, "volume": 0.41,
@@ -861,12 +861,12 @@
580.54, 580.54,
580.54, 580.54,
580.54, 580.54,
580.54,
0, 0,
580.54, 580.54,
580.54, 580.54,
580.54, 580.54,
0 580.54,
580.54
] ]
}, },
{ {
+3 -3
View File
@@ -2,11 +2,11 @@ import { execSync } from 'child_process';
// How many minutes after the 10-minute mark should we run the scraper? // How many minutes after the 10-minute mark should we run the scraper?
// The basin authority (PVL) generates data at HH:00, HH:10, HH:20... but it takes time to publish. // The basin authority (PVL) generates data at HH:00, HH:10, HH:20... but it takes time to publish.
// 5 minutes (HH:05, HH:15...) is a safe buffer to avoid fetching outdated data. // 7 minutes (HH:07, HH:17...) is a safe buffer to avoid fetching outdated data.
const offsetMinutes = 5; const offsetMinutes = 7;
console.log(`\n⏱️ HLADINATOR Watcher spuštěn!`); console.log(`\n⏱️ HLADINATOR Watcher spuštěn!`);
console.log(`Budu automaticky stahovat nová data vždy v časech končících na ${offsetMinutes} (např. 10:05, 10:15, 10:25...).\nTo zajistí, že má Povodí dostatek času data vygenerovat a nahrát.\n`); console.log(`Budu automaticky stahovat nová data vždy v časech končících na ${offsetMinutes} (např. 10:07, 10:17, 10:27...).\nTo zajistí, že má Povodí dostatek času data vygenerovat a nahrát.\n`);
function runUpdate() { function runUpdate() {
const now = new Date().toLocaleTimeString('cs-CZ'); const now = new Date().toLocaleTimeString('cs-CZ');
+33 -29
View File
@@ -210,8 +210,13 @@
color: var(--text-muted); color: var(--text-muted);
} }
.kpi-trend.positive { color: var(--color-green); } .kpi-trend.positive {
.kpi-trend.negative { color: var(--color-red); } color: var(--color-green);
}
.kpi-trend.negative {
color: var(--color-red);
}
.chart-card { .chart-card {
background-color: var(--bg-card); background-color: var(--bg-card);
@@ -330,19 +335,19 @@
.mobile-only { .mobile-only {
display: flex !important; display: flex !important;
} }
.desktop-only { .desktop-only {
display: none !important; display: none !important;
} }
.dashboard-container { .dashboard-container {
flex-direction: column; flex-direction: column;
} }
.sidebar { .sidebar {
display: none; display: none;
} }
.sidebar.mobile-open { .sidebar.mobile-open {
display: flex; display: flex;
position: fixed; position: fixed;
@@ -351,108 +356,107 @@
height: 100vh; height: 100vh;
z-index: 1000; z-index: 1000;
} }
.main-content { .main-content {
padding: 1rem; padding: 1rem;
gap: 1rem; gap: 1rem;
} }
.topbar { .topbar {
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
gap: 1rem; gap: 1rem;
} }
.topbar-mobile-header { .topbar-mobile-header {
display: flex; display: flex;
width: 100%; width: 100%;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.search-bar { .search-bar {
width: 100%; width: 100%;
} }
.search-bar input { .search-bar input {
display: none; display: none;
} }
.search-bar { .search-bar {
width: auto; width: auto;
background: transparent; background: transparent;
border: none; border: none;
padding: 0; padding: 0;
} }
.search-bar svg { .search-bar svg {
margin: 0; margin: 0;
font-size: 1.5rem; font-size: 1.5rem;
color: var(--text-main); color: var(--text-main);
} }
.kpi-container { .kpi-container {
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
gap: 1rem; gap: 1rem;
} }
.kpi-card { .kpi-card {
padding: 1rem; padding: 1rem;
} }
.kpi-value { .kpi-value {
font-size: 1.75rem; font-size: 1.75rem;
} }
.kpi-subtitle { .kpi-subtitle {
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
gap: 0.2rem; gap: 0.2rem;
} }
.chart-card { .chart-card {
padding: 1rem; padding: 1rem;
} }
.chart-header { .chart-header {
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 1rem;
} }
.chart-title { .chart-title {
font-size: 1.1rem; font-size: 1.1rem;
line-height: 1.3; line-height: 1.3;
} }
.chart-controls { .chart-controls {
width: 100%; width: 100%;
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 1rem;
} }
.control-group { .control-group {
width: 100%; width: 100%;
} }
.button-group { .button-group {
width: 100%; width: 100%;
justify-content: space-between; justify-content: space-between;
} }
.control-btn { .control-btn {
padding: 0.5rem; padding: 0.5rem;
flex: 1; flex: 1;
text-align: center; text-align: center;
} }
.chart-legend-container { .chart-legend-container {
flex-wrap: wrap; flex-wrap: wrap;
gap: 1rem !important; gap: 1rem !important;
justify-content: flex-start !important; justify-content: flex-start !important;
} }
.chart-legend-container > span { .chart-legend-container>span {
flex: 0 0 calc(50% - 0.5rem); flex: 0 0 calc(50% - 0.5rem);
} }
} }
+4 -2
View File
@@ -4,6 +4,7 @@ import LakeDetail from './components/LakeDetail';
import LakesOverview from './components/LakesOverview'; import LakesOverview from './components/LakesOverview';
import LakeMap from './components/LakeMap'; import LakeMap from './components/LakeMap';
import FavoritesOverview from './components/FavoritesOverview'; import FavoritesOverview from './components/FavoritesOverview';
import WeatherRadar from './components/WeatherRadar';
import Sidebar from './components/Sidebar'; import Sidebar from './components/Sidebar';
import Topbar from './components/Topbar'; import Topbar from './components/Topbar';
import SettingsModal from './components/SettingsModal'; import SettingsModal from './components/SettingsModal';
@@ -79,9 +80,10 @@ function App() {
<Topbar language={language} onToggleMobileMenu={() => setIsMobileMenuOpen(!isMobileMenuOpen)} /> <Topbar language={language} onToggleMobileMenu={() => setIsMobileMenuOpen(!isMobileMenuOpen)} />
<div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}> <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>
<Routes> <Routes>
<Route path="/" element={<LakesOverview language={language} />} /> <Route path="/" element={<LakesOverview language={language} windUnit={windUnit} />} />
<Route path="/favorites" element={<FavoritesOverview language={language} />} /> <Route path="/favorites" element={<FavoritesOverview language={language} windUnit={windUnit} />} />
<Route path="/map" element={<LakeMap language={language} />} /> <Route path="/map" element={<LakeMap language={language} />} />
<Route path="/radar" element={<WeatherRadar language={language} />} />
<Route path="/:slug" element={<LakeDetailWrapper language={language} windUnit={windUnit} />} /> <Route path="/:slug" element={<LakeDetailWrapper language={language} windUnit={windUnit} />} />
</Routes> </Routes>
</div> </div>
+1
View File
@@ -29,6 +29,7 @@ interface Lake {
interface Props { interface Props {
language: Language; language: Language;
windUnit?: 'kmh' | 'ms';
} }
const FavoritesOverview = ({ language }: Props) => { const FavoritesOverview = ({ language }: Props) => {
+1
View File
@@ -28,6 +28,7 @@ interface Lake {
interface Props { interface Props {
language: Language; language: Language;
windUnit?: 'kmh' | 'ms';
} }
const LakeCard = ({ lake, language, isFav, onToggleFav }: { lake: Lake, language: Language, isFav: boolean, onToggleFav: (id: string) => void }) => { const LakeCard = ({ lake, language, isFav, onToggleFav }: { lake: Lake, language: Language, isFav: boolean, onToggleFav: (id: string) => void }) => {
+17 -10
View File
@@ -1,6 +1,6 @@
import { useState } from 'react'; import { useState } from 'react';
import { useNavigate, useLocation } from 'react-router-dom'; import { useNavigate, useLocation } from 'react-router-dom';
import { FiDroplet, FiStar, FiMap, FiSettings, FiChevronLeft, FiChevronRight, FiDatabase } from 'react-icons/fi'; import { FiDroplet, FiStar, FiMap, FiSettings, FiChevronLeft, FiChevronRight, FiDatabase, FiCloudRain } from 'react-icons/fi';
import { type Language, t } from '../translations'; import { type Language, t } from '../translations';
import { useFavorites } from '../hooks/useFavorites'; import { useFavorites } from '../hooks/useFavorites';
@@ -21,6 +21,7 @@ const Sidebar = ({ language, onOpenSettings, isMobileMenuOpen, onCloseMobileMenu
const isOverview = location.pathname === '/'; const isOverview = location.pathname === '/';
const isFavoritesPage = location.pathname === '/favorites'; const isFavoritesPage = location.pathname === '/favorites';
const isMap = location.pathname === '/map'; const isMap = location.pathname === '/map';
const isRadar = location.pathname === '/radar';
const handleNavigate = (path: string) => { const handleNavigate = (path: string) => {
navigate(path); navigate(path);
@@ -29,17 +30,17 @@ const Sidebar = ({ language, onOpenSettings, isMobileMenuOpen, onCloseMobileMenu
return ( return (
<div className={`sidebar ${isCollapsed ? 'collapsed' : ''} ${isMobileMenuOpen ? 'mobile-open' : ''}`}> <div className={`sidebar ${isCollapsed ? 'collapsed' : ''} ${isMobileMenuOpen ? 'mobile-open' : ''}`}>
<div className="sidebar-logo"> <div className="sidebar-logo" style={{ alignItems: 'center', gap: '0.4rem' }}>
<FiDroplet size={28} color="var(--color-cyan)" /> <FiDroplet size={34} color="var(--color-cyan)" style={{ marginLeft: '-4px', flexShrink: 0 }} />
<div className="sidebar-text"> <div className="sidebar-text" style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>
<span style={{ fontWeight: 'bold', letterSpacing: '0.5px', fontSize: '1.1rem' }}>HLADINATOR</span> <span style={{ fontWeight: 'bold', letterSpacing: '0.5px', fontSize: '1.15rem', lineHeight: 1 }}>HLADINATOR</span>
<small>v1.0</small> <small style={{ position: 'absolute', top: '100%', left: '2px', marginTop: '6px', lineHeight: 1, fontSize: '0.75rem', fontWeight: 'bold', color: 'var(--text-muted)' }}>v1.0</small>
</div> </div>
</div> </div>
{/* Toggle Button */} {/* Toggle Button */}
<div style={{ display: 'flex', justifyContent: isCollapsed ? 'center' : 'flex-end', marginBottom: '1.5rem', marginTop: isCollapsed ? '1rem' : '-0.5rem' }}> <div style={{ display: 'flex', justifyContent: isCollapsed ? 'center' : 'flex-end', marginBottom: '0.5rem', marginTop: isCollapsed ? '0.5rem' : '-1.5rem' }}>
<button <button
onClick={() => setIsCollapsed(!isCollapsed)} onClick={() => setIsCollapsed(!isCollapsed)}
style={{ style={{
background: 'var(--bg-card)', border: '1px solid var(--border-color)', color: 'var(--text-main)', background: 'var(--bg-card)', border: '1px solid var(--border-color)', color: 'var(--text-main)',
@@ -50,7 +51,7 @@ const Sidebar = ({ language, onOpenSettings, isMobileMenuOpen, onCloseMobileMenu
{isCollapsed ? <FiChevronRight size={18} /> : <FiChevronLeft size={18} />} {isCollapsed ? <FiChevronRight size={18} /> : <FiChevronLeft size={18} />}
</button> </button>
</div> </div>
<div className="nav-links"> <div className="nav-links">
{/* Favourites */} {/* Favourites */}
<div className={`nav-item ${isFavoritesPage ? 'active' : ''}`} onClick={() => handleNavigate('/favorites')} style={{ position: 'relative' }}> <div className={`nav-item ${isFavoritesPage ? 'active' : ''}`} onClick={() => handleNavigate('/favorites')} style={{ position: 'relative' }}>
@@ -92,6 +93,12 @@ const Sidebar = ({ language, onOpenSettings, isMobileMenuOpen, onCloseMobileMenu
<FiMap /> <FiMap />
<span className="sidebar-text">{dict.map}</span> <span className="sidebar-text">{dict.map}</span>
</div> </div>
{/* Radar */}
<div className={`nav-item ${isRadar ? 'active' : ''}`} onClick={() => handleNavigate('/radar')}>
<FiCloudRain />
<span className="sidebar-text">{dict.radar}</span>
</div>
</div> </div>
<div className="sidebar-footer"> <div className="sidebar-footer">
+66 -20
View File
@@ -8,6 +8,11 @@ interface Props {
export const Tooltip = ({ content, children }: Props) => { export const Tooltip = ({ content, children }: Props) => {
const [show, setShow] = useState(false); const [show, setShow] = useState(false);
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
const tooltipRef = useRef<HTMLDivElement>(null);
const [positionStyle, setPositionStyle] = useState<React.CSSProperties>({
left: '50%',
transform: 'translateX(-50%)',
});
useEffect(() => { useEffect(() => {
const handleClickOutside = (e: MouseEvent) => { const handleClickOutside = (e: MouseEvent) => {
@@ -19,6 +24,45 @@ export const Tooltip = ({ content, children }: Props) => {
return () => document.removeEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside);
}, []); }, []);
useEffect(() => {
if (!show) {
setPositionStyle({
left: '50%',
transform: 'translateX(-50%)',
});
return;
}
// Measure and adjust positioning to prevent overflow
const adjustPosition = () => {
if (tooltipRef.current) {
const rect = tooltipRef.current.getBoundingClientRect();
const windowWidth = window.innerWidth;
const padding = 12; // safety margin from screen edges
if (rect.right > windowWidth - padding) {
setPositionStyle({
right: '0px',
left: 'auto',
transform: 'none',
});
} else if (rect.left < padding) {
setPositionStyle({
left: '0px',
transform: 'none',
});
}
}
};
// Run adjustment immediately
adjustPosition();
// Also adjust on resize
window.addEventListener('resize', adjustPosition);
return () => window.removeEventListener('resize', adjustPosition);
}, [show]);
return ( return (
<div <div
ref={containerRef} ref={containerRef}
@@ -32,26 +76,28 @@ export const Tooltip = ({ content, children }: Props) => {
> >
{children} {children}
{show && ( {show && (
<div style={{ <div
position: 'absolute', ref={tooltipRef}
bottom: '100%', style={{
left: '50%', position: 'absolute',
transform: 'translateX(-50%)', bottom: '100%',
marginBottom: '8px', marginBottom: '8px',
backgroundColor: 'var(--bg-card)', backgroundColor: 'var(--bg-card)',
border: '1px solid var(--border-color)', border: '1px solid var(--border-color)',
padding: '0.5rem 0.75rem', padding: '0.5rem 0.75rem',
borderRadius: '8px', borderRadius: '8px',
width: 'max-content', width: 'max-content',
maxWidth: '220px', maxWidth: '220px',
zIndex: 9999, zIndex: 9999,
boxShadow: '0 4px 12px rgba(0,0,0,0.5)', boxShadow: '0 4px 12px rgba(0,0,0,0.5)',
color: 'var(--text-main)', color: 'var(--text-main)',
fontSize: '0.8rem', fontSize: '0.8rem',
lineHeight: 1.4, lineHeight: 1.4,
textAlign: 'center', textAlign: 'center',
pointerEvents: 'none' pointerEvents: 'none',
}}> ...positionStyle
}}
>
{content} {content}
</div> </div>
)} )}
+39
View File
@@ -0,0 +1,39 @@
import { Helmet } from 'react-helmet-async';
import { type Language, t } from '../translations';
interface Props {
language: Language;
}
const WeatherRadar = ({ language }: Props) => {
return (
<div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
<Helmet>
<title>{t[language].sidebar.radar} | Hladinátor</title>
</Helmet>
<div style={{ padding: '0 1.5rem 1rem' }}>
<h1 style={{ fontSize: '1.75rem', fontWeight: 'bold', margin: '0 0 0.5rem 0', color: 'var(--text-main)' }}>
{t[language].sidebar.radar}
</h1>
<p style={{ margin: 0, color: 'var(--text-muted)' }}>
{language === 'cs' ? 'Aktuální srážkový radar a předpověď počasí pro celou ČR.' : 'Current precipitation radar and weather forecast for the Czech Republic.'}
</p>
</div>
<div style={{ flex: 1, minHeight: '600px', borderRadius: '12px', overflow: 'hidden', margin: '0 1.5rem 1.5rem 1.5rem', border: '1px solid var(--border-color)', backgroundColor: 'var(--bg-card)' }}>
<iframe
width="100%"
height="100%"
src={`https://embed.windy.com/embed.html?type=map&location=coordinates&metricRain=mm&metricTemp=%C2%B0C&metricWind=km/h&zoom=7&overlay=radar&product=radar&level=surface&lat=49.8&lon=15.5&message=true&lang=${language}`}
frameBorder="0"
title="Windy Weather Radar"
style={{ display: 'block' }}
allowFullScreen
></iframe>
</div>
</div>
);
};
export default WeatherRadar;
+2
View File
@@ -6,6 +6,7 @@ export const t = {
favorites: 'Favorites', favorites: 'Favorites',
lakes: 'Lakes & Reservoirs', lakes: 'Lakes & Reservoirs',
map: 'Map', map: 'Map',
radar: 'Weather Radar',
settings: 'Settings' settings: 'Settings'
}, },
topbar: { topbar: {
@@ -78,6 +79,7 @@ export const t = {
favorites: 'Oblíbené', favorites: 'Oblíbené',
lakes: 'Jezera a nádrže', lakes: 'Jezera a nádrže',
map: 'Mapa', map: 'Mapa',
radar: 'Meteoradar',
settings: 'Nastavení' settings: 'Nastavení'
}, },
topbar: { topbar: {