docs: align with AirCarto 2026 JSON template + fix ISO mapping
formats/json-payload.md: full rewrite around the actual server-side template
(endpoint api.aircarto.com/receive_data?device_type=<model>, flat schema,
_unit suffix companions, -1 and 255 sentinel semantics, full bitfield
tables for error_flags/npm_status/device_status, misc context codes).
formats/iso-pollutant-codes.md: fill in the LCSQA mapping. Fixes my earlier
inversion — ISO_39=PM2.5 and ISO_24=PM10 (not the other way). Add gases:
ISO_03=NO2, ISO_04=CO, ISO_05=H2S, ISO_08=O3, ISO_21=NH3.
parsers/udp-miotiq.md:
- string base function outputs hex (not ASCII) — update description and
generic Python parser accordingly.
- Fix ISO_39/ISO_24 labels in NebuleAir Pro 4G byte layout.
- Name the 5 gases by offset, cross-link bitfield docs and JSON canonical.
- New TODO: origin of latitude/longitude/misc in final JSON (not in 83B
descriptor).
README.md: reflect the new file layout and data flow summary.
This commit is contained in:
@@ -1,37 +1,37 @@
|
||||
# Codes polluants ISO — convention AirCarto
|
||||
|
||||
Les descripteurs Miotiq (voir [`parsers/udp-miotiq.md`](../parsers/udp-miotiq.md)) utilisent des codes `ISO_XX` pour désigner les grandeurs physiques et polluants. Ces codes sont inspirés de la norme **ISO 7168-2** (échange de données de qualité de l'air) et du vocabulaire EIONET / Directive européenne 2008/50/CE, mais le mapping exact **est la convention AirCarto** — à verrouiller ici.
|
||||
Les descripteurs Miotiq (voir [`parsers/udp-miotiq.md`](../parsers/udp-miotiq.md)) et le JSON canonique (voir [`json-payload.md`](json-payload.md)) utilisent des codes `ISO_XX` pour désigner les polluants et grandeurs physiques. Ces codes suivent la nomenclature du **LCSQA** (Laboratoire Central de Surveillance de la Qualité de l'Air), basée sur la norme **ISO 7168**.
|
||||
|
||||
Les codes vont théoriquement de `ISO_01` à `ISO_99`. Seuls ceux effectivement mesurés par au moins un capteur AirCarto sont documentés ici.
|
||||
|
||||
## Mapping
|
||||
|
||||
| Code | Grandeur / polluant | Unité de référence | Scale standard | Remarques |
|
||||
|----------|---------------------|--------------------|----------------|-----------|
|
||||
| `ISO_03` | *à confirmer* (gaz) | ppb | | Candidat : O₃ (ozone) |
|
||||
| `ISO_04` | *à confirmer* (gaz) | ppb | | Candidat : NO₂ |
|
||||
| `ISO_05` | *à confirmer* (gaz) | ppb | | Candidat : NO ou SO₂ |
|
||||
| `ISO_08` | *à confirmer* (gaz) | ppb | | Candidat : CO |
|
||||
| `ISO_21` | *à confirmer* (gaz) | ppb | | |
|
||||
| `ISO_24` | PM2.5 | µg/m³ | x/10 | Poussières fines |
|
||||
| `ISO_39` | PM10 | µg/m³ | x/10 | |
|
||||
| `ISO_53` | Pression | hPa | | Pression atmosphérique |
|
||||
| `ISO_54` | Température | °C | x/100 | |
|
||||
| `ISO_55` | Humidité relative | % | x/100 | |
|
||||
| `ISO_68` | PM1 | µg/m³ | x/10 | |
|
||||
| Code | Grandeur / polluant | Unité de référence | Equation descripteur Miotiq | Remarques |
|
||||
|----------|---------------------|--------------------|------------------------------|------------------------------|
|
||||
| `ISO_03` | NO₂ — dioxyde d'azote | ppb | | |
|
||||
| `ISO_04` | CO — monoxyde de carbone | ppb | | |
|
||||
| `ISO_05` | H₂S — sulfure d'hydrogène | ppb | | |
|
||||
| `ISO_08` | O₃ — ozone | ppb | | |
|
||||
| `ISO_21` | NH₃ — ammoniac | ppb | | |
|
||||
| `ISO_24` | PM10 | µg/m³ | `x/10` | Particules ≤ 10 µm |
|
||||
| `ISO_39` | PM2.5 | µg/m³ | `x/10` | Particules fines ≤ 2.5 µm |
|
||||
| `ISO_53` | Pression | hPa | | Pression atmosphérique |
|
||||
| `ISO_54` | Température | °C | `x/100` | |
|
||||
| `ISO_55` | Humidité relative | % | `x/100` | |
|
||||
| `ISO_68` | PM1 | µg/m³ | `x/10` | Particules ultrafines ≤ 1 µm |
|
||||
|
||||
## Règles
|
||||
|
||||
- Un code ISO est **unique** au sein de l'écosystème AirCarto : pas de redéfinition par capteur.
|
||||
- Un nouveau polluant / nouvelle grandeur suit la numérotation ISO 7168-2 si elle existe ; sinon on alloue le prochain code libre au-dessus de 100 et on le documente ici.
|
||||
- Unité de référence : celle stockée dans InfluxDB (donc celle après application de `scale`). Les firmwares peuvent encoder à une précision différente, le `scale` ramène à l'unité finale.
|
||||
- Pour ajouter un polluant :
|
||||
1. Chercher son code dans la nomenclature LCSQA / ISO 7168.
|
||||
2. S'il existe, ajouter la ligne ici avec l'unité de référence et l'équation standard.
|
||||
3. S'il n'existe pas, allouer le prochain code libre > 70 et documenter la décision en « À faire » ci-dessous.
|
||||
- **Unité de référence** = unité stockée en base (après application de l'équation du descripteur). Les firmwares peuvent encoder à une précision différente, l'équation ramène à l'unité finale.
|
||||
- Les grandeurs **non-polluantes** propres aux capteurs AirCarto (bruit, vent, batterie, solaire…) ne reçoivent **pas** de code ISO : elles gardent leur nom `snake_case` (`wind_speed`, `battery_voltage`, etc.). Seuls les polluants atmosphériques et paramètres ambiants standard utilisent `ISO_XX`.
|
||||
|
||||
## À faire
|
||||
## Sources
|
||||
|
||||
- [ ] Remplir les gaz `ISO_03`, `ISO_04`, `ISO_05`, `ISO_08`, `ISO_21` — les 5 gaz du NebuleAir Pro 4G.
|
||||
- [ ] Vérifier que le mapping ci-dessus correspond bien à la norme ISO 7168-2 version utilisée en interne chez AirCarto.
|
||||
- [ ] Ajouter les codes pour les grandeurs qui n'existent pas encore en ISO : bruit (`noise_cur_leq`, etc.), vent, batterie, solaire — ou laisser en noms `snake_case` non-ISO comme aujourd'hui dans le descripteur.
|
||||
|
||||
## Références
|
||||
|
||||
- ISO 7168-2:1999 — Air quality — Exchange of data, Part 2: Condensed data format.
|
||||
- EIONET Air Quality data flow — https://www.eionet.europa.eu/
|
||||
- Directive 2008/50/CE — annexe listant les codes polluants européens.
|
||||
- **LCSQA** — nomenclature polluants : https://www.lcsqa.org/
|
||||
- **ISO 7168-2:1999** — Air quality — Exchange of data, Part 2: Condensed data format.
|
||||
- **Directive 2008/50/CE** — codes polluants européens.
|
||||
|
||||
Reference in New Issue
Block a user