diff --git a/public/data/MARI.json b/public/data/MARI.json index a25ae7f..ca6521c 100644 --- a/public/data/MARI.json +++ b/public/data/MARI.json @@ -7157,10 +7157,55 @@ { "timestamp": "2026-06-06T09:30:00.000Z", "level": 467.74, + "flow": 0.7, + "inflow": 0, + "volume": 0, + "temperature": 17.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 467.74, + "flow": 0.7, + "inflow": 0, + "volume": 0, + "temperature": 17.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 467.74, "flow": 0, "inflow": 2.24, "volume": 26.53, - "temperature": 18.8, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 467.74, + "flow": 0.7, + "inflow": 0, + "volume": 0, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 467.74, + "flow": 0.7, + "inflow": 0, + "volume": 0, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 467.74, + "flow": 0, + "inflow": 2.24, + "volume": 26.53, + "temperature": 19.9, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/MZHR.json b/public/data/MZHR.json index 2387786..42cc679 100644 --- a/public/data/MZHR.json +++ b/public/data/MZHR.json @@ -7157,10 +7157,55 @@ { "timestamp": "2026-06-06T09:30:00.000Z", "level": 352.84, + "flow": 2.53, + "inflow": 0, + "volume": 0, + "temperature": 17.8, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 352.84, + "flow": 2.53, + "inflow": 0, + "volume": 0, + "temperature": 17.8, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 352.84, "flow": 0, "inflow": 1.47, "volume": 32.32, - "temperature": 19, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 352.84, + "flow": 2.53, + "inflow": 0, + "volume": 0, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 352.84, + "flow": 2.53, + "inflow": 0, + "volume": 0, + "temperature": 19.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 352.84, + "flow": 2.52, + "inflow": 1.47, + "volume": 32.3, + "temperature": 20, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLHN.json b/public/data/VLHN.json index fde004a..8eac817 100644 --- a/public/data/VLHN.json +++ b/public/data/VLHN.json @@ -7195,8 +7195,53 @@ "level": 369.83, "flow": 2.5, "inflow": 0, + "volume": 0, + "temperature": 18, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 369.83, + "flow": 2.5, + "inflow": 0, + "volume": 0, + "temperature": 18, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 369.84, + "flow": 2.5, + "inflow": 0, "volume": 20.36, - "temperature": 19.1, + "temperature": 19.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 369.84, + "flow": 2.5, + "inflow": 0, + "volume": 0, + "temperature": 19.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 369.84, + "flow": 2.5, + "inflow": 0, + "volume": 0, + "temperature": 19.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 369.84, + "flow": 2.5, + "inflow": 0, + "volume": 20.4, + "temperature": 20, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLKO.json b/public/data/VLKO.json index ead51bc..6a18cc9 100644 --- a/public/data/VLKO.json +++ b/public/data/VLKO.json @@ -7194,9 +7194,54 @@ "timestamp": "2026-06-06T09:30:00.000Z", "level": 352.53, "flow": 19.05, + "inflow": 0, + "volume": 0, + "temperature": 17.5, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 352.53, + "flow": 19.05, + "inflow": 0, + "volume": 0, + "temperature": 17.5, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 352.52, + "flow": 19.05, "inflow": 13.43, "volume": 2.78, - "temperature": 18.8, + "temperature": 19.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 352.52, + "flow": 19.05, + "inflow": 0, + "volume": 0, + "temperature": 19.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 352.51, + "flow": 19.05, + "inflow": 0, + "volume": 0, + "temperature": 19.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 352.51, + "flow": 19.05, + "inflow": 13.43, + "volume": 2.77, + "temperature": 19.7, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLL1.json b/public/data/VLL1.json index 6074c36..7777a64 100644 --- a/public/data/VLL1.json +++ b/public/data/VLL1.json @@ -7175,10 +7175,55 @@ { "timestamp": "2026-06-06T09:30:00.000Z", "level": 723.09, + "flow": 1.51, + "inflow": 0, + "volume": 0, + "temperature": 16.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 723.09, + "flow": 1.51, + "inflow": 0, + "volume": 0, + "temperature": 16.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 723.09, + "flow": 1.51, + "inflow": 9.25, + "volume": 199.67, + "temperature": 18.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 723.09, + "flow": 1.51, + "inflow": 0, + "volume": 0, + "temperature": 18.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 723.09, + "flow": 1.51, + "inflow": 0, + "volume": 0, + "temperature": 18.3, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 723.09, "flow": 0, "inflow": 9.25, "volume": 199.67, - "temperature": 17.7, + "temperature": 18.5, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLL2.json b/public/data/VLL2.json index 64237f5..2d51b56 100644 --- a/public/data/VLL2.json +++ b/public/data/VLL2.json @@ -7175,7 +7175,7 @@ { "timestamp": "2026-06-06T09:10:00.000Z", "level": 559.03, - "flow": 0, + "flow": 7.15, "inflow": 0, "volume": 0, "temperature": 18.1, @@ -7184,7 +7184,7 @@ { "timestamp": "2026-06-06T09:20:00.000Z", "level": 559.02, - "flow": 0, + "flow": 7.15, "inflow": 0, "volume": 0, "temperature": 18.1, @@ -7194,9 +7194,54 @@ "timestamp": "2026-06-06T09:30:00.000Z", "level": 559, "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.1, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 558.99, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.1, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 558.98, + "flow": 0, "inflow": 5.37, "volume": 0.47, - "temperature": 19.2, + "temperature": 19.8, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 558.96, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 19.8, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 558.94, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 19.8, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 558.93, + "flow": 0, + "inflow": 5.37, + "volume": 0.45, + "temperature": 20, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLOR.json b/public/data/VLOR.json index 2acd64c..9d11b83 100644 --- a/public/data/VLOR.json +++ b/public/data/VLOR.json @@ -7194,9 +7194,45 @@ "timestamp": "2026-06-06T09:30:00.000Z", "level": 345.27, "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 17.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 345.27, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 17.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 345.27, + "flow": 0, "inflow": 24.39, "volume": 522.32, - "temperature": 19.2, + "temperature": 20, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 345.27, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 20, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 345.27, + "flow": 0, + "inflow": 24.39, + "volume": 522.32, + "temperature": 20.3, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLSL.json b/public/data/VLSL.json index c9fce37..1b031b5 100644 --- a/public/data/VLSL.json +++ b/public/data/VLSL.json @@ -7203,9 +7203,54 @@ "timestamp": "2026-06-06T09:30:00.000Z", "level": 269.88, "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 269.89, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.9, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 269.89, + "flow": 0, "inflow": 81.06, - "volume": 261.07, - "temperature": 19.9, + "volume": 261.23, + "temperature": 20.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 269.89, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 20.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 269.89, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 20.6, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 269.88, + "flow": 0, + "inflow": 81.06, + "volume": 261.23, + "temperature": 21.1, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/VLST.json b/public/data/VLST.json index 922a300..fb91e7b 100644 --- a/public/data/VLST.json +++ b/public/data/VLST.json @@ -7203,9 +7203,54 @@ "timestamp": "2026-06-06T09:30:00.000Z", "level": 217.07, "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:40:00.000Z", + "level": 217.07, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 18.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T09:50:00.000Z", + "level": 217.07, + "flow": 0, "inflow": 48.25, - "volume": 8.27, - "temperature": 19.6, + "volume": 8.23, + "temperature": 20.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:00:00.000Z", + "level": 217.05, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 20.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:10:00.000Z", + "level": 217.04, + "flow": 0, + "inflow": 0, + "volume": 0, + "temperature": 20.4, + "precipitation": 0 + }, + { + "timestamp": "2026-06-06T10:20:00.000Z", + "level": 217.06, + "flow": 0, + "inflow": 48.25, + "volume": 8.23, + "temperature": 20.8, "precipitation": 0 } ] \ No newline at end of file diff --git a/public/data/lakes_index.json b/public/data/lakes_index.json index a743812..858c20c 100644 --- a/public/data/lakes_index.json +++ b/public/data/lakes_index.json @@ -33,28 +33,28 @@ "name": "Lipno II", "river": "Vltava", "priority": true, - "level": "559.00", - "capacity": 31.3, - "storageDiff": -1.5, + "level": "558.93", + "capacity": 30, + "storageDiff": -1.57, "inflow": "5.4", "outflow": "0.0", - "volume": 0.47, + "volume": 0.45, "maxVolume": 1.5, "lat": 48.625, "lng": 14.318, "sparkline": [ - 559.18, - 559.16, - 559.13, - 559.12, - 559.11, 559.09, 559.08, 559.06, 559.05, 559.03, 559.02, - 559 + 559, + 558.99, + 558.98, + 558.96, + 558.94, + 558.93 ] }, { @@ -62,28 +62,28 @@ "name": "Hněvkovice", "river": "Vltava", "priority": true, - "level": "369.83", - "capacity": 96.5, - "storageDiff": -0.27, + "level": "369.84", + "capacity": 96.7, + "storageDiff": -0.26, "inflow": "0.0", "outflow": "2.5", - "volume": 20.36, + "volume": 20.4, "maxVolume": 21.1, "lat": 49.183, "lng": 14.444, "sparkline": [ 369.83, 369.83, - 369.81, - 369.81, 369.83, 369.83, 369.83, 369.83, 369.83, 369.83, - 369.83, - 369.83 + 369.84, + 369.84, + 369.84, + 369.84 ] }, { @@ -91,28 +91,28 @@ "name": "Kořensko", "river": "Vltava", "priority": true, - "level": "352.53", - "capacity": 99.3, - "storageDiff": -0.07, + "level": "352.51", + "capacity": 98.9, + "storageDiff": -0.09, "inflow": "13.4", "outflow": "19.1", - "volume": 2.78, + "volume": 2.77, "maxVolume": 2.8, "lat": 49.255, "lng": 14.398, "sparkline": [ - 352.56, - 352.56, - 352.56, - 352.56, - 352.56, 352.56, 352.56, 352.55, 352.55, 352.54, 352.54, - 352.53 + 352.53, + 352.53, + 352.52, + 352.52, + 352.51, + 352.51 ] }, { @@ -130,9 +130,9 @@ "lat": 49.606, "lng": 14.17, "sparkline": [ - 345.26, - 345.26, - 345.26, + 345.27, + 345.27, + 345.27, 345.27, 345.27, 345.27, @@ -150,26 +150,26 @@ "river": "Vltava", "priority": true, "level": "269.88", - "capacity": 96.9, + "capacity": 97, "storageDiff": -0.72, "inflow": "81.1", "outflow": "0.0", - "volume": 261.07, + "volume": 261.23, "maxVolume": 269.3, "lat": 49.822, "lng": 14.436, "sparkline": [ - 269.89, - 269.89, - 269.89, - 269.89, - 269.88, 269.87, 269.87, 269.88, 269.88, 269.88, 269.88, + 269.88, + 269.89, + 269.89, + 269.89, + 269.89, 269.88 ] }, @@ -178,28 +178,28 @@ "name": "Štěchovice", "river": "Vltava", "priority": true, - "level": "217.07", - "capacity": 73.8, - "storageDiff": -2.33, + "level": "217.06", + "capacity": 73.5, + "storageDiff": -2.34, "inflow": "48.3", "outflow": "0.0", - "volume": 8.27, + "volume": 8.23, "maxVolume": 11.2, "lat": 49.845, "lng": 14.412, "sparkline": [ - 217.23, - 217.22, - 217.19, - 217.17, - 217.17, 217.14, 217.13, 217.12, 217.1, 217.09, 217.1, - 217.07 + 217.07, + 217.07, + 217.07, + 217.05, + 217.04, + 217.06 ] }, { @@ -217,8 +217,8 @@ "lat": 48.847, "lng": 14.487, "sparkline": [ - 467.73, - 467.73, + 467.74, + 467.74, 467.74, 467.74, 467.74, @@ -240,19 +240,19 @@ "capacity": 57, "storageDiff": -16.66, "inflow": "1.5", - "outflow": "0.0", - "volume": 32.32, + "outflow": "2.5", + "volume": 32.3, "maxVolume": 56.7, "lat": 49.789, "lng": 13.155, "sparkline": [ - 352.84, - 352.84, - 352.84, 352.84, 352.85, 352.84, - 352.85, + 352.84, + 352.84, + 352.84, + 352.84, 352.84, 352.84, 352.84, diff --git a/pvl_raw.html b/pvl_raw.html new file mode 100644 index 0000000..34d3000 --- /dev/null +++ b/pvl_raw.html @@ -0,0 +1,1449 @@ + + + + + + Povodí Vltavy - Stavy nádrží + + + + + + + +
+ + + + + + +
+ + Stavy a průtoky  + |  + Nádrže  + |  + Srážky  + |  + Jakost + + + Poslední aktualizace stránek + 06.06.2026 12:29 + +
+
+
+
+
+ + + +
+ +   + + +   +   +   + + +
+
+ + Celková mapa povodí  + |  + Přehled měření  + |  + Objemy vody v nádržích  + + + + + Zobrazení: + + + + +
+
+
+
+ Stavy a průtoky + UPOZORNĚNÍ: Veškerá uváděná data jsou bez záruky + 06.06.2026 12:30:23 +
+
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Přehled měření  06.06.2026Všechny závody
+ + + Nádrž + + + + Tok + DatumHladina vody v nádržiObjemPřítokOdtokSrážky (24h)Teplota vzduchuQa (odtok)Q1 (odtok)Q5 (odtok)Q20 (odtok)Q100 (odtok) + + + Poznámka +
m n.m.mil [m3][m3s-1][m3s-1][mm][°C][m3s-1][m3s-1][m3s-1][m3s-1][m3s-1]
+  VD Bílsko + +  Bílský potok + + 06.06.2026 12:15 + + 463,42 + + + + + + + + + + + + 0,03 + + 2,10 + + 6,70 + + 13,90 + + 25,00 + + +
+  VD České Údolí + +  Radbuza + + 06.06.2026 12:20 + + 313,43 + + 2,94 + + 1,27 + + 3,05 + + 1,60 + + + + 5,49 + + 45,00 + + 107,00 + + 180,00 + + 287,00 + + +
+  VD Dolejší Padrťský rybník + +  Klabava + + 06.06.2026 12:00 + + 632,77 + + + + + + + + + + + + 0,20 + + 3,83 + + 9,91 + + 17,70 + + 29,90 + + +
+  VD Dráteník + +  Červený potok (BE) + + 06.06.2026 12:20 + + 416,74 + + 0,09 + + + + + + + + + + 0,16 + + 3,30 + + 10,30 + + 20,40 + + 37,80 + + +
+  VD Hněvkovice + +  Vltava + + 06.06.2026 12:20 + + 369,84 + + 20,40 + + + + 2,50 + + + + + + 30,80 + + 200,00 + + 374,00 + + 543,00 + + 760,00 + + +
+  VD Hořejší Padrťský rybník + +  Klabava + + 06.06.2026 12:00 + + 635,70 + + + + + + + + + + 17,50 + + 0,15 + + 3,23 + + 8,35 + + 14,90 + + 25,20 + + +
+  VD Hracholusky + +  Mže + + 06.06.2026 12:20 + + 352,84 + + 32,30 + + 1,47 + + 2,52 + + + + 11,10 + + 8,28 + + 60,70 + + 129,00 + + 203,00 + + 305,00 + + +
+  VD Humenice + +  Stropnice + + 06.06.2026 12:20 + + 534,59 + + 0,09 + + 0,11 + + 0,06 + + + + 22,90 + + 0,32 + + 4,10 + + 12,00 + + 23,00 + + 40,00 + + +
+  VD Husinec + +  Blanice (PI) + + 06.06.2026 12:20 + + 521,27 + + 2,44 + + 0,92 + + 0,64 + + + + 20,40 + + 2,08 + + 22,00 + + 55,00 + + 97,00 + + 150,00 + + +
+  VD Kamýk + +  Vltava + + 06.06.2026 12:20 + + 282,96 + + 9,90 + + 85,78 + + 0,00 + + + + + + 83,70 + + 500,00 + + 975,00 + + 1453,00 + + 2065,00 + + +
+  VD Karhof + +  Studenský potok + + 06.06.2026 12:20 + + 668,40 + + 0,39 + + + + + + + + + + 0,08 + + 2,50 + + 5,80 + + 9,60 + + 15,00 + + +
+  VD Klabava + +  Klabava + + 06.06.2026 12:20 + + 345,06 + + 0,68 + + 1,06 + + 1,51 + + 0,00 + + 21,90 + + 2,04 + + 26,90 + + 68,90 + + 121,00 + + 201,00 + + +
+  VD Klíčava + +  Klíčava + + 06.06.2026 12:20 + + 292,90 + + 7,49 + + 0,01 + + 0,02 + + + + 22,00 + + 0,23 + + 7,60 + + 16,80 + + 27,00 + + 41,50 + + +
+  VD Kořensko + +  Vltava + + 06.06.2026 12:20 + + 352,51 + + 2,77 + + 13,43 + + 19,05 + + + + + + 55,20 + + 322,00 + + 597,00 + + 862,00 + + 1200,00 + + +
+  VD Láz + +  Litavka + + 06.06.2026 12:20 + + 640,67 + + 0,73 + + 0,02 + + 0,01 + + + + 17,70 + + 0,06 + + 1,80 + + 5,50 + + 10,40 + + 18,80 + + +
+  VD Lipno 1 + +  Vltava + + 06.06.2026 12:20 + + 723,09 + + 199,67 + + 9,25 + + 1,51 + + + + + + 13,16 + + 68,00 + + 140,00 + + 215,00 + + 317,00 + + +
+  VD Lipno 2 + +  Vltava + + 06.06.2026 12:20 + + 558,93 + + 0,45 + + 5,37 + + 7,18 + + + + + + 13,40 + + 70,00 + + 145,00 + + 223,00 + + 328,00 + + +
+  VD Lučina + +  Mže + + 06.06.2026 12:20 + + 530,71 + + 2,95 + + 0,48 + + 0,48 + + + + 19,80 + + 1,09 + + 5,89 + + 16,80 + + 31,40 + + 55,20 + + +
+  VD Němčice + +  Sedlický potok + + 06.06.2026 12:20 + + 385,01 + + 0,84 + + + + 0,04 + + + + 20,10 + + 0,45 + + 9,50 + + 20,00 + + 31,00 + + 46,50 + + +
+  VD Nýrsko + +  Úhlava + + 06.06.2026 12:20 + + 520,35 + + 15,36 + + 0,68 + + 0,72 + + + + 24,70 + + 1,45 + + 9,82 + + 24,00 + + 41,10 + + 66,40 + + +
+  VD Obecnice + +  Obecnický potok + + 06.06.2026 12:20 + + 563,67 + + 0,46 + + 0,02 + + 0,02 + + 3,80 + + 18,50 + + 0,08 + + 1,80 + + 7,00 + + 13,20 + + 21,40 + + +
+  VD Orlík + +  Vltava + + 06.06.2026 12:20 + + 345,27 + + 522,32 + + 24,39 + + 0,00 + + + + + + 83,40 + + 498,00 + + 966,00 + + 1440,00 + + 2050,00 + + +
+  VD Pilská (u Příbramě) + +  Pilský potok + + 06.06.2026 12:00 + + 670,55 + + + + + + + + + + 18,40 + + 0,05 + + 1,20 + + 3,60 + + 6,90 + + 12,40 + + Odtok zadáván 1x denně v 7:00. +
+  VD Pilská u Žďáru + +  Sázava + + 06.06.2026 12:20 + + 575,73 + + 1,08 + + + + 0,02 + + + + 23,00 + + 0,39 + + 7,30 + + 15,20 + + 17,10 + + 22,80 + + +
+  VD Římov + +  Malše + + 06.06.2026 12:20 + + 467,74 + + 26,53 + + 2,24 + + 0,70 + + + + 20,60 + + 4,10 + + 50,00 + + 118,00 + + 197,00 + + 283,00 + + +
+  VD Sedlice + +  Želivka + + 06.06.2026 12:20 + + 446,98 + + 1,64 + + 1,08 + + 0,20 + + 5,40 + + 19,40 + + 2,58 + + 29,60 + + 63,50 + + 100,00 + + 150,50 + + +
+  VD Slapy + +  Vltava + + 06.06.2026 12:20 + + 269,88 + + 261,23 + + 81,06 + + 0,00 + + + + 22,20 + + 84,70 + + 450,00 + + 1087,00 + + 1702,00 + + 2503,00 + + +
+  VD Soběnov + +  Černá + + 06.06.2026 12:00 + + 581,45 + + 0,04 + + + + + + 3,10 + + 19,90 + + 1,66 + + 21,00 + + 52,00 + + 89,00 + + 145,00 + + +
+  VD Staviště + +  Staviště + + 06.06.2026 12:20 + + 580,54 + + 0,41 + + + + 0,05 + + 4,20 + + 19,10 + + 0,19 + + 6,90 + + 11,90 + + 16,50 + + 22,00 + + +
+  VD Strž + +  Stržský potok + + 06.06.2026 12:20 + + 588,43 + + 0,33 + + + + 0,08 + + + + + + 0,31 + + 7,70 + + 12,80 + + 17,50 + + 23,20 + + +
+  VD Suchomasty + +  Suchomastský potok + + 06.06.2026 12:20 + + 260,10 + + 0,41 + + 0,10 + + 0,08 + + + + + + 0,13 + + 4,10 + + 12,00 + + 22,90 + + 41,00 + + +
+  VD Štěchovice + +  Vltava + + 06.06.2026 12:20 + + 217,06 + + 8,23 + + 48,25 + + 0,00 + + + + + + 85,10 + + 526,00 + + 1055,00 + + 1750,00 + + 2400,00 + + +
+  VD Švihov (Želivka) + +  Želivka + + 06.06.2026 12:20 + + 375,15 + + 240,98 + + 1,87 + + 0,44 + + + + 8,00 + + 6,93 + + 71,00 + + 143,00 + + 217,00 + + 316,00 + + +
+  VD Trnávka + +  Trnava + + 06.06.2026 12:20 + + 412,79 + + 5,15 + + 0,46 + + 0,39 + + + + 23,20 + + 2,06 + + 26,00 + + 55,00 + + 86,00 + + 128,00 + + +
+  VD Vrané + +  Vltava + + 06.06.2026 12:20 + + 199,89 + + 10,67 + + 45,00 + + 39,70 + + + + 18,70 + + 111,00 + + 550,00 + + 1330,00 + + 2050,00 + + 2670,00 + + +
+  VD Vřesník + +  Želivka + + 06.06.2026 12:20 + + 407,66 + + 0,14 + + 0,42 + + 0,32 + + + + + + 2,71 + + 1,00 + + 51,70 + + 84,10 + + 133,00 + + +
+  VD Záskalská + +  Červený potok (BE) + + 06.06.2026 12:20 + + 448,83 + + 0,67 + + + + + + + + 19,40 + + 0,13 + + 3,10 + + 9,80 + + 19,40 + + 36,00 + + +
+  VD Zhejral + +  Studenský potok + + 06.06.2026 12:20 + + 678,61 + + 0,16 + + + + + + + + + + 0,04 + + 2,00 + + 4,60 + + 7,60 + + 12,00 + + +
+  VD Žlutice + +  Střela + + 06.06.2026 12:20 + + 505,67 + + 9,33 + + 0,10 + + 0,22 + + + + 22,00 + + 1,24 + + 8,79 + + 28,60 + + 41,90 + + 85,10 + + +
+
+
+ +
+ +
+ +   + Povodí Vltavy, státní podnik + © + 2026 + + + Systém využívá i data z měřících stanic +   + Českého hydrometeorologického ústavu © + 2026 + + + Aplikace vyrobena firmou +   + MGE Data s.r.o. © 1996 - + 2024 + +
+
+
+
+
+ + diff --git a/pvl_raw_month.html b/pvl_raw_month.html new file mode 100644 index 0000000..2eef940 --- /dev/null +++ b/pvl_raw_month.html @@ -0,0 +1,629 @@ + + + + + + Povodí Vltavy - Stavy nádrží + + + + + + + +
+ + + + + + + + +
+ + Stavy a průtoky  + |  + Nádrže  + |  + Srážky  + |  + Jakost + + + Poslední aktualizace stránek + 06.06.2026 12:29 + +
+
+
+
+
+ + + +
+ +   + + +   +   +   + + +
+
+ + Celková mapa povodí  + |  + Přehled měření  + |  + Objemy vody v nádržích  + + + + + Zobrazení: + + + + +
+
+
+
+ Stavy a průtoky + UPOZORNĚNÍ: Veškerá uváděná data jsou bez záruky + 06.06.2026 12:31:23 +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ VD Lipno 1 + + + + + + +
+ Tok: + Vltava
+ Koruna hráze: + 728,62 [m n.m.]
+ Kóta přelivu: + 723,27 [m n.m.]
+ Maximální retenční hladina: + 725,60 [m n.m.]
+ Hladina zásobního prostoru: + 724,90 [m n.m.]
+ Hladina stálého nadržení: + 716,10 [m n.m.]
+ Výškový systém: + Balt p.v.
+ Poznámka: +
+
+
+
+ + Schéma:
+ +
+
+ + + + Přejít na bilanční data (měsíc) +
+ + + + + + +
+
+ Graf +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Datum + Hladina + [m. n. m.] + + + Odtok + [m3s-1] + + + QN +
06.06.2026 12:20 + 723,09 + + 1,51 + + +
06.06.2026 12:10 + 723,09 + + 1,51 + + +
06.06.2026 12:00 + 723,09 + + 1,51 + + +
06.06.2026 11:00 + 723,09 + + 1,51 + + +
06.06.2026 10:00 + 723,09 + + 1,51 + + +
06.06.2026 09:00 + 723,09 + + 1,51 + + +
06.06.2026 08:00 + 723,09 + + 1,51 + + +
06.06.2026 07:00 + 723,09 + + 1,51 + + +
06.06.2026 06:00 + 723,09 + + 1,51 + + +
06.06.2026 05:00 + 723,09 + + 1,51 + + +
06.06.2026 04:00 + 723,09 + + 1,51 + + +
06.06.2026 03:00 + 723,09 + + 1,51 + + +
06.06.2026 02:00 + 723,09 + + 1,51 + + +
06.06.2026 01:00 + 723,09 + + 1,51 + + +
06.06.2026 00:00 + 723,08 + + 1,51 + + +
05.06.2026 23:00 + 723,09 + + 1,51 + + +
05.06.2026 22:00 + 723,08 + + 37,78 + + +
05.06.2026 21:00 + 723,08 + + 34,78 + + +
05.06.2026 20:00 + 723,09 + + 13,76 + + +
05.06.2026 19:00 + 723,09 + + 1,49 + + +
05.06.2026 18:00 + 723,10 + + 1,49 + + +
05.06.2026 17:00 + 723,09 + + 1,49 + + +
05.06.2026 16:00 + 723,10 + + 1,49 + + +
05.06.2026 15:00 + 723,09 + + 1,49 + + +
05.06.2026 14:00 + 723,10 + + 1,49 + + +
05.06.2026 13:00 + 723,09 + + 1,49 + + +
05.06.2026 07:00 + 723,08 + + 1,49 + + +
04.06.2026 07:00 + 723,08 + + 1,49 + + +
03.06.2026 07:00 + 723,09 + + 1,49 + + +
02.06.2026 07:00 + 723,08 + + 1,51 + + +
01.06.2026 07:00 + 723,08 + + 30,94 + + +
31.05.2026 07:00 + 723,06 + + 1,03 + + +
+
+ +
+ + + + + + + + + + + + +
+ +
+ +   + Povodí Vltavy, státní podnik + © + 2026 + + + Systém využívá i data z měřících stanic +   + Českého hydrometeorologického ústavu © + 2026 + + + Aplikace vyrobena firmou +   + MGE Data s.r.o. © 1996 - + 2024 + +
+
+
+
+ +
+ + diff --git a/scratch_postback.ts b/scratch_postback.ts new file mode 100644 index 0000000..e778622 --- /dev/null +++ b/scratch_postback.ts @@ -0,0 +1,46 @@ +import axios from 'axios'; +import fs from 'fs'; +import https from 'https'; +import * as cheerio from 'cheerio'; + +const URL = 'https://www.pvl.cz/portal/nadrze/cz/pc/Mereni.aspx?oid=1&id=VLL1'; + +async function testPostback() { + const agent = new https.Agent({ rejectUnauthorized: false }); + const res = await axios.get(URL, { httpsAgent: agent, timeout: 10000 }); + const $ = cheerio.load(res.data); + + const viewstate = $('#__VIEWSTATE').val(); + const viewstategenerator = $('#__VIEWSTATEGENERATOR').val(); + const eventvalidation = $('#__EVENTVALIDATION').val(); + + // Try to POST for monthly data + const postData = new URLSearchParams(); + postData.append('__EVENTTARGET', 'ctl00$ObsahCPH$PrechodNaBilancniData'); + postData.append('__EVENTARGUMENT', ''); + postData.append('__VIEWSTATE', viewstate as string); + postData.append('__VIEWSTATEGENERATOR', viewstategenerator as string); + postData.append('__EVENTVALIDATION', eventvalidation as string); + + const postRes = await axios.post(URL, postData.toString(), { + httpsAgent: agent, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }); + + fs.writeFileSync('pvl_raw_month.html', postRes.data); + console.log('Saved monthly data to pvl_raw_month.html'); + + const $post = cheerio.load(postRes.data); + const rows = $post('table.tabulka-seznam tr:not(:first-child)'); + console.log(`Found ${rows.length} rows in the table.`); + if (rows.length > 0) { + const firstRow = rows.first().find('td').first().text().trim(); + const lastRow = rows.last().find('td').first().text().trim(); + console.log(`Date range: ${firstRow} to ${lastRow}`); + } + +} + +testPostback().catch(console.error); diff --git a/scripts/scrapeLakes.ts b/scripts/scrapeLakes.ts index 2820f77..3076a58 100644 --- a/scripts/scrapeLakes.ts +++ b/scripts/scrapeLakes.ts @@ -78,37 +78,70 @@ async function scrapeLake(lakeId: string, oid: string, internalId: string) { }); const records: DataRecord[] = []; - let dataTable = null; - $('table').each((i, tbl) => { - if ($(tbl).text().includes('Datum') && $(tbl).text().includes('Odtok')) { - dataTable = $(tbl); - } - }); - if (dataTable) { - dataTable.find('tr').each((i, row) => { - if (i === 0) return; // skip header - const cols = $(row).find('td'); - if (cols.length >= 3) { - 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 parsedDateStr = parseDateString(rawDate); - if (parsedDateStr) { - records.push({ - timestamp: parsedDateStr, - level: parseFloat(levelStr) || 0, - flow: parseFloat(flowStr) || 0, - inflow: 0, - volume: 0 - }); - } + const parseTable = (htmlContent: string) => { + const _$ = cheerio.load(htmlContent); + let dataTable = null; + _$('table').each((i, tbl) => { + if (_$(tbl).text().includes('Datum') && _$(tbl).text().includes('Odtok')) { + dataTable = _$(tbl); } }); + + if (dataTable) { + dataTable.find('tr').each((i, row) => { + if (i === 0) return; // skip header + const cols = _$(row).find('td'); + if (cols.length >= 3) { + 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 parsedDateStr = parseDateString(rawDate); + if (parsedDateStr) { + records.push({ + timestamp: parsedDateStr, + level: parseFloat(levelStr) || 0, + flow: parseFloat(flowStr) || 0, + inflow: 0, + volume: 0 + }); + } + } + }); + } + }; + + // 1. Zpracování týdenních dat (GET) + parseTable(response.data); + + // 2. Získání a zpracování měsíčních dat (POST) + try { + const viewstate = $('#__VIEWSTATE').val(); + const viewstategenerator = $('#__VIEWSTATEGENERATOR').val(); + const eventvalidation = $('#__EVENTVALIDATION').val(); + + if (viewstate && viewstategenerator && eventvalidation) { + const postData = new URLSearchParams(); + postData.append('__EVENTTARGET', 'ctl00$ObsahCPH$PrechodNaBilancniData'); + postData.append('__EVENTARGUMENT', ''); + postData.append('__VIEWSTATE', viewstate as string); + postData.append('__VIEWSTATEGENERATOR', viewstategenerator as string); + postData.append('__EVENTVALIDATION', eventvalidation as string); + + const postRes = await axios.post(URL, postData.toString(), { + httpsAgent: agent, + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + timeout: 10000 + }); + + parseTable(postRes.data); + } + } catch (err: any) { + console.warn(`Failed to fetch monthly data for ${internalId}:`, err.message); } if (records.length > 0) { diff --git a/src/App.tsx b/src/App.tsx index f1ea353..bbb0995 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,7 +7,7 @@ import FavoritesOverview from './components/FavoritesOverview'; import Sidebar from './components/Sidebar'; import Topbar from './components/Topbar'; import SettingsModal from './components/SettingsModal'; -import { type Language } from './translations'; +import { type Language, t } from './translations'; import { lakesConfig } from '../scripts/lakesConfig'; import { slugify } from './utils/slugify'; import './App.css'; @@ -66,14 +66,28 @@ function App() { onCloseMobileMenu={() => setIsMobileMenuOpen(false)} /> -
+
setIsMobileMenuOpen(!isMobileMenuOpen)} /> - - } /> - } /> - } /> - } /> - +
+ + } /> + } /> + } /> + } /> + +
+
{isSettingsOpen && ( diff --git a/src/components/LakeDetail.tsx b/src/components/LakeDetail.tsx index 495b404..b2a7260 100644 --- a/src/components/LakeDetail.tsx +++ b/src/components/LakeDetail.tsx @@ -84,44 +84,50 @@ const LakeDetail = ({ language, lakeId }: Props) => { const topbarDict = t[language].topbar; useEffect(() => { - fetch('/data/lakes_index.json') - .then(res => res.json()) - .then(indexData => { - const found = indexData.find((l: any) => l.id === lakeId); - setLakeInfo(found || { name: 'Lipno 1', river: 'Vltava' }); - }) - .catch(err => console.error(err)); + const loadData = () => { + fetch(`/data/lakes_index.json?t=${Date.now()}`) + .then(res => res.json()) + .then(indexData => { + const found = indexData.find((l: any) => l.id === lakeId); + setLakeInfo(found || { name: 'Lipno 1', river: 'Vltava' }); + }) + .catch(err => console.error(err)); - const internalId = lakeId ? lakeId.split('|')[0] : 'VLL1'; + const internalId = lakeId ? lakeId.split('|')[0] : 'VLL1'; - fetch(`/data/${internalId}.json`) - .then(res => res.json()) - .then(json => { - const formattedData = json.map((item: any) => { - const outflow = item.flow === null || isNaN(item.flow) ? 0 : item.flow; + fetch(`/data/${internalId}.json?t=${Date.now()}`) + .then(res => res.json()) + .then(json => { + const formattedData = json.map((item: any) => { + const outflow = item.flow === null || isNaN(item.flow) ? 0 : item.flow; - return { - timestamp: item.timestamp, - date: new Date(item.timestamp).toLocaleString(language === 'cs' ? 'cs-CZ' : 'en-GB', { - day: '2-digit', month: '2-digit', year: 'numeric', - hour: '2-digit', minute: '2-digit' - }), - level: item.level === null || isNaN(item.level) ? 0 : item.level, - outflow: outflow, - inflow: item.inflow || 0, - volume: item.volume || 0, - fullness: 0, - temperature: item.temperature, - precipitation: item.precipitation - }; + return { + timestamp: item.timestamp, + date: new Date(item.timestamp).toLocaleString(language === 'cs' ? 'cs-CZ' : 'en-GB', { + day: '2-digit', month: '2-digit', year: 'numeric', + hour: '2-digit', minute: '2-digit' + }), + level: item.level === null || isNaN(item.level) ? 0 : item.level, + outflow: outflow, + inflow: item.inflow || 0, + volume: item.volume || 0, + fullness: 0, + temperature: item.temperature, + precipitation: item.precipitation + }; + }); + setData(formattedData); + setLoading(false); + }) + .catch(err => { + console.error('Failed to load data', err); + setLoading(false); }); - setData(formattedData); - setLoading(false); - }) - .catch(err => { - console.error('Failed to load data', err); - setLoading(false); - }); + }; + + loadData(); + const intervalId = setInterval(loadData, 60 * 1000); // Poll every 1 minute + return () => clearInterval(intervalId); }, [language, lakeId]); if (loading) { @@ -336,11 +342,6 @@ const LakeDetail = ({ language, lakeId }: Props) => {
- -
- {dict.dataSources} ČHMÚ, pvl.cz - {dict.createdIn} -
); }; diff --git a/src/components/LakesOverview.tsx b/src/components/LakesOverview.tsx index 6bff2bb..df17319 100644 --- a/src/components/LakesOverview.tsx +++ b/src/components/LakesOverview.tsx @@ -170,10 +170,16 @@ const LakesOverview = ({ language }: Props) => { const { isFavorite, toggleFavorite, favorites } = useFavorites(); useEffect(() => { - fetch(`/data/lakes_index.json?t=${Date.now()}`) - .then(res => res.json()) - .then(data => setLakes(data)) - .catch(err => console.error(err)); + const loadData = () => { + fetch(`/data/lakes_index.json?t=${Date.now()}`) + .then(res => res.json()) + .then(data => setLakes(data)) + .catch(err => console.error(err)); + }; + + loadData(); + const intervalId = setInterval(loadData, 60 * 1000); // Poll every 1 minute + return () => clearInterval(intervalId); }, []); const favoriteLakes = lakes.filter(l => isFavorite(l.id)); diff --git a/src/components/Topbar.tsx b/src/components/Topbar.tsx index 9463063..bcc2eec 100644 --- a/src/components/Topbar.tsx +++ b/src/components/Topbar.tsx @@ -1,5 +1,6 @@ import { FiSearch, FiMenu, FiDroplet } from 'react-icons/fi'; import { type Language, t } from '../translations'; +import { useLocation } from 'react-router-dom'; interface Props { language: Language; @@ -8,6 +9,8 @@ interface Props { const Topbar = ({ language, onToggleMobileMenu }: Props) => { const dict = t[language].topbar; + const location = useLocation(); + const showSearch = location.pathname === '/' || location.pathname === '/favorites'; return (
@@ -19,10 +22,12 @@ const Topbar = ({ language, onToggleMobileMenu }: Props) => { Hladinator
-
- - -
+ {showSearch && ( +
+ + +
+ )} );