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>
This commit is contained in:
134
loop/error_flags.md
Normal file
134
loop/error_flags.md
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
# 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.
|
||||||
Reference in New Issue
Block a user