diff --git a/Nuvolari/docs/data-sources.md b/Nuvolari/docs/data-sources.md index 01243e3..b056722 100644 --- a/Nuvolari/docs/data-sources.md +++ b/Nuvolari/docs/data-sources.md @@ -126,26 +126,85 @@ constantly updated, machine-readable and free of charge. 1. **The access link is not public.** The page states that to obtain the real-time link for radar and radiosonde data *"è necessario inviare una e-mail all'indirizzo info.meteo@arpa.piemonte.it"*. There is no documented endpoint to call without it. -2. **No licence is stated.** The page says the data is *gratuiti* — free of charge — and - nothing more. Free of charge is not a licence. Rendering these volumes into PNG frames - and republishing them through a CDN to app users is redistribution, and without stated - terms there is no permission to point at. The email should ask for the reuse terms as - well as the link. +2. **The licence is stated site-wide, not on that page.** The open-data page itself says + only that the data is *gratuiti*. ARPA's legal notice at + does state a licence for environmental and + open data: **CC BY 4.0, commercial use permitted**, crediting + *"Fonte: Arpa Piemonte - www.arpa.piemonte.it"*. Logos, emblems and third-party + content are excluded from it. -Until both are answered, `ArpaRadarSource` stays a stub whose every method throws. It is + Both ARPA REST APIs link that same notice from their OpenAPI `description`, so for + them the licence is unambiguous. The radar page does not repeat it, so the safe move + is to ask ARPA to confirm the terms apply to the radar volumes in the same email that + requests the access link. + +Until the link exists, `ArpaRadarSource` stays a stub whose every method throws. It is named by the region config as unavailable so the seam is visible, not because it is nearly ready. -> Earlier drafts of this document recorded ARPA radar as CC BY 4.0. The open-data page -> does not support that, so the claim has been removed rather than carried forward. +## 3. ARPA Piemonte REST APIs — surveyed 2026-09-10, not yet adopted -## 3. Forecast — out of scope +Two public APIs, **no authentication, no key, no registration**. Both link + from their OpenAPI `description`, so both are +CC BY 4.0 with commercial use permitted. + +### `api_realtime` — + +Spec at `/api_realtime/openapi.json` (the `/docs` page is JS-rendered and cannot be +scraped; fetch the spec instead). + +| Endpoint | Content | +|---|---| +| `GET /pie_anag` | Station registry: **374 stations**, `lat`/`lng`, elevation, municipality, province, basin, sensor letters | +| `GET /data_pie` | Hourly observations, last 3 days: `air_temperature`, `humidity`, `cum_rain_1h/3h/6h/12h/24h`, `wind`, `gust_of_wind` + directions, `snow_height`, `hydrometric_level`. Paginated | +| `GET /pie_neve` | Daily validated snow height, 08:00 | +| `GET /ggd` | Heating and cooling degree days | +| `GET /status` | Health check | + +Sensor coverage across the 374 stations: **286 with a rain gauge (P)**, 277 temperature, +143 hydrometer (H), 90 wind, 79 snow. Rain gauges span 74 m to 2820 m elevation. + +**Measured latency: ~4.5 hours**, uniform across every station sampled at 16:30 on +2026-09-10, on an hourly cadence. This is the single most important property of the feed: +it is an observation archive with a publishing delay, **not** a real-time source, and it +cannot be presented alongside 5-minute radar as if it were current. + +**Hydrometric thresholds are effectively absent**: only 4 of 143 hydrometer stations +carry `guard_threshold` / `danger_threshold`, and only 5 carry a river name. A river-level +warning feature built on this would be blank for 97% of stations. + +### Meteoweb — + +Spec at `/schema/` (YAML). Django REST Framework, hyperlinked, paginated. + +Historical archive under `/meteoidro/`: daily and monthly meteo (**3.27 M** daily +records), hydrological (**931 k**), snow, century-long series, annual rainfall maxima, +flow-duration curves and rating curves, plus the station and measurement-point +registries. Latest daily data was one day behind (`2026-09-09`). + +Also `/sismica/`: **35 910** seismic events since 2000 with position, depth and +magnitude, and the seismic classification of municipalities. + +### Verdict + +Only one thing here is on-scope: **rain-gauge accumulations as ground truth for the +radar**. Radar infers rainfall from reflectivity aloft; gauges measure what actually +reached the ground, and the network is dense exactly where Alpine terrain blocks the +radar beam. Worth adding as a clearly-timestamped observations layer once the worker +exists — never as a live reading. + +Everything else is out of scope for this app: snow depth, degree days, the historical +archive and the seismic catalogue all belong to a different product. Hydrometric levels +would be valuable during heavy rain but the thresholds that would make them meaningful +are not published. + +## 4. Forecast — out of scope The app shows radar, not forecasts. No forecast provider is integrated, and MET Norway, ItaliaMeteo ICON-2I and Open-Meteo are all out of scope. See CLAUDE.md for the current scope boundary. -## 4. Alerts — ARPA Piemonte XML-CAP +## 5. Alerts — ARPA Piemonte XML-CAP - Feed: `https://www.arpa.piemonte.it/export/xmlcap/allerta.xml` - Landing page: @@ -227,7 +286,7 @@ come from the ARPA zone documentation. A captured copy of the live feed is kept as a test fixture so the parser is verified against the real document rather than a hand-written approximation. -## 5. Base map — OpenFreeMap +## 6. Base map — OpenFreeMap OpenStreetMap vector tiles served by **OpenFreeMap** (). @@ -262,7 +321,7 @@ bounding box — flat background plus the extent outline, no network sources at deliberately plain so it is never mistaken for a finished map, and it is what the widget tests run against. -## 6. Lightning — out of scope +## 7. Lightning — out of scope Not part of the app. If it is ever revisited: **Blitzortung prohibits commercial use**, and the DPC `LTG` product is the source to reach for instead. diff --git a/Nuvolari/docs/licenses.md b/Nuvolari/docs/licenses.md index 6543278..f463eee 100644 --- a/Nuvolari/docs/licenses.md +++ b/Nuvolari/docs/licenses.md @@ -9,8 +9,8 @@ to save screen space. | Data | License | Mandatory credit | Notes | |---|---|---|---| | Radar-DPC rasters | CC BY-SA | "Radar-DPC" | **Share-alike propagates to our frames** | -| ARPA Piemonte radar | **none stated** | — | Adapter disabled; see below | -| ARPA Piemonte alerts | not stated | "Arpa Piemonte" + link to the official bulletin | Levels republished verbatim | +| ARPA Piemonte data | CC BY 4.0, commercial OK | "Fonte: Arpa Piemonte - www.arpa.piemonte.it" | Radar volumes: licence not repeated on their page, access by email | +| ARPA Piemonte alerts | CC BY 4.0 (site notice) | as above, + link to the official bulletin | Levels republished verbatim | | OpenStreetMap data | ODbL | "© OpenStreetMap contributors" | Must stay visible on the map | | OpenMapTiles schema | BSD 3-Clause | "© OpenMapTiles" | Must stay visible on the map | | OpenFreeMap service | MIT | "OpenFreeMap" — optional | Listed on the Sources screen | @@ -29,18 +29,24 @@ The manifest carries its own `attribution` string for exactly this reason: the c travels with the frames rather than being remembered at render time, and the app displays whatever the publisher of those frames says to display. -## ARPA Piemonte radar: free of charge is not a licence +## ARPA Piemonte: CC BY 4.0, stated in the legal notice -The ARPA open-data page describes the radar volumes as *gratuiti* and says nothing about -reuse terms. That is not permission to redistribute. Rendering those volumes into frames -and serving them from our CDN to app users **is** redistribution. +ARPA's legal notice at releases environmental +and open data under **CC BY 4.0**, explicitly permitting commercial use, and requires the +credit *"Fonte: Arpa Piemonte - www.arpa.piemonte.it"*. Logos, institutional emblems, +registered trademarks and third-party content are excluded. -So the adapter stays disabled until ARPA states terms, and the email that requests the -access link should ask for the reuse terms in the same breath. Both are the project -owner's to obtain — see [data-sources.md](data-sources.md) section 2. +Both ARPA REST APIs — `api_realtime` and Meteoweb — link that notice from their OpenAPI +`description`, so anything served by them is covered without further correspondence. -An earlier draft of this file recorded ARPA radar as CC BY 4.0. The source page does not -support that, so the claim has been removed rather than carried forward. +The **radar volumes** are the one gap: their open-data page says only *gratuiti* and does +not repeat the licence, and the real-time access link is issued by email. Ask ARPA to +confirm both in the same message. Until then the radar adapter stays disabled — see +[data-sources.md](data-sources.md) section 2. + +The credit string ARPA asks for is the full *"Fonte: Arpa Piemonte - +www.arpa.piemonte.it"*, not the bare name currently in the region config. Adopt the full +form the moment any ARPA-sourced data is actually displayed. ## Base map credits are not automatic