84 lines
3.5 KiB
Markdown
84 lines
3.5 KiB
Markdown
# Format JSON canonique — mesures capteurs
|
|
|
|
Format recommandé pour tout nouvel envoi de mesures d'un capteur AirCarto vers un backend (HTTP POST, MQTT publish, webhook…).
|
|
|
|
> Les chemins d'envoi existants (Miotiq binaire 17 octets, CSV) restent documentés dans [`parsers/udp-miotiq.md`](../parsers/udp-miotiq.md) pour compatibilité. **Ce JSON est la cible** pour les nouveaux développements.
|
|
|
|
## Schéma
|
|
|
|
```json
|
|
{
|
|
"token": "string",
|
|
"ts": 1713830400,
|
|
"type_conn": "LTE-M",
|
|
"measurements": {
|
|
"pm1": 0.0,
|
|
"pm25": 0.0,
|
|
"pm10": 0.0,
|
|
"temperature": 0.0,
|
|
"humidity": 0.0
|
|
},
|
|
"gps": {
|
|
"lat": 43.605,
|
|
"lon": 1.444,
|
|
"sats": 8
|
|
},
|
|
"link": {
|
|
"signal": -78,
|
|
"imsi": "208xxxxxxxxxxx"
|
|
},
|
|
"fw": "1.4.2"
|
|
}
|
|
```
|
|
|
|
## Champs
|
|
|
|
| Champ | Type | Obligatoire | Description |
|
|
|-------------------------|---------|-------------|--------------------------------------------------------------------|
|
|
| `token` | string | oui | Identifiant unique du capteur (= clé en base `capteurs.capteurs`). |
|
|
| `ts` | integer | oui | Timestamp Unix UTC en secondes de la mesure (pas de la réception). |
|
|
| `type_conn` | string | oui | Un des : `WiFi`, `LTE-M`, `LTE-BIN`, `NB-IoT`, `LoRa`, `Ethernet`. |
|
|
| `measurements.pm1` | number | si mesuré | µg/m³ |
|
|
| `measurements.pm25` | number | si mesuré | µg/m³ |
|
|
| `measurements.pm10` | number | si mesuré | µg/m³ |
|
|
| `measurements.temperature` | number | si mesuré | °C |
|
|
| `measurements.humidity` | number | si mesuré | % HR |
|
|
| `gps.lat` | number | si GPS | Degrés décimaux WGS84, 6 décimales. |
|
|
| `gps.lon` | number | si GPS | Idem. |
|
|
| `gps.sats` | integer | si GPS | Nombre de satellites vus. |
|
|
| `link.signal` | integer | non | RSSI en dBm (négatif) **ou** % de qualité ; préciser dans `type_conn`. |
|
|
| `link.imsi` | string | non | IMSI de la SIM (modem cellulaire uniquement). |
|
|
| `fw` | string | non | Version firmware du capteur, ex. `1.4.2`. |
|
|
|
|
## Règles
|
|
|
|
- Omettre un champ si non mesuré. Ne pas envoyer `null` ni `-1` comme valeur sentinelle (hérité du legacy CSV Miotiq).
|
|
- `ts` côté capteur si dispo (GPS / NTP), sinon côté serveur à la réception — documenter au cas par cas dans la doc du capteur.
|
|
- Toutes les valeurs numériques utilisent le point `.` comme séparateur décimal.
|
|
- Un seul capteur par message. Pas de batch (à revoir si besoin).
|
|
|
|
## Réponse attendue du serveur
|
|
|
|
```json
|
|
{ "ok": true }
|
|
```
|
|
|
|
Ou en cas d'erreur :
|
|
|
|
```json
|
|
{ "ok": false, "error": "token inconnu" }
|
|
```
|
|
|
|
HTTP 200 dans les deux cas pour ne pas déclencher de retry cellulaire côté modem ; le `ok: false` indique à la supervision qu'il y a un problème applicatif.
|
|
|
|
## Exemple minimal
|
|
|
|
```json
|
|
{
|
|
"token": "001",
|
|
"ts": 1713830400,
|
|
"type_conn": "WiFi",
|
|
"measurements": { "pm25": 12.3 }
|
|
}
|
|
```
|