@golemio/chmu 1.1.1-dev.2631498508 → 1.1.1-dev.2637274244

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/db/migrations/postgresql/20260619120000-opendata-columns.js +49 -0
  2. package/db/migrations/postgresql/sqls/20260619120000-opendata-columns-down.sql +36 -0
  3. package/db/migrations/postgresql/sqls/20260619120000-opendata-columns-up.sql +40 -0
  4. package/dist/integration-engine/data-access/MeasurementsRepository.js +2 -2
  5. package/dist/integration-engine/data-access/MeasurementsRepository.js.map +1 -1
  6. package/dist/integration-engine/data-access/StationsRepository.d.ts +8 -0
  7. package/dist/integration-engine/data-access/StationsRepository.js +57 -0
  8. package/dist/integration-engine/data-access/StationsRepository.js.map +1 -0
  9. package/dist/integration-engine/datasources/OpendataDatasource.d.ts +30 -0
  10. package/dist/integration-engine/datasources/OpendataDatasource.js +80 -0
  11. package/dist/integration-engine/datasources/OpendataDatasource.js.map +1 -0
  12. package/dist/integration-engine/ioc/Di.js +8 -0
  13. package/dist/integration-engine/ioc/Di.js.map +1 -1
  14. package/dist/integration-engine/ioc/ModuleContainerToken.d.ts +4 -0
  15. package/dist/integration-engine/ioc/ModuleContainerToken.js +5 -0
  16. package/dist/integration-engine/ioc/ModuleContainerToken.js.map +1 -1
  17. package/dist/integration-engine/transformations/MeasurementsTransformation.js +18 -0
  18. package/dist/integration-engine/transformations/MeasurementsTransformation.js.map +1 -1
  19. package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.d.ts +15 -0
  20. package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.js +128 -0
  21. package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.js.map +1 -0
  22. package/dist/integration-engine/workers/ChmuWorker.js +1 -0
  23. package/dist/integration-engine/workers/ChmuWorker.js.map +1 -1
  24. package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.d.ts +8 -0
  25. package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.js +3 -0
  26. package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.js.map +1 -0
  27. package/dist/integration-engine/workers/tasks/DownloadMeasurementsTask.js +2 -2
  28. package/dist/integration-engine/workers/tasks/DownloadMeasurementsTask.js.map +1 -1
  29. package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.d.ts +22 -0
  30. package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.js +112 -0
  31. package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.js.map +1 -0
  32. package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.d.ts +6 -0
  33. package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.js +33 -0
  34. package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.js.map +1 -0
  35. package/dist/schema-definitions/datasources/OpendataSchemaProvider.d.ts +55 -0
  36. package/dist/schema-definitions/datasources/OpendataSchemaProvider.js +47 -0
  37. package/dist/schema-definitions/datasources/OpendataSchemaProvider.js.map +1 -0
  38. package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.d.ts +15 -0
  39. package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.js +3 -0
  40. package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.js.map +1 -0
  41. package/dist/schema-definitions/definitions/interfaces/IMeasurementDto.d.ts +18 -0
  42. package/dist/schema-definitions/definitions/models/MeasurementModel.d.ts +18 -0
  43. package/dist/schema-definitions/definitions/models/MeasurementModel.js +37 -1
  44. package/dist/schema-definitions/definitions/models/MeasurementModel.js.map +1 -1
  45. package/docs/asyncapi.yaml +35 -3
  46. package/docs/implementation_documentation.md +81 -23
  47. package/package.json +1 -1
@@ -2,62 +2,120 @@
2
2
 
3
3
  ## Záměr
4
4
 
5
- Modul slouží ke stažení chmu dat z ftp agregovaných po hodině do csv souborů.
5
+ Modul slouží ke stažení ČHMÚ meteorologických dat ze dvou zdrojů:
6
+
7
+ - **FTP pipeline** - hodinová CSV data z interního FTP (`data_source = 'ftp'`)
8
+ - **Opendata pipeline** - desetiminutová JSON data z veřejného ČHMÚ opendata API (`data_source = 'opendata'`)
9
+
10
+ Data z obou zdrojů se ukládají do stejné tabulky `chmu.measurements` pomocí UPSERT (PK: `measured_at`, `station_id`, `data_source`).
6
11
 
7
12
  ## Vstupní data
8
13
 
9
14
  ### Data aktivně stahujeme
10
15
 
11
- Popis dat, jak je pomocí cronu a integration-engine stahujeme. Pokud jsou data stahována z více zdrojů, každý zdroj je popsán zvlášť.
12
-
13
- #### *ChmuDatasource*
16
+ #### *ChmuDatasource* (FTP)
14
17
 
15
18
  - zdroj dat
16
- - golemio ftp
19
+ - golemio FTP
17
20
  - formát dat
18
- - csv soubor
19
- - [validační schéma: ](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/schema-definitions/datasources/ChmuSchemaProvider.ts)
21
+ - CSV soubor, oddělovač `;`, kódování UTF-8
22
+ - [validační schéma](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/schema-definitions/datasources/ChmuSchemaProvider.ts)
20
23
  - [příklad vstupních dat](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/test/data/6443_2023020215.txt)
21
24
  - frekvence stahování
22
25
  - jednou za hodinu
23
- - název rabbitmq fronty
26
+ - název RabbitMQ fronty
24
27
  - `chmu.downloadMeasurementsTask`
25
28
 
26
- ## Zpracování dat / transformace
29
+ #### *OpendataDatasource* (opendata)
27
30
 
28
- Popis transformace a případného obohacení dat. Zaměřeno hlavně na workery a jejich metody.
31
+ - zdroj dat
32
+ - ČHMÚ opendata
33
+ - URL: `https://opendata.chmi.cz/meteorology/climate/now/data/10m-{WSI}-{YYYYMMDD}.json`
34
+ - soubor pokrývá celý den; každou hodinu přibývají nové záznamy za uplynulou hodinu
35
+ - formát dat
36
+ - JSON, long-format záznamy: `[STATION, ELEMENT, DT, VAL, FLAG, QUALITY]`
37
+ - FLAG: kód podmínky pro zvláštní meteorologické situace (např. `"V"`, `"A"`); typicky `""`
38
+ - QUALITY: `0.0` = dobrá, `1.0` = podezřelá, `2.0` = nízká kvalita, `3.0` = odhadnutá, `4.0` = chybějící, `5.0` = neznámá
39
+ - VAL: číselná hodnota, nebo `""` při chybějícím měření (QUALITY = 4.0)
40
+ - DT ve formátu ISO 8601 UTC (`2026-06-25T10:00:00Z`)
41
+ - frekvence stahování
42
+ - jednou denně (soubor pokrývá celý předchozí den)
43
+ - název RabbitMQ fronty
44
+ - `chmu.downloadOpendataMeasurementsTask`
45
+ - poznámka
46
+ - Zpracovány jsou pouze stanice s vyplněným sloupcem `wsi` v `chmu.stations`; ostatní jsou přeskočeny.
29
47
 
30
- ### *ChmuWorker*
48
+ ## Zpracování dat / transformace
31
49
 
32
- Stručný popis workeru.
50
+ ### *ChmuWorker*
33
51
 
34
- #### *DownloadMeasurementsTask*
52
+ #### *DownloadMeasurementsTask* (FTP)
35
53
 
36
- - vstupní rabbitmq fronta
37
- - název `chmu.downloadMeasurementsTask`
38
- - parametry `from` and `to` volitelné parametry v iso formátu
54
+ - vstupní RabbitMQ fronta
55
+ - `chmu.downloadMeasurementsTask`
56
+ - parametry `from` a `to` - volitelné ISO 8601 timestampy; bez parametrů stáhne aktuální hodinu; s rozsahem generuje subtasky po hodinách
39
57
  - datové zdroje
40
- - `ChmuDatasource`
58
+ - `ChmuDatasource` - stáhne hodinový CSV soubor z FTP
41
59
  - transformace
42
- - odkaz na transformaci dat, případně stručný popis tranformace
43
- - [transformace dat](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/integration-engine/transformations/MeasurementsTransformation.ts)
60
+ - [MeasurementsTransformation](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/integration-engine/transformations/MeasurementsTransformation.ts)
61
+ - mapování CSV polí na DB sloupce, převod desetinné čárky, `data_source = 'ftp'`
44
62
  - data modely
45
63
  - [MeasurementModel](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/schema-definitions/definitions/models/MeasurementModel.ts)
46
64
 
65
+ #### *DownloadOpendataMeasurementsTask* (opendata)
66
+
67
+ - vstupní RabbitMQ fronta
68
+ - `chmu.downloadOpendataMeasurementsTask`
69
+ - parametr `date` - volitelný ISO 8601 datum; bez parametru stáhne aktuální den
70
+ - tok zpracování
71
+ 1. `StationsRepository` - načte stanice s vyplněným WSI z `chmu.stations`
72
+ 2. `OpendataDatasource` - pro každou stanici stáhne denní 10m JSON soubor
73
+ 3. Přiřazení `station_id` dle WSI -> `station_id` mappingu
74
+ 4. `OpendataMeasurementsTransformation` - pivot long->wide; skupinování dle `(station_id, DT)`; `data_source = 'opendata'`
75
+ 5. `MeasurementsRepository` - UPSERT do `chmu.measurements`
76
+ - mapování ELEMENT -> DB sloupec
77
+
78
+ | ELEMENT | DB sloupec | Poznámka |
79
+ |---------|-----------|---------|
80
+ | T | air_temp | |
81
+ | H | air_hum | |
82
+ | P | air_pressure | |
83
+ | F | wind_speed | |
84
+ | D | wind_dir | |
85
+ | SRA10M | precip | |
86
+ | SSV10M | sunlight | ÷ 360 (s -> desetinné hodiny) |
87
+ | TMA | air_temp_max | |
88
+ | TMI | air_temp_min | |
89
+ | TPM | air_temp_ground | |
90
+ | Fprum | wind_speed_avg | |
91
+ | Dprum | wind_dir_avg | |
92
+ | Fmax | wind_gust | |
93
+ | Dmax | wind_gust_dir | |
94
+ | Casmax | wind_gust_time | |
95
+ | SCEa | snow_depth | |
96
+ | SVHa | snow_water | |
97
+ | RGLB10 | radiation_glob | |
98
+ | REUV10 / REUV25 | radiation_uv | |
99
+ | T05–T100 | soil_temp_5cm–soil_temp_100cm | |
47
100
 
101
+ - data modely
102
+ - [MeasurementModel](https://gitlab.com/operator-ict/golemio/code/modules/chmu/-/blob/development/src/schema-definitions/definitions/models/MeasurementModel.ts)
48
103
 
49
104
  ## Uložení dat
50
105
 
51
- Popis ukládání dat.
52
-
53
106
  ### Obecné
54
107
 
55
108
  - typ databáze
56
- - PSQL
57
- - datábázové schéma
109
+ - PostgreSQL
110
+ - databázové schéma
58
111
  - schéma: `chmu`
59
112
  ![chmu er diagram](assets/chmu.erd.png)
60
113
  - retence dat
61
114
  - data jsou zachována
62
115
  - AsyncApi dokumentace
63
116
  - [AsyncApi](./asyncapi.yaml)
117
+
118
+ ### Poznámky k datové kvalitě
119
+
120
+ - Sloupce `soil_hum_0_10`, `soil_hum_10_50`, `soil_hum_50_100` zůstávají v DB, ale opendata zdroj půdní vlhkost neobsahuje - všechny záznamy s `data_source = 'opendata'` mají tyto sloupce `NULL`.
121
+ - Timezone: DT z opendata přichází jako UTC a je převedeno do Europe/Prague pro výpočet zobrazovacích polí (`time`, `year`, `month`, `day`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/chmu",
3
- "version": "1.1.1-dev.2631498508",
3
+ "version": "1.1.1-dev.2637274244",
4
4
  "description": "Golemio CHMU module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",