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>
4.4 KiB
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.