Files
nebuleair_pro_4g/loop/error_flags.md
PaulVua 7619caffc4 Doc: error_flags.md — specification byte 66 payload UDP Miotiq
Definition des 8 bits d'erreur (RTC, BME280, NPM, Envea, bruit,
MPPT, vent), exemples de valeurs, implementation Python, parser
Miotiq mis a jour, et lecture cote serveur.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 20:19:01 +01:00

135 lines
4.4 KiB
Markdown

# Error Flags — UDP Payload Miotiq (Byte 66)
## Principe
Le byte 66 de la payload UDP (100 bytes) est utilise comme registre d'erreurs.
Chaque bit represente un etat d'erreur independant. Plusieurs erreurs peuvent
etre signalees simultanement.
## Position dans la payload
```
Bytes 0-65 : donnees capteurs (existant)
Byte 66 : error_flags (1 byte = 8 bits)
Bytes 67-99 : reserved (initialises a 0xFF)
```
## Definition des bits
| Bit | Masque | Nom | Description |
|-----|--------|-------------------|--------------------------------------------------|
| 0 | 0x01 | RTC_DISCONNECTED | Module RTC DS3231 non detecte sur le bus I2C |
| 1 | 0x02 | RTC_RESET | RTC en date par defaut (annee 2000) |
| 2 | 0x04 | BME280_ERROR | Capteur BME280 non detecte ou erreur de lecture |
| 3 | 0x08 | NPM_ERROR | Capteur NextPM non detecte ou erreur Modbus |
| 4 | 0x10 | ENVEA_ERROR | Capteurs Envea non detectes ou erreur serie |
| 5 | 0x20 | NOISE_ERROR | Capteur bruit NSRT MK4 non detecte ou erreur |
| 6 | 0x40 | MPPT_ERROR | Chargeur solaire MPPT non detecte ou erreur |
| 7 | 0x80 | WIND_ERROR | Capteur vent non detecte ou erreur |
## Valeurs possibles (exemples)
| Valeur dec | Valeur hex | Signification |
|------------|------------|---------------------------------------|
| 0 | 0x00 | Aucune erreur |
| 1 | 0x01 | RTC deconnecte |
| 2 | 0x02 | RTC reset (annee 2000) |
| 3 | 0x03 | RTC deconnecte + RTC reset |
| 4 | 0x04 | BME280 erreur |
| 5 | 0x05 | RTC deconnecte + BME280 erreur |
| 12 | 0x0C | BME280 erreur + NPM erreur |
| 255 | 0xFF | Toutes les erreurs (cas extreme) |
## Implementation Python (capteur)
```python
# Constantes
ERR_RTC_DISCONNECTED = 0x01
ERR_RTC_RESET = 0x02
ERR_BME280 = 0x04
ERR_NPM = 0x08
ERR_ENVEA = 0x10
ERR_NOISE = 0x20
ERR_MPPT = 0x40
ERR_WIND = 0x80
# Construction du flag
error_flags = 0x00
if rtc_status == "disconnected":
error_flags |= ERR_RTC_DISCONNECTED
if rtc_status == "reset":
error_flags |= ERR_RTC_RESET
if bme280_error:
error_flags |= ERR_BME280
# Ecriture dans la payload
payload[66] = error_flags
```
## Parser Miotiq
```
16|device_id|string|||W
2|signal_quality|hex2dec|dB||
2|version|hex2dec|||W
4|ISO_68|hex2dec|ugm3|x/10|
4|ISO_39|hex2dec|ugm3|x/10|
4|ISO_24|hex2dec|ugm3|x/10|
4|ISO_54|hex2dec|degC|x/100|
4|ISO_55|hex2dec|%|x/100|
4|ISO_53|hex2dec|hPa||
4|noise_cur_leq|hex2dec|dB|x/10|
4|noise_cur_level|hex2dec|dB|x/10|
4|max_noise|hex2dec|dB|x/10|
4|ISO_03|hex2dec|ppb||
4|ISO_05|hex2dec|ppb||
4|ISO_21|hex2dec|ppb||
4|ISO_04|hex2dec|ppb||
4|ISO_08|hex2dec|ppb||
4|npm_ch1|hex2dec|count||
4|npm_ch2|hex2dec|count||
4|npm_ch3|hex2dec|count||
4|npm_ch4|hex2dec|count||
4|npm_ch5|hex2dec|count||
4|npm_temp|hex2dec|°C|x/10|
4|npm_humidity|hex2dec|%|x/10|
4|battery_voltage|hex2dec|V|x/100|
4|battery_current|hex2dec|A|x/100|
4|solar_voltage|hex2dec|V|x/100|
4|solar_power|hex2dec|W||
4|charger_status|hex2dec|||
4|wind_speed|hex2dec|m/s|x/10|
4|wind_direction|hex2dec|degrees||
2|error_flags|hex2dec|||
32|reserved|skip|||
```
## Lecture cote serveur (exemple)
```python
error_flags = int(parsed_value) # valeur decodee par Miotiq (0-255)
rtc_disconnected = bool(error_flags & 0x01)
rtc_reset = bool(error_flags & 0x02)
bme280_error = bool(error_flags & 0x04)
npm_error = bool(error_flags & 0x08)
envea_error = bool(error_flags & 0x10)
noise_error = bool(error_flags & 0x20)
mppt_error = bool(error_flags & 0x40)
wind_error = bool(error_flags & 0x80)
if rtc_disconnected:
alert("RTC module deconnecte — verifier pile/cables I2C")
```
## Notes
- La valeur par defaut de la payload est 0xFF (tous bytes a 255), ce qui signifierait
"toutes les erreurs". Le script doit explicitement ecrire 0x00 quand tout va bien.
- Les flags sont cumulatifs : un capteur peut avoir plusieurs erreurs simultanement.
- Ce systeme est extensible : si on a besoin de plus de 8 flags, on peut utiliser
le byte 67 pour 8 flags supplementaires.