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