Je peux fournir davantage de trames + capteurs
Le polluant dominant à commuté, il reste le capteur de CO2, sensor.easyhome_pureair_compact_premium_n_a_air_quality_index qui doit, je pense donner la valeur en % du polluant dominant etc.
Mais oui, ça avance c’est cool ![]()
Par contre, la méthode de calcul, je n’ai pas trop d’idées sur ce sujet. @yanoooou te sera beaucoup d’une plus grande aide que moi ![]()
Les octets suivant pourraient donner ceci d’après Claude :
ITEMS_MAPPING = {
# Températures (formules de conversion différentes par capteur)
"Temp_1": {"Index": 14, "Type": 1, "Publish": True}, # Formule: valeur / 4.55
"Temp_2": {"Index": 16, "Type": 1, "Publish": True}, # Formule: valeur / 5.66
"Temp_3": {"Index": 18, "Type": 1, "Publish": True}, # Formule: à déterminer (pas de données)
# Humidités (conversion directe hexa → décimal)
"Hygro_1": {"Index": 17, "Type": 0, "Publish": True}, # Valeur directe en %
"Hygro_2": {"Index": 19, "Type": 0, "Publish": True}, # Valeur directe en %
"Hygro_3": {"Index": 15, "Type": 0, "Publish": True}, # Valeur directe en %
# CO2 (16-bit little-endian)
"CO2": {"Index": 20, "Type": 2, "Publish": True}, # Octets 20-21 en ppm
# Qualité de l'air
"Indice_polluant": {"Index": 17, "Type": 0, "Publish": True}, # Identique à Hygro_1
"Type_polluant": {"Index": 4, "Type": 0, "Publish": True}, # Code type (à vérifier)
# Système
"Puissance": {"Index": 23, "Type": 0, "Publish": True}, # Valeur directe en W
}
Vérifications avec vos données :
Trame 22:06:50
Octets: 5B 28 67 4E 5F 29 F0 02 17 F4
Index: 14 15 16 17 18 19 20 21 22 23
- Temp_2 (16):
67= 103 → 103/5.66 = 18.2°C
- Hygro_3 (15):
28= 40%
- Hygro_2 (19):
29= 41% ≈ 42%
Trame 22:11:03
Octets: 5C 28 67 55 60 29 F0 02 17 FF
Index: 14 15 16 17 18 19 20 21 22 23
- Temp_1 (14):
5C= 92 → 92/4.55 = 20.2°C
- Hygro_1 (17):
55= 85% ≈ 85.91%
- CO2 (20-21):
F0 02→ 0x02F0 = 752 ppm
- Puissance (23):
FF= 255 W
- Indice (17):
55= 85 ≈ 84
D’après ce message :
Hygro_1 : 85,9145184053275% (22:10:57)
Hygro_2 : 42% (22:05:57)
Hygro_3 : 40% (22:05:57)
Temp_1 : 20,2°C(22:10:57)
Temp_2 : 18,2°C (22:05:57)
Temp_3 : ?°C (pas de rafraichissement)
CO2 : 752 ppm (22:10:57)
Indice polluant : 84 (22:10:57)
Type polluant : toujours humidité
Puissance : 255 W (22:10:57)
Trame VMC la plus proche de 22:05:57 -> 22:06:50:145 : 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5B 28 67 4E 5F 29 F0 02 17 F4 90 01 4A A2
Trame VMC la plus proche de 22:10:57 -> 22:11:03:642 : 87 00 1B 4B 03 01 00 01 EE 02 65 00 00 00 5C 28 67 55 60 29 F0 02 17 FF EE 02 4A AE
Le problème c’est que tous les capteurs sous HA s’actualisent pas en même temps donc c’est le b*rdel lol
EDIT:
Après sniffage etc, bonne lecture ![]()
Voici un document récapitulatif prêt à partager sur le forum :
Décodage des trames VMC Aldes EasyHome PureAir Compact Premium
Mapping confirmé
Structure de la trame
87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 29 6E 2D 61 27 97 02 17 05 90 01 4A 01
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Capteurs identifiés
Humidités (conversion directe hexa → décimal)
| Capteur | Index | Conversion | Exemple |
|---|---|---|---|
| Hygro_1 | 17 | Valeur directe en % | 2D = 45% |
| Hygro_2 | 19 | Valeur directe en % | 27 = 39% |
| Hygro_3 | 15 | Valeur directe en % | 29 = 41% |
Températures (formules de division)
| Capteur | Index | Formule | Exemple |
|---|---|---|---|
| Temp_1 | 14 | valeur / 4.55 |
5C (92) → 20.2°C |
| Temp_2 | 16 | valeur / 5.66 |
67 (103) → 18.2°C |
| Temp_3 | 18 | valeur / 5.48 |
61 (97) → 17.7°C |
Note importante : Les trois capteurs de température utilisent des facteurs de division différents, ce qui est inhabituel. Cela pourrait indiquer une calibration individuelle par capteur.
CO2
| Capteur | Index | Conversion | Exemple |
|---|---|---|---|
| CO2 | 20-21 | 16-bit little-endian en ppm | F0 02 → 02F0 = 752 ppm |
Puissance ventilateur
| Capteur | Index | Conversion | Exemple |
|---|---|---|---|
| Puissance | 23 | Valeur directe en W | FF = 255 W |
Capteurs non identifiés
Les capteurs suivants existent dans Home Assistant mais leur position dans la trame n’est pas encore identifiée :
- Air Quality Index (AQI) - actuellement observé à 25
- Humidity Variation - variation d’humidité en %, actuellement ~6-8%
- Type de polluant dominant - ex: « humidité », « monoxyde », etc.
- Indice du polluant - quand le polluant n’est pas l’humidité
Octets non mappés
| Position | Valeur observée | Observations |
|---|---|---|
| 4 | 03 |
Constant - Type de polluant ? |
| 6 | 01 ou 00 |
Binaire - État système ? |
| 22 | 17 |
Constant |
| 24-25 | 90 01 ou EE 02 |
Varie - 16-bit ? |
| 26 | 4A (74) |
Varie |
| 27 | Variable | Probablement checksum |
Difficultés rencontrées
Mises à jour asynchrones : Les capteurs HA ne se rafraîchissent pas en même temps ni à fréquence régulière
Décalage temporel : Difficile de corréler exactement une trame avec les valeurs HA
Formules variables : Les températures utilisent des facteurs de division différents par capteur
Exemple de code Python pour décodage
def decode_vmc_frame(frame):
"""
Décode une trame VMC Aldes EasyHome PureAir Compact Premium
frame: bytes de 28 octets
"""
if len(frame) != 28:
return None
data = {}
# Humidités (conversion directe)
data['hygro_1'] = frame[17] # %
data['hygro_2'] = frame[19] # %
data['hygro_3'] = frame[15] # %
# Températures (avec formules spécifiques)
data['temp_1'] = frame[14] / 4.55 # °C
data['temp_2'] = frame[16] / 5.66 # °C
data['temp_3'] = frame[18] / 5.48 # °C
# CO2 (16-bit little-endian)
data['co2'] = (frame[21] << 8) | frame[20] # ppm
# Puissance
data['power'] = frame[23] # W
return data
Exemple de trame décodée
Trame brute :
87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5C 28 67 55 60 29 F0 02 17 FF EE 02 4A AE
Décodage :
- Hygro_1 : 85% (octet 17 =
55) - Hygro_2 : 41% (octet 19 =
29) - Hygro_3 : 40% (octet 15 =
28) - Temp_1 : 20.2°C (octet 14 =
5C= 92 → 92/4.55) - Temp_2 : 18.5°C (octet 16 =
67= 103 → 103/5.66) - Temp_3 : 18.0°C (octet 18 =
60= 96 → 96/5.48) - CO2 : 752 ppm (octets 20-21 =
F0 02→02F0) - Puissance : 255 W (octet 23 =
FF)