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

4.4 KiB

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)

# 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)

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.