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