api / ims_api_documentation.md
safraeli's picture
Deploy: 2026 sensor migration + redesign + bucket B endpoints
13fc29d verified
|
Raw
History Blame Contribute Delete
15.9 kB
# ื“ื•"ื— ืžืฉื™ืžื” 2 โ€“ ื”ื‘ืืช ื ืชื•ื ื™ื ืž-IMS (Israel Meteorological Service)
---
## ืื™ืœื• ื ืชื•ื ื™ื ื ืœืงื—ื™ื ืž-IMS ื•ืื™ืš ื”ื ื ืฉืžืจื™ื
### ืžืงื•ืจ ื”ื ืชื•ื ื™ื
- **ืฉื™ืจื•ืช:** IMS (Israel Meteorological Service) โ€“ ืฉื™ืจื•ืช ื”ืžื˜ืื•ืจื•ืœื•ื’ื™ื” ื”ื™ืฉืจืืœื™.
- **ืžืžืฉืง:** API Envista โ€“ `https://api.ims.gov.il/v1/envista/stations/{STATION_ID}/data/{CHANNEL_ID}/?from=YYYY/MM/DD&to=YYYY/MM/DD`
- **ืชื—ื ื”:** **43 โ€“ ืฉื“ื” ื‘ื•ืงืจ** (ื“ื•ืžื” ืœืืงืœื™ื ื™ืจื•ื—ื; ืžื™ืงื•ื ื”ื›ืจื).
- **ืื™ืžื•ืช:** ื˜ื•ืงืŸ API ื‘ึพืžืฉืชื ื” ืกื‘ื™ื‘ื” `IMS_API_TOKEN` (ื ืฉืžืจ ืžืงื•ืžื™ืช ื‘ึพ`.env`, ืœื ื‘ึพgit).
### ืขืจื•ืฆื™ื (Channels) ืฉื ืœืงื—ื™ื
ืžื–ื”ื™ ื”ืขืจื•ืฆื™ื ืชืœื•ื™ื™ื ื‘ืชื—ื ื”. **ืœืชื—ื ื” 43 (ืฉื“ื” ื‘ื•ืงืจ)** ืžื•ื’ื“ืจื™ื ื‘ึพ`config/dev.yaml` ืชื—ืช `ims:`:
| ืขืจื•ืฅ IMS (ืžื–ื”ื”) | ืฉื IMS | ืžืฉืชื ื” ื‘ืคืœื˜ (ืกื›ืžื” ืงื ื•ื ื™ืช) | ื™ื—ื™ื“ื•ืช | ืชื™ืื•ืจ |
|-----------------|--------|---------------------------|--------|--------|
| 6 | TD | `air_temperature_c` | ยฐC | ื˜ืžืคืจื˜ื•ืจืช ืื•ื•ื™ืจ ื ื•ื›ื—ื™ืช |
| 8 | TDmax| `tdmax_c` | ยฐC | ื˜ืžืคืจื˜ื•ืจืช ืžืงืกื™ืžื•ื (ื‘ืžื”ืœืš ื”ืžืจื•ื•ื—) |
| 9 | TDmin| `tdmin_c` | ยฐC | ื˜ืžืคืจื˜ื•ืจืช ืžื™ื ื™ืžื•ื (ื‘ืžื”ืœืš ื”ืžืจื•ื•ื—) |
| 10 | Grad | `ghi_w_m2` | W/mยฒ| ืงืจื™ื ื” ื’ืœื•ื‘ืœื™ืช ืื•ืคืงื™ืช (GHI) |
- ืื `channel_radiation` ืžื•ื’ื“ืจ ื›ึพ`null` ื‘ืชืฆื•ืจื” (ืชื—ื ื” ืœืœื Grad), ืขืžื•ื“ืช ื”ืงืจื™ื ื” ืœื ื ืžืฉื›ืช ื•ืžื•ืคื™ืขื” ืจืง ื˜ืžืคืจื˜ื•ืจื”.
### ื˜ื•ื•ื— ื–ืžืŸ ื•ืจื–ื•ืœื•ืฆื™ื”
- **ื˜ื•ื•ื— ื‘ืจื™ืจืช ืžื—ื“ืœ:** ืฉื ืชื™ื™ื ืื—ื•ืจื” ืžืชืืจื™ืš ื”ื”ืจืฆื” (ื ื™ืชืŸ ืœืฉื ื•ืช ืขื `--from`, `--to` ืื• `--years`).
- **ืจื–ื•ืœื•ืฆื™ื”:** ื ืชื•ื ื™ IMS ื‘ืชื“ื™ืจื•ืช 10 ื“ืงื•ืช; ื ืฉืžืจื™ื ื›ืคื™ ืฉื”ืชืงื‘ืœื• (ืœื ืžืฆื•ื ื ื™ื).
- **ื‘ืงืฉื•ืช:** ื˜ื•ื•ื— ืฉืœ ื™ื•ืชืจ ืžึพ60 ื™ื•ื ืžืคื•ืฆืœ ืœื—ืœืงื™ื (chunks) ื›ื“ื™ ืœืžื ื•ืข ืชื’ื•ื‘ื•ืช ืจื™ืงื•ืช ืžื”ึพAPI; ื‘ื™ืŸ ื‘ืงืฉื•ืช ื™ืฉ ื”ืฉื”ื™ื™ื” ืงืฆืจื”.
### ืขื™ื‘ื•ื“ ืœืคื ื™ ืฉืžื™ืจื”
1. **ื”ืžืจืช ื–ืžืŸ:** ื—ื•ืชืžื•ืช ื”ื–ืžืŸ ืžื’ื™ืขื•ืช ืžึพIMS ื‘ื–ืžืŸ ื™ืฉืจืืœ (UTC+2/UTC+3). ื›ืœ ื”ืชืืจื™ื›ื™ื ืžื•ืžืจื™ื ืœึพ**UTC** ืœืคื ื™ ืฉืžื™ืจื”.
2. **ืžื™ื–ื•ื’ ืขืจื•ืฆื™ื:** ื›ืœ ืขืจื•ืฅ ื ืžืฉืš ื‘ื ืคืจื“; ื”ืฉื•ืจื•ืช ืžืžื•ื–ื’ื•ืช ืœืคื™ `timestamp_utc` (ืื™ื—ื•ื“ ืื™ื ื“ืงืกื™ื โ€“ ื—ืกืจื™ื ืžืกื•ืžื ื™ื ื›ึพNaN).
3. **ืกื™ื ื•ืŸ ื˜ืžืคืจื˜ื•ืจื”:** ืขืจื›ื™ื ืžื—ื•ืฅ ืœื˜ื•ื•ื— **ึพ50 ืขื“ 60 ยฐC** (ืœืžืฉืœ ืขืจื•ืฅ Time hhmm ืฉื ื“ื‘ืง ื‘ื˜ืขื•ืช) ืžื•ื—ืœืคื™ื ื‘ึพNaN.
4. **ืžืงื•ืจ:** ื ื•ืกืคืช ืขืžื•ื“ื” `source` ืขื ื”ืขืจืš `ims`.
### ืื™ืคื” ื•ืื™ืš ื ืฉืžืจื™ื ื”ื ืชื•ื ื™ื
| ืคืจื™ื˜ | ืขืจืš |
|------|-----|
| **ืงื•ื‘ืฅ ืคืœื˜** | `data/ims_radiation_temperature.csv` (ื ืชื™ื‘: `config.data_paths.IMS_RADIATION_TEMPERATURE_CSV`) |
| **ืคื•ืจืžื˜** | CSV (ืคืกื™ืง ื›ืžืคืจื™ื“) |
| **ืงื™ื“ื•ื“** | ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ pandas (ื‘ื“ืจืš ื›ืœืœ UTF-8) |
**ืขืžื•ื“ื•ืช ื‘ืงื•ื‘ืฅ:**
| ืขืžื•ื“ื” | ืชื™ืื•ืจ | ื™ื—ื™ื“ื•ืช |
|--------|--------|--------|
| `timestamp_utc` | ื—ื•ืชืžืช ื–ืžืŸ (UTC) | ISO format, timezone-aware UTC |
| `air_temperature_c` | ื˜ืžืคืจื˜ื•ืจืช ืื•ื•ื™ืจ | ยฐC |
| `tdmax_c` | ื˜ืžืคืจื˜ื•ืจื” ืžืงืกื™ืžืœื™ืช | ยฐC |
| `tdmin_c` | ื˜ืžืคืจื˜ื•ืจื” ืžื™ื ื™ืžืœื™ืช | ยฐC |
| `ghi_w_m2` | ืงืจื™ื ื” ื’ืœื•ื‘ืœื™ืช ืื•ืคืงื™ืช (Grad) | W/mยฒ |
| `source` | ืžืงื•ืจ ื”ื ืชื•ืŸ | ืชืžื™ื“ `ims` |
- ืขืžื•ื“ื•ืช ืฉืœื ื ืžืฉื›ื• (ืœืžืฉืœ ืงืจื™ื ื” ืื ืื™ืŸ ืขืจื•ืฅ Grad) ืœื ื™ื•ืคื™ืขื• ืื• ื™ื”ื™ื• ืจื™ืงื•ืช.
- ืฉื•ืจื•ืช ืขื NaN ื‘ื—ืœืง ืžื”ืขืžื•ื“ื•ืช ืืคืฉืจื™ื•ืช (ืœืžืฉืœ ืื™ึพื”ืชืืžื” ื‘ื–ืžื ื™ื ื‘ื™ืŸ ืขืจื•ืฆื™ื).
### ืฉื™ืžื•ืฉ ื‘ื ืชื•ื ื™ื ื‘ืคืจื•ื™ืงื˜
- ื”ืงื•ื‘ืฅ ืžืฉืžืฉ ื›ึพ**ืžืงื•ืจ ืžื˜ืื•ืจื•ืœื•ื’ื™ื” (IMS)** ืœึพ**Ground Truth** (ืžืฉื™ืžื” 1 โ€“ Data fusion).
- ืกืงืจื™ืคื˜ื™ื ื ื•ืกืคื™ื: `scripts/gap_fill_future.py` ืžืžืœื ืคืขืจื™ื (ื›ื•ืœืœ ืขืชื™ื“) ื•ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืœึพ`data/ims_radiation_temperature_gap_filled.csv`; `scripts/build_ground_truth.py` ืžืžื™ืจ/ืžืžื–ื’ ืœึพGround Truth (Parquet) ืœืคื™ ื”ืกื›ืžื” ื‘ึพ`context/05_ground_truth_schema.md`.
### ืืจื’ื•ืŸ ื”ื ืชื•ื ื™ื (ืช pipeline)
ืกื“ืจ ื”ืขื‘ื•ื“ื” ืœืคื™ ื”ืชื™ืขื•ื“:
1. **ื”ื•ืจื“ืช IMS (ื’ื•ืœืžื™)**
`python -m scripts.download_ims_data`
โ†’ ืคืœื˜: `data/ims_radiation_temperature.csv` (ืจื–ื•ืœื•ืฆื™ื” 10 ื“ืงื•ืช, UTC, ืกื™ื ื•ืŸ ื˜ืžืคืจื˜ื•ืจื” -50..60 ยฐC).
2. **ื”ืฉืœืžืช ืคืขืจื™ื (ื›ื•ืœืœ ืขืชื™ื“)**
`python -m scripts.gap_fill_future --input data/ims_radiation_temperature.csv`
โ†’ ืคืœื˜: `data/ims_radiation_temperature_gap_filled.csv` (ืจืฉืช ืจื’ื•ืœืจื™ืช, quality_flag).
3. **ื‘ื ื™ื™ืช Ground Truth (Parquet)**
`python -m scripts.build_ground_truth`
โ†’ ืคืœื˜: `data/ground_truth/ground_truth_2024_2025.parquet` + `ground_truth_metadata.json` (ืจื–ื•ืœื•ืฆื™ื” 15 ื“ืงื•ืช).
ื”ืจืฆืช ื›ืœ ื”ืฆืขื“ื™ื ื‘ืจืฆืฃ (ืื ืงื™ื™ื ืงื•ื‘ืฅ ื’ื•ืœืžื™):
```bash
python -m scripts.download_ims_data && \
python -m scripts.gap_fill_future --input data/ims_radiation_temperature.csv && \
python -m scripts.build_ground_truth
```
ืื• ืขื“ื›ื•ืŸ ืื•ื˜ื•ืžื˜ื™ (ื›ื•ืœืœ TB/DB): `python -m scripts.update_ground_truth`.
---
## ื ืกืคื— โ€“ ืคืงื•ื“ื•ืช API (ืžืงื•ืจ: ื”ืฉื™ืจื•ืช ื”ืžื˜ืื•ืจื•ืœื•ื’ื™)
ืชื™ืขื•ื“ ื–ื” ืžื‘ื•ืกืก ืขืœ ื”ืžืกืžืš ื”ืจืฉืžื™ **"ืžืžืฉืง ืขื‘ื•ืจ ืžืื’ืจ ื”ื ืชื•ื ื™ื ื”ืžื˜ืื•ืจื•ืœื•ื’ื™ื™ื ื”ืขืฉืจ ื“ืงืชื™ื™ื"** โ€“ ืžืฉืจื“ ื”ืชื—ื‘ื•ืจื”, ื”ืฉื™ืจื•ืช ื”ืžื˜ืื•ืจื•ืœื•ื’ื™ (ืชืืจื™ืš ืขื“ื›ื•ืŸ 11.05.2017). ืžืงื•ืจ: ืงื•ื‘ืฅ "ืคืงื•ื“ื•ืช API" ืžื”ืฉืž"ื˜. ื›ึพ85 ืชื—ื ื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช; ื”ื ืชื•ื ื™ื ื ืžืฉื›ื™ื ื‘ืคื•ืจืžื˜ JSON.
### ืื™ืžื•ืช (Authorization)
- **ืฉื™ื˜ื”:** `Authorization: ApiToken XXXX`
- **ืงื‘ืœืช TOKEN:** ืคื ื™ื™ื” ื‘ืžื™ื™ืœ ืœึพ**ims@ims.gov.il**
- ื‘ืคืจื•ื™ืงื˜: ืžืฉืชื ื” ืกื‘ื™ื‘ื” `IMS_API_TOKEN` (ื ืฉืžืจ ื‘ึพ`.env`).
### ืžื•ืกื›ืžืช ื–ืžืŸ
- **ื›ืœ ื”ืฉื ื” ืœืคื™ ื–ืžืŸ ืžืงื•ืžื™ ืชืงื ื™ (LST)** โ€“ ืฉืขื•ืŸ ื—ื•ืจืฃ.
- ื‘ืชืงื•ืคืช ืฉืขื•ืŸ ืงื™ืฅ ื™ืฉ ื”ืคืจืฉ ืฉืœ ืฉืขื” ื‘ื™ืŸ `datetime` ื”ืžื•ืฆื’ ืœื–ืžืŸ ื‘ืคื•ืขืœ (ืœืžืฉืœ ืื•ืงื˜ื•ื‘ืจ: 11:40+03:00 ืžื•ืฆื’ ื‘ืขื•ื“ ืฉื‘ืคื•ืขืœ 12:40).
- ื‘ืกืงืจื™ืคื˜ ืฉืœื ื•: ื›ืœ ื—ื•ืชืžื•ืช ื”ื–ืžืŸ ืžื•ืžืจื•ืช ืœึพ**UTC** ืœืคื ื™ ืฉืžื™ืจื”.
### ืžื˜ื”ึพื“ืื˜ื”: ืชื—ื ื•ืช ื•ืื–ื•ืจื™ื
ืžื–ื”ื™ ืžืง placeholders: `{%ST_ID%}` = ืžืกืคืจ ืชื—ื ื”, `{%REG_ID%}` = ืžืกืคืจ ืื–ื•ืจ, `{%CH_ID%}` = ืžืกืคืจ ืขืจื•ืฅ. ืชืืจื™ืš: `YYYY/MM/DD`, `MM` = ื—ื•ื“ืฉ (ืœืžืฉืœ 05), `DD` = ื™ื•ื (ืœืžืฉืœ 28).
**ืชื—ื ื•ืช:**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ืžื™ื“ืข ืขืœ ื›ืœ ื”ืชื—ื ื•ืช | `https://api.ims.gov.il/v1/envista/stations` |
| ืžื™ื“ืข ืขืœ ืชื—ื ื” ืกืคืฆื™ืคื™ืช | `https://api.ims.gov.il/v1/envista/stations/{%ST_ID%}` |
ืชื’ื•ื‘ืช ืชื—ื ื” ื›ื•ืœืœืช: `name`, `location`, `regionId`, `monitors` (ืจืฉื™ืžืช ืขืจื•ืฆื™ื). ืœื›ืœ ืขืจื•ืฅ: `active`, `channelId`, `name`, `typeId`, `units`.
**ืื–ื•ืจื™ื:**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ืžื™ื“ืข ืขืœ ื›ืœ ื”ืื–ื•ืจื™ื (ื›ื•ืœืœ ืชื—ื ื•ืช) | `https://api.ims.gov.il/v1/envista/regions` |
| ืžื™ื“ืข ืขืœ ืื–ื•ืจ ืกืคืฆื™ืคื™ | `https://api.ims.gov.il/v1/envista/regions/{%REG_ID%}` |
ืื–ื•ืจ ื›ื•ืœืœ: ืžืกืคืจ ืื–ื•ืจ, ืฉื, ืจืฉื™ืžืช ืชื—ื ื•ืช ื•ื”ืขืจื•ืฆื™ื ืฉืœื”ืŸ.
### ืžืฉื™ื›ืช ื ืชื•ื ื™ื ืžื˜ืื•ืจื•ืœื•ื’ื™ื™ื ืžืชื—ื ื”
ื‘ืกื™ืก: `https://api.ims.gov.il/v1/envista/stations/{%ST_ID%}/data/...`
**ื ืชื•ื ื™ื ืื—ืจื•ื ื™ื / ื™ืฉื ื™ื ื‘ื™ื•ืชืจ:**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ืื—ืจื•ื ื™ื โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/latest` |
| ืื—ืจื•ื ื™ื โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}/latest` |
| ื™ืฉื ื™ื ื‘ื™ื•ืชืจ โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/earliest` |
| ื™ืฉื ื™ื ื‘ื™ื•ืชืจ โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}/earliest` |
**ื”ื™ื•ื / ื”ื—ื•ื“ืฉ ื”ื ื•ื›ื—ื™:**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ื ืชื•ื ื™ื ืžื”ื™ื•ื โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/daily` |
| ื ืชื•ื ื™ื ืžื”ื™ื•ื โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}/daily` |
| ื ืชื•ื ื™ื ืžื”ื—ื•ื“ืฉ โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/monthly` |
| ื ืชื•ื ื™ื ืžื”ื—ื•ื“ืฉ โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}/monthly` |
**ื™ื•ื / ื—ื•ื“ืฉ ืžืกื•ื™ื:**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ื™ื•ื ืžืกื•ื™ื โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/daily/YYYY/MM/DD` |
| ื™ื•ื ืžืกื•ื™ื โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/daily/{%CH_ID%}/YYYY/MM/DD` |
| ื—ื•ื“ืฉ ืžืกื•ื™ื โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data/monthly/YYYY/MM` |
| ื—ื•ื“ืฉ ืžืกื•ื™ื โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}/monthly/YYYY/MM` |
**ื˜ื•ื•ื— ืชืืจื™ื›ื™ื (ื–ื” ืžื” ืฉื”ืกืงืจื™ืคื˜ ืžืฉืชืžืฉ ื‘ื•):**
| ืชื™ืื•ืจ | ื›ืชื•ื‘ืช |
|--------|--------|
| ื˜ื•ื•ื— โ€“ ื›ืœ ื”ืขืจื•ืฆื™ื | `.../stations/{%ST_ID%}/data?from=YYYY/MM/DD&to=YYYY/MM/DD` |
| ื˜ื•ื•ื— โ€“ ืขืจื•ืฅ ืกืคืฆื™ืคื™ | `.../stations/{%ST_ID%}/data/{%CH_ID%}?from=YYYY/MM/DD&to=YYYY/MM/DD` |
### ืžื‘ื ื” ืชื’ื•ื‘ืช ื ืชื•ื ื™ื
- **ืžืกืคืจ ื”ืชื—ื ื”**
- **ื–ืžืŸ ื”ืžื“ื™ื“ื”** (`datetime`)
- **ืจืฉื™ืžืช ืขืจื•ืฆื™ื**, ืœื›ืœ ืขืจื•ืฅ:
- `id` โ€“ ืžืก' ืขืจื•ืฅ
- `name` โ€“ ืฉื ื”ืขืจื•ืฅ
- `status` โ€“ **1** = ืชืงื™ืŸ, **2** = ืœื ืชืงื™ืŸ (ื›ืืฉืจ Status=2 ื”ื ืชื•ื ื™ื ืœื ืชืงื™ื ื™ื)
- `valid` โ€“ `true` / `false`
- ืขืจืš ืžืกืคืจื™ ืฉืœ ื”ืคืจืžื˜ืจ ื”ื ืžื“ื“
**ื”ืขืจื”:** ืœื ื›ืœ ื”ืชื—ื ื•ืช ืžื•ื“ื“ื•ืช ืืช ื›ืœ ื”ืžืฉืชื ื™ื; **ืžืก' ื”ืขืจื•ืฅ ืœืื•ืชื• ืžืฉืชื ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื•ื ื” ืžืชื—ื ื” ืœืชื—ื ื”**. ื›ื“ื™ ืœื“ืขืช ืืช ืžืก' ื”ืขืจื•ืฅ โ€“ ืœื”ืจื™ืฅ ืžื˜ื”ึพื“ืื˜ื” ืขืœ ื”ืชื—ื ื” (ืื• `--list-stations` ื‘ืกืงืจื™ืคื˜).
### ืจืฉื™ืžืช ืžืฉืชื ื™ื ืžื˜ืื•ืจื•ืœื•ื’ื™ื™ื (CHANNEL) โ€“ ื ืกืคื— ื’'
ืžืฉืชื ื™ื ืฉื”ืชื—ื ื•ืช ืขืฉื•ื™ื•ืช ืœืžื“ื•ื“ (ืฉื ื”ืขืจื•ืฅ ื‘-API, ื™ื—ื™ื“ื•ืช, ืชื™ืื•ืจ):
| ืžืฉืชื ื” | ื™ื—ื™ื“ื•ืช | ืชื™ืื•ืจ |
|--------|--------|--------|
| BP | mb | ืœื—ืฅ ื‘ื’ื•ื‘ื” ื”ืชื—ื ื” |
| DiffR | w/mยฒ | ืงืจื™ื ื” ืžืคื•ื–ืจืช |
| Grad | w/mยฒ | ืงืจื™ื ื” ื’ืœื•ื‘ืœื™ืช (GHI) |
| NIP | w/mยฒ | ืงืจื™ื ื” ื™ืฉื™ืจื” |
| Rain | mm | ื›ืžื•ืช ื’ืฉื |
| RH | % | ืœื—ื•ืช ื™ื—ืกื™ืช |
| STDwd | deg | ืกื˜ื™ื™ืช ืชืงืŸ ืฉืœ ื›ื™ื•ื•ืŸ ื”ืจื•ื— |
| TD | degC | ื˜ืžืคืจื˜ื•ืจื” ื™ื‘ืฉื” (ืื•ื•ื™ืจ) |
| TDmax | degC | ื˜ืžืคืจื˜ื•ืจืช ืžืงืกื™ืžื•ื |
| TDmin | degC | ื˜ืžืคืจื˜ื•ืจืช ืžื™ื ื™ืžื•ื |
| TG | degC | ื˜ืžืคืจื˜ื•ืจื” ืœื™ื“ ื”ืงืจืงืข |
| Time | hhmm | ื–ืžืŸ ืกื™ื•ื 10 ื”ื“ืงื•ืช ื”ืžืงืกื™ืžืœื™ื•ืช |
| WD | deg | ื›ื™ื•ื•ืŸ ื”ืจื•ื— |
| WDmax | deg | ื›ื™ื•ื•ืŸ ื”ืžืฉื‘ ื”ืขืœื™ื•ืŸ |
| WS | m/sec | ืžื”ื™ืจื•ืช ื”ืจื•ื— |
| Ws10mm | m/sec | ืžื”ื™ืจื•ืช ืจื•ื— 10 ื“ืงืชื™ืช ืžืงืกื™ืžืœื™ืช |
| WS1mm | m/sec | ืžื”ื™ืจื•ืช ืจื•ื— ื“ืงืชื™ืช ืžืงืกื™ืžืœื™ืช |
| WSmax | m/sec | ืžื”ื™ืจื•ืช ื”ืžืฉื‘ ื”ืขืœื™ื•ืŸ |
ื‘ืคืจื•ื™ืงื˜ ื ืžืฉื›ื™ื ื›ื™ื•ื: **TD, TDmax, TDmin, Grad** (ืชื—ื ื” 43 โ€“ ืฉื“ื” ื‘ื•ืงืจ). ืฉืืจ ื”ืžืฉืชื ื™ื (ืœื—ืฅ, ื’ืฉื, ืจื•ื—, ืœื—ื•ืช, ืงืจื™ื ื” ืžืคื•ื–ืจืช/ื™ืฉื™ืจื” ื•ื›ื•') ื–ืžื™ื ื™ื ื‘ืื•ืชื• API ืœืคื™ ืžืก' ืขืจื•ืฅ ืœื›ืœ ืชื—ื ื”.
### ืฉื™ืžื•ืฉ ื‘-Fiddler (ื ืกืคื— ื‘')
ืœื‘ื“ื™ืงื•ืช: ื›ืœื™ ื—ื™ื ืžื™ Fiddler. ื‘-Composer: GET ืขื ื”ื›ืชื•ื‘ืช ื”ืจืฆื•ื™ื”, ื•ื‘ึพHeader: `Authorization: ApiToken XXXX`.
---
## ืžื” ื‘ื•ืฆืข
### 1. ืกืงืจื™ืคื˜ ื”ื•ืจื“ืช ื ืชื•ื ื™ื IMS (`scripts/download_ims_data.py`)
- **ืžื˜ืจื”:** ื”ื•ืจื“ืช ื ืชื•ื ื™ื ื”ื™ืกื˜ื•ืจื™ื™ื ืฉืœ ืงืจื™ื ื” (Grad โ‰ˆ GHI) ื•ื˜ืžืคืจื˜ื•ืจื” (TD, TDmax, TDmin) ืž-IMS ืœืฉื ืชื™ื™ื ืื—ื•ืจื”.
- **API:** `https://api.ims.gov.il/v1/envista/stations/{STATION_ID}/data/{CHANNEL_ID}/?from=YYYY/MM/DD&to=YYYY/MM/DD`
- **ืื™ืžื•ืช:** ื˜ื•ืงืŸ IMS โ€“ ืœื‘ืงืฉ ืž-ims@ims.gov.il (ืชื ืื™ ืฉื™ืžื•ืฉ: https://ims.gov.il/en/ObservationDataAPI).
- **ืžืฉืชื ื” ืกื‘ื™ื‘ื”:** `IMS_API_TOKEN` (ืื• `IMS_TOKEN`) โ€“ ืžื•ืžืœืฅ ืœื”ื’ื“ื™ืจ ื‘ึพ`.env`.
- **ืชืฆื•ืจื”:** ืชื—ื ื” ื•ืขืจื•ืฆื™ื ื‘ึพ`config/dev.yaml` ืชื—ืช `ims:` (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืชื—ื ื” **43 โ€“ ืฉื“ื” ื‘ื•ืงืจ**, ื“ื•ืžื” ืœื™ืจื•ื—ื; ืชื—ื ื” 98 = ื ื‘ื˜ื™ื).
- **ืคืœื˜:** `data/ims_radiation_temperature.csv` ืขื ืขืžื•ื“ื•ืช ืงื ื•ื ื™ื•ืช: `timestamp_utc`, `air_temperature_c`, `ghi_w_m2`, `tdmax_c`, `tdmin_c`, `source=ims`. ื—ื•ืชืžื•ืช ื”ื–ืžืŸ ืžื•ืžืจื•ืช ืžื™ืฉืจืืœ (UTC+2/3) ืœ-UTC.
**ืฉื™ืžื•ืฉ:**
```bash
# ืจืฉื™ืžืช ืชื—ื ื•ืช (ื“ื•ืจืฉ ื˜ื•ืงืŸ)
python -m scripts.download_ims_data --list-stations
# ื”ื•ืจื“ื” ืœืฉื ืชื™ื™ื ืื—ื•ืจื” (ื‘ืจื™ืจืช ืžื—ื“ืœ)
python -m scripts.download_ims_data
# ื˜ื•ื•ื— ืชืืจื™ื›ื™ื ื™ื“ื ื™
python -m scripts.download_ims_data --from 2024-01-01 --to 2025-12-31 --station 43
```
**ื”ืขืจื”:** ืžื–ื”ื™ ื”ืขืจื•ืฆื™ื (channel IDs) ืชืœื•ื™ื™ื ื‘ืชื—ื ื”; ื™ืฉ ืœืืžืช ืžื•ืœ ื”-API ืื• ืชื™ืขื•ื“ IMS (ืœืžืฉืœ ืชื—ื ื” 28: TDmax=10, TDmin=11).
---
### 2. ืกืงืจื™ืคื˜ ื”ืฉืœืžืช ืคืขืจื™ื ืœืขืชื™ื“ (`scripts/gap_fill_future.py`)
- **ืžื˜ืจื”:** ื”ืฉืœืžืช ืคืขืจื™ื ื‘ืขืชื™ื“ โ€“ ืจืฉืช ื–ืžืŸ ืจื’ื•ืœืจื™ืช ืžื”ืชืืจื™ืš ื”ืื—ืจื•ืŸ ื‘ื ืชื•ื ื™ื ืขื“ ืชืืจื™ืš ืกื™ื•ื (ืื•ืคืฆื™ื•ื ืœื™), ืขื ืžื™ืœื•ื™ ืคืขืจื™ื ื‘-forward-fill ืื• ืื™ื ื˜ืจืคื•ืœืฆื™ื” ืœื™ื ื™ืืจื™ืช, ื•ืื•ืคืฆื™ื” ืœืžื™ื–ื•ื’ ืขื ืงื•ื‘ืฅ ืชื—ื–ื™ืช (ืœืžืฉืœ Open-Meteo).
- **ืงืœื˜:** ืงื•ื‘ืฅ IMS (ืื• ื›ืœ CSV ืขื `timestamp_utc` + ืขืžื•ื“ื•ืช ืžืกืคืจื™ื•ืช).
- **ืคืœื˜:** `data/ims_radiation_temperature_gap_filled.csv` ืขื ืขืžื•ื“ื” `quality_flag`: `observed` | `forward_fill` | `interpolated` | `forecast`.
**ืฉื™ืžื•ืฉ:**
```bash
# ื”ืฉืœืžืช ืคืขืจื™ื ืขื forward-fill ืขื“ ืกื•ืฃ ื”ื ืชื•ื ื™ื
python -m scripts.gap_fill_future --input data/ims_radiation_temperature.csv
# ื”ืืจื›ืช ืจืฉืช ืขื“ ืชืืจื™ืš ืขืชื™ื“ื™
python -m scripts.gap_fill_future --input data/ims_radiation_temperature.csv --end-date 2026-12-31
# ืžื™ืœื•ื™ ืขืชื™ื“ ืžืชื—ื–ื™ืช (ืœืžืฉืœ weather_forecast_cache)
python -m scripts.gap_fill_future --input data/ims_radiation_temperature.csv --forecast data/weather_forecast_cache.csv
```
---
### 3. ืขื“ื›ื•ื ื™ ืงื•ื ืคื™ื’ื•ืจืฆื™ื”
- **`config/data_paths.py`:** ื ื•ืกืคื• `IMS_RADIATION_TEMPERATURE_CSV`, `IMS_GAP_FILLED_CSV` ื•-CSV_SPECS ืžืชืื™ืžื™ื.
- **`config/dev.yaml`:** ื ื•ืกืฃ ื‘ืœื•ืง `ims:` ืขื `station_id`, `default_station_id`, ื•-channel IDs (ื ื™ืชืŸ ืœื”ืชืืžื” ืœืคื™ ืชื—ื ื”).
- **`config/env.example`:** ื ื•ืกืฃ `IMS_API_TOKEN` ืขื ื”ืขืจื” ืœื‘ืงืฉืช ื˜ื•ืงืŸ.
---
## ืžื” ื ืฉืืจ (ืื•ืคืฆื™ื•ื ืœื™)
- **ื•ืœื™ื“ืฆื™ื”:** ืœื”ืจื™ืฅ ื”ื•ืจื“ื” ืขื ื˜ื•ืงืŸ ืืžื™ืชื™ ื•ืœื•ื•ื“ื ื›ื™ืกื•ื™ ื•ืจื–ื•ืœื•ืฆื™ื” (ืฉืขืชื™/ื™ื•ืžื™) ืžื•ืœ ื“ืจื™ืฉื•ืช Ground Truth.
- **ื”ืชืืžืช ืชื—ื ื”/ืขืจื•ืฆื™ื:** ืชื—ื ื” 43 = ืฉื“ื” ื‘ื•ืงืจ (ื“ื•ืžื” ืœื™ืจื•ื—ื), ืชื—ื ื” 98 = ื ื‘ื˜ื™ื. ืœื”ืจื™ืฅ `--list-stations` ืœืขื“ื›ื•ืŸ ืชื—ื ื”/ืขืจื•ืฆื™ื.
---
## ืกื™ื›ื•ื
| ืคืจื™ื˜ | ืกื˜ื˜ื•ืก |
|------|--------|
| ืชื™ืขื•ื“/ื’ื™ืฉื” ืœ-IMS API | ื‘ื•ืฆืข โ€“ ืชื™ืขื•ื“ ื•ืกืงืจื™ืคื˜ |
| ืกืงืจื™ืคื˜ ื”ื•ืจื“ื” (ืฉื ืชื™ื™ื ืื—ื•ืจื”) | ื‘ื•ืฆืข โ€“ `download_ims_data.py` |
| ืžื™ืคื•ื™ ืœืกื›ืžื” ืงื ื•ื ื™ืช + CSV | ื‘ื•ืฆืข โ€“ `timestamp_utc`, `air_temperature_c`, `ghi_w_m2`, ื•ื›ื•' |
| ืกืงืจื™ืคื˜ ื”ืฉืœืžืช ืคืขืจื™ื ืœืขืชื™ื“ | ื‘ื•ืฆืข โ€“ `gap_fill_future.py` |
| ื•ืœื™ื“ืฆื™ื” ื›ื™ืกื•ื™/ืจื–ื•ืœื•ืฆื™ื” | ืžืžืชื™ืŸ โ€“ ื“ื•ืจืฉ ื˜ื•ืงืŸ IMS ื•ื”ืจืฆื” |