@golemio/chmu 1.1.1-dev.2644315801 → 1.1.1-dev.2644362300
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.
- package/db/migrations/postgresql/20260619120000-opendata-columns.js +49 -0
- package/db/migrations/postgresql/sqls/20260619120000-opendata-columns-down.sql +36 -0
- package/db/migrations/postgresql/sqls/20260619120000-opendata-columns-up.sql +40 -0
- package/dist/integration-engine/data-access/MeasurementsRepository.js +1 -1
- package/dist/integration-engine/data-access/MeasurementsRepository.js.map +1 -1
- package/dist/integration-engine/data-access/StationsRepository.d.ts +8 -0
- package/dist/integration-engine/data-access/StationsRepository.js +56 -0
- package/dist/integration-engine/data-access/StationsRepository.js.map +1 -0
- package/dist/integration-engine/datasources/OpendataDatasource.d.ts +30 -0
- package/dist/integration-engine/datasources/OpendataDatasource.js +80 -0
- package/dist/integration-engine/datasources/OpendataDatasource.js.map +1 -0
- package/dist/integration-engine/ioc/Di.js +8 -0
- package/dist/integration-engine/ioc/Di.js.map +1 -1
- package/dist/integration-engine/ioc/ModuleContainerToken.d.ts +4 -0
- package/dist/integration-engine/ioc/ModuleContainerToken.js +5 -0
- package/dist/integration-engine/ioc/ModuleContainerToken.js.map +1 -1
- package/dist/integration-engine/transformations/MeasurementsTransformation.js +18 -0
- package/dist/integration-engine/transformations/MeasurementsTransformation.js.map +1 -1
- package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.d.ts +15 -0
- package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.js +131 -0
- package/dist/integration-engine/transformations/OpendataMeasurementsTransformation.js.map +1 -0
- package/dist/integration-engine/workers/ChmuWorker.js +1 -0
- package/dist/integration-engine/workers/ChmuWorker.js.map +1 -1
- package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.d.ts +8 -0
- package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.js +3 -0
- package/dist/integration-engine/workers/interfaces/IDownloadOpendataMessage.js.map +1 -0
- package/dist/integration-engine/workers/tasks/DownloadMeasurementsTask.js +2 -2
- package/dist/integration-engine/workers/tasks/DownloadMeasurementsTask.js.map +1 -1
- package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.d.ts +22 -0
- package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.js +112 -0
- package/dist/integration-engine/workers/tasks/DownloadOpendataMeasurementsTask.js.map +1 -0
- package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.d.ts +6 -0
- package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.js +33 -0
- package/dist/integration-engine/workers/tasks/DownloadOpendataMessageSchema.js.map +1 -0
- package/dist/schema-definitions/datasources/OpendataSchemaProvider.d.ts +55 -0
- package/dist/schema-definitions/datasources/OpendataSchemaProvider.js +47 -0
- package/dist/schema-definitions/datasources/OpendataSchemaProvider.js.map +1 -0
- package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.d.ts +15 -0
- package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.js +3 -0
- package/dist/schema-definitions/datasources/interfaces/IInputOpendataRecord.js.map +1 -0
- package/dist/schema-definitions/definitions/interfaces/IMeasurementDto.d.ts +18 -0
- package/dist/schema-definitions/definitions/models/MeasurementModel.d.ts +18 -0
- package/dist/schema-definitions/definitions/models/MeasurementModel.js +37 -1
- package/dist/schema-definitions/definitions/models/MeasurementModel.js.map +1 -1
- package/docs/asyncapi.yaml +35 -3
- package/docs/implementation_documentation.md +81 -23
- package/package.json +1 -1
|
@@ -2,62 +2,120 @@
|
|
|
2
2
|
|
|
3
3
|
## Záměr
|
|
4
4
|
|
|
5
|
-
Modul slouží ke stažení
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
#### *ChmuDatasource*
|
|
16
|
+
#### *ChmuDatasource* (FTP)
|
|
14
17
|
|
|
15
18
|
- zdroj dat
|
|
16
|
-
- golemio
|
|
19
|
+
- golemio FTP
|
|
17
20
|
- formát dat
|
|
18
|
-
-
|
|
19
|
-
- [validační schéma
|
|
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
|
|
26
|
+
- název RabbitMQ fronty
|
|
24
27
|
- `chmu.downloadMeasurementsTask`
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
#### *OpendataDatasource* (opendata)
|
|
27
30
|
|
|
28
|
-
|
|
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
|
-
|
|
48
|
+
## Zpracování dat / transformace
|
|
31
49
|
|
|
32
|
-
|
|
50
|
+
### *ChmuWorker*
|
|
33
51
|
|
|
34
|
-
#### *DownloadMeasurementsTask*
|
|
52
|
+
#### *DownloadMeasurementsTask* (FTP)
|
|
35
53
|
|
|
36
|
-
- vstupní
|
|
37
|
-
-
|
|
38
|
-
- parametry `from`
|
|
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
|
-
-
|
|
43
|
-
-
|
|
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
|
-
-
|
|
57
|
-
-
|
|
109
|
+
- PostgreSQL
|
|
110
|
+
- databázové schéma
|
|
58
111
|
- schéma: `chmu`
|
|
59
112
|

|
|
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`).
|