flowchart TD A[Intervalle ESPHome toutes les 100 ms] --> B[Lecture I²C depuis gps_i2c
jusqu'à 4 passes de 128 octets] B --> C[Ajout des caractères non nuls dans nmea_buf] C --> D{nmea_buf contient-il
au moins un saut de ligne ?} D -- Non --> A D -- Oui --> E[Extraction d'une ligne complète] E --> F[Suppression CR/LF] F --> G{Ligne vide ou ne commence pas par '$' ?} G -- Oui --> D G -- Non --> H[Vérification du checksum NMEA] H -- Échec --> I[Incrément des trames invalides] I --> D H -- Succès --> J[Incrément des trames valides] J --> K[Découpage CSV en fields] K --> L[Identification du type de trame
ex. GGA RMC GSA GSV ZDA GST PMTK] L --> M{Type = GGA ?} M -- Oui --> N[Lecture des champs GGA] N --> O[fields_6 = fix quality] O --> P{fix quality > 0 ?} P -- Oui --> Q[Publier gps_has_fix = true] P -- Non --> R[Publier gps_has_fix = false] Q --> S[Publier qualité fix, satellites utilisés,
HDOP, altitude, latitude, longitude] R --> S S --> D M -- Non --> T{Type = RMC ?} T -- Oui --> U[Lecture des champs RMC] U --> V[fields_2 = statut] V --> W{statut = 'A' ?} W -- Oui --> X[Publier gps_has_fix = true] W -- Non --> Y[Publier gps_has_fix = false] X --> Z[Publier latitude, longitude,
vitesse, cap, date, heure] Y --> Z Z --> D T -- Non --> AA{Autre type utile ?} AA -- Oui --> AB[Mettre à jour d'autres entités
GSA GSV ZDA GST PMTK etc.] AB --> D AA -- Non --> D