Files
aircarto-protocols/formats/json-payload.md

3.5 KiB

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 pour compatibilité. Ce JSON est la cible pour les nouveaux développements.

Schéma

{
  "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

{ "ok": true }

Ou en cas d'erreur :

{ "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

{
  "token": "001",
  "ts": 1713830400,
  "type_conn": "WiFi",
  "measurements": { "pm25": 12.3 }
}