Du coup tu peux mettre des trames et les valeurs du cloud aldes?
Regarde ce que j’ai entouré en jaune. L’intégration en créé bien 13.
Par contre, elle les associée mal à l’appareil donc il faut passer par là pour toutes les voir. D’où le 2 que tu as plus bas.
Par contre si tu regarde en rouge, l’intégration n’arrive pas à récupérer l’adresse mac et probablement aussi les autres sensors.
Est-ce que tu as le modèle Compact PREMIUM ou un autre ? Si c’est un autre, je vais modifier l’intégration pour qu’elle accepte ton modèle.
Oui oui j’ai édité mon commentaire avant suite à mon erreur lol :
Si c’est bien la Aldes EasyHome PureAir Compact Premium. C’est juste que je n’ai pas renseigné le numéro de série où autre au moment où je l’ai enregistré sur l’application, donc c’est peut-être le problèmes.
Mais j’ai bien les 13 entités regarde :
Exemple capteur salle de bain :
On voit clairement ici que la box n’a pas demandé à repasser en mode quotidien au lieu de 21 tu devrais avoir 43.
Trop bien. On va pouvoir trouver les valeurs dans les trames envoyées par la VMC ![]()
Peux-tu m’envoyer une trame actuelle envoyée par la VMC et une capture des 3 temperatures et des 3 humidités stp ? Je pense que j’ai trouvé ![]()
Et également l’adresse mac de ton aldes éventuellement en PM stp ?
Ici, pour la première fois, on envoie d’abord une commande de mode qui vaut 10 en hexa suivi d’une commande avec 21. Quelque soit la valeur du mode qu’on passe (10, 21, 43, 65 et 87) les bits 2 et 3 codent le mode (0 = holiday, 1 = daily, 2 = boost, 3 = guest, on n’a pas encore fait de trame pour le programming). Le bit 4 est toujours à 0 donc il fait peut-être aussi partie aussi du codage du mode. Par contre, que veulent dire les autres bits qui diffèrent entre la valeur 10 et le 21 ? Serait-ce le codage de la durée du mode holiday ?
PS :
Je m’interroge si c’est la VMC qui gère la durée pour repasser en mode normal ou si c’est la box…
Le mode AIR PROG ne change aucune trames, sinon je l’aurais posté ![]()
Oui je pense que ca doit être le codage de la durée du mode VACANCES car avant de le lancer, il faut définir une plage, peut-être un compteur ? je ne sais pas
Selon moi, c’est la box qui est maître et qui donne l’ordre à l’appareil à intervalle régulier (et encore plus en mode vacances d’où les trames coupées !)
Alors voilà un échantillon de trames + 3 temp + 3 hum :
| # | Date/Heure | Trame | Taille | Module | Type |
|---|---|---|---|---|---|
| 29 | 10/01/2026 19:50:29.794 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 62 32 66 2C 5D 29 64 03 17 08 90 01 4A 2D | 28B | VMC EasyHome | RX |
| 28 | 10/01/2026 19:50:29.790 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 27 | 10/01/2026 19:50:19.690 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 61 32 66 2C 5D 29 64 03 17 05 90 01 4A 31 | 28B | VMC EasyHome | RX |
| 26 | 10/01/2026 19:50:19.686 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 25 | 10/01/2026 19:50:09.586 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 60 31 66 2C 5D 29 64 03 17 05 90 01 4A 33 | 28B | VMC EasyHome | RX |
| 24 | 10/01/2026 19:50:09.583 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 23 | 10/01/2026 19:49:59.490 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5F 30 66 2C 5D 29 64 03 17 05 90 01 4A 35 | 28B | VMC EasyHome | RX |
| 22 | 10/01/2026 19:49:59.486 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 21 | 10/01/2026 19:49:49.388 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5E 2F 66 2C 5C 29 64 03 17 02 90 01 4A 3B | 28B | VMC EasyHome | RX |
| 20 | 10/01/2026 19:49:49.384 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 19 | 10/01/2026 19:49:39.281 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 18 | 10/01/2026 19:49:28.175 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 17 | 10/01/2026 19:49:18.093 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5C 2D 65 2C 5C 29 64 03 17 01 90 01 4A 41 | 28B | VMC EasyHome | RX |
| 16 | 10/01/2026 19:49:18.090 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 15 | 10/01/2026 19:49:08.995 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5C 2D 65 2C 5C 29 64 03 17 01 90 01 4A 41 | 28B | VMC EasyHome | RX |
| 14 | 10/01/2026 19:49:08.992 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13 | 10/01/2026 19:48:58.891 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5C 2C 65 2B 5C 29 64 03 17 01 90 01 4A 43 | 28B | VMC EasyHome | RX |
| 12 | 10/01/2026 19:48:58.888 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 11 | 10/01/2026 19:48:48.792 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5B 2C 65 2B 5C 29 64 03 17 01 90 01 4A 44 | 28B | VMC EasyHome | RX |
| 10 | 10/01/2026 19:48:48.788 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
Ce que j’avais en tête semble se confirmer. Difficile de te dire avec certitude car on a des updates de la VMC toutes les 10 secondes alors que dans le cloud c’est mis à jour toutes les x minutes.
Si on regarde les dernières données reçues, on retrouve les températures en octets 15, 17 et 19 et les % d’humidité en 16, 18 et 19. Comme @yanoooou nous l’avait dit
Par contre, la méthode de conversion des données du T.Flow ne se confirme pas. Pour les % d’humidité, on a juste à convertir d’héxa en décimal et ca correspond.
Pour les températures, plus dur à dire. En utilisant la méthode dont je parlais (division par 10), on obtient des chiffres trop bas. Il faudrait ajouter une base entre 9 et 10 mais là encore, ca ne permet pas d’avoir une formule ax+b qui fonctionne pour les 3 températures que l’on retrouve dans HA
| 87 | 00 | 1B | 4B | 03 | 01 | 00 | 01 | 90 | 01 | 43 | 00 | 00 | 00 | 5B | 2C | 65 | 2B | 5C | 29 | 64 | 03 | 17 | 01 | 90 | 01 | 4A | 44 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9,10 | 44 | 10,10 | 43 | 9,20 | 41 |
Pour les temperatures, si on ajoute environ 9.5 à 9.1, 10.1 et 9.2 on est pas loin de ce que l’on retrouve dans HA avec 18.2 19.2 et 18.3
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)
Je retrouve la même chose pour les valeurs d’hygrométrie, par contre je ne vois pas pour la température.
"Hygro_kitchen": {"Index": 15, "Type": 0, "Publish": True},
"Hygro_bath_1": {"Index": 17, "Type": 0, "Publish": True},
"Hygro_bath_2": {"Index": 19, "Type": 0, "Publish": True}
@Quentin57520: Tu pourrais utiliser le soft du T.Flow et l’adapter pour enregistrer toutes les valeurs en MQTT.
Ça devrait être plus facile pour identifier les paramètres et les calculs.
@yanoooou il est sur le topic de T.Flow ?
EDIT: Ce projet de ton github ?
Oui, la partie du raspberry pico W : https://github.com/YannDoublet/Open-connect-box/tree/main/Software/Raspberry%20Pico%20W/uAldes
J’ai modifié ce qu’il faut mais les trames ne tombent pas forcément au même moment que l’actualisation des capteurs avec le dépôt de @Frederic_Duloum (les capteurs ne s’actualisent pas tous en même temps) donc ça fausse le tout, j’ai du mal très sincérement, après j’en suis ici :
ITEMS_MAPPING = {
# Système
"Soft": {"Index": 4, "Type": 0, "Publish": True},
"Etat": {"Index": 6, "Type": 0, "Publish": True},
# Humidités (conversion directe hexa → décimal)
"Hygro_1": {"Index": 17, "Type": 0, "Publish": True},
"Hygro_2": {"Index": 19, "Type": 0, "Publish": True},
"Hygro_3": {"Index": 15, "Type": 0, "Publish": True},
# Températures (diviseurs spécifiques par capteur)
"Temp_1": {"Index": 14, "Type": 10, "Diviseur": 4.55, "Publish": True},
"Temp_2": {"Index": 16, "Type": 10, "Diviseur": 5.66, "Publish": True},
"Temp_3": {"Index": 18, "Type": 10, "Diviseur": 5.48, "Publish": True},
# CO2 (16-bit little-endian)
"CO2": {"Index": 20, "Type": 11, "Publish": True},
# Puissance et Humidity Variation (même octet - valeurs liées)
"Puissance": {"Index": 23, "Type": 0, "Publish": True},
"Humidity_Variation": {"Index": 23, "Type": 0, "Publish": True},
}
Formules de décodage
- Type 0 : Valeur directe
- Type 10 :
valeur / diviseur - Type 11 : 16-bit little-endian
(octet[index+1] << 8) | octet[index]
Exemple de trame décodée
Trame: 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 27 6B 3F 61 26 13 03 17 8B EE 02 4A 14
Résultat:
- Hygro_1: 63% | Hygro_2: 38% | Hygro_3: 39%
- Temp_1: 20.4°C | Temp_2: 19.0°C | Temp_3: 17.7°C
- CO2: 787 ppm
- Puissance: 139 W | Humidity_Variation: 139%
D’après ChatGPT, car j’ai du mal.
EDIT: @Frederic_Duloum peut-être que si tu arrives à faire fonctionner le dépôt Aldes2MQTT, je pourrais avoir des remontées plus régulières pour pouvoir décoder les trames ?
Salut, rien à voir, mais en attendant vos retours, j’ai déjà fais une carte pour la VMC, qui s’inscrit dans le style mushroom que j’ai déjà et je vous la partage :
Si VMC connecté = icône principale verte/ déconnectée = rouge
On y retrouve les différents capteurs en secondary
des pop-up card pour les différentes pièces
Les 5 modes avec des icônes proches de celle de l’application et leur couleur respective
Code :
type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-template-card
entity: fan.central_ventilation
icon: mdi:hvac
primary: VMC Aldes PureAir
secondary: >-
{{ states('sensor.easyhome_pureair_compact_premium_n_a_current_mode') }} W
• {{ states('sensor.easyhome_pureair_compact_premium_n_a_carbon_dioxyde')
}} ppm • AQI {{
states('sensor.easyhome_pureair_compact_premium_n_a_air_quality_index') }}
• {{
states('sensor.easyhome_pureair_compact_premium_n_a_polluant_dominant') }}
tap_action:
action: more-info
hold_action:
action: toggle
color: |
{% if is_state('binary_sensor.aldes_n_a_connectivity', 'on') %}
green
{% else %}
red
{% endif %}
features_position: bottom
- type: custom:mushroom-chips-card
chips:
- type: template
entity: sensor.easyhome_pureair_compact_premium_n_a_kitchen_temperature
icon: mdi:chef-hat
icon_color: yellow
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: Cuisine
content:
type: custom:stack-in-card
mode: horizontal
cards:
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_kitchen_temperature
icon: mdi:thermometer
icon_color: orange
primary: Température
secondary: "{{ states(entity) }}°C"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_kitchen_humidity
icon: mdi:water-percent
icon_color: blue
primary: Humidité
secondary: "{{ states(entity) }}%"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: template
entity: sensor.easyhome_pureair_compact_premium_n_a_bathroom_1_temperature
icon: mdi:shower
icon_color: >
{% set hum =
states('sensor.easyhome_pureair_compact_premium_n_a_bathroom_1_humidity')
| int(0) %}
{% if hum > 70 %}
red
{% elif hum > 60 %}
orange
{% else %}
#03A9F4
{% endif %}
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: Salle de bain
content:
type: custom:stack-in-card
mode: horizontal
cards:
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_bathroom_1_temperature
icon: mdi:thermometer
icon_color: orange
primary: Température
secondary: "{{ states(entity) }}°C"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_bathroom_1_humidity
icon: mdi:water-percent
icon_color: blue
primary: Humidité
secondary: "{{ states(entity) }}%"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: template
entity: sensor.easyhome_pureair_compact_premium_n_a_bathroom_2_temperature
icon: mdi:toilet
icon_color: >
{% set hum =
states('sensor.easyhome_pureair_compact_premium_n_a_bathroom_2_humidity')
| int(0) %}
{% if hum > 70 %}
red
{% elif hum > 60 %}
orange
{% else %}
#03A9F4
{% endif %}
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: WC
content:
type: custom:stack-in-card
mode: horizontal
cards:
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_bathroom_2_temperature
icon: mdi:thermometer
icon_color: orange
primary: Température
secondary: "{{ states(entity) }}°C"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: custom:mushroom-template-card
entity: >-
sensor.easyhome_pureair_compact_premium_n_a_bathroom_2_humidity
icon: mdi:water-percent
icon_color: blue
primary: Humidité
secondary: "{{ states(entity) }}%"
layout: vertical
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
}
- type: template
entity: sensor.easyhome_pureair_compact_premium_n_a_humidity_variation
icon: mdi:chart-line-variant
icon_color: |
{% set var = states(entity) | float(0) %}
{% if var > 5 %}
red
{% elif var > 2 %}
orange
{% else %}
green
{% endif %}
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: Graphiques VMC
content:
type: vertical-stack
cards:
- type: custom:mini-graph-card
entities:
- entity: >-
sensor.easyhome_pureair_compact_premium_n_a_humidity_variation
name: Variation humidité
color: "#03A9F4"
hours_to_show: 24
line_width: 2
animate: true
show:
legend: true
fill: fade
- type: custom:mini-graph-card
entities:
- entity: >-
sensor.easyhome_pureair_compact_premium_n_a_carbon_dioxyde
name: CO2
color: orange
hours_to_show: 24
line_width: 2
animate: true
show:
legend: true
fill: fade
alignment: end
card_mod:
style: |
ha-card {
--chip-height: 34px;
--chip-icon-size: 17px;
padding-top: 4px;
margin-top: -8px;
padding-bottom: 9px;
padding-left: 4px;
padding-right: 4px;
}
.chip-container {
gap: 4px !important;
}
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
icon: mdi:beach
icon_color: >-
{% if
is_state('select.aldes_easyhome_pureair_compact_premium_n_a_mode','Holidays')
%}
blue
{% else %}
grey
{% endif %}
tap_action:
action: call-service
service: select.select_option
service_data:
entity_id: select.aldes_easyhome_pureair_compact_premium_n_a_mode
option: Holidays
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
padding: 4px;
display: flex;
justify-content: center;
align-items: center;
}
- type: custom:mushroom-template-card
icon: mdi:account-group
icon_color: >-
{% if
is_state('select.aldes_easyhome_pureair_compact_premium_n_a_mode','Guest')
%}
purple
{% else %}
grey
{% endif %}
tap_action:
action: call-service
service: select.select_option
service_data:
entity_id: select.aldes_easyhome_pureair_compact_premium_n_a_mode
option: Guest
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
padding: 4px;
display: flex;
justify-content: center;
align-items: center;
}
- type: custom:mushroom-template-card
icon: mdi:sofa
icon_color: >-
{% if
is_state('select.aldes_easyhome_pureair_compact_premium_n_a_mode','Daily')
%}
green
{% else %}
grey
{% endif %}
tap_action:
action: call-service
service: select.select_option
service_data:
entity_id: select.aldes_easyhome_pureair_compact_premium_n_a_mode
option: Daily
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
padding: 4px;
display: flex;
justify-content: center;
align-items: center;
}
- type: custom:mushroom-template-card
icon: mdi:clock-outline
icon_color: >-
{% if
is_state('select.aldes_easyhome_pureair_compact_premium_n_a_mode','Air
Prog') %}
yellow
{% else %}
grey
{% endif %}
tap_action:
action: call-service
service: select.select_option
service_data:
entity_id: select.aldes_easyhome_pureair_compact_premium_n_a_mode
option: Air Prog
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
padding: 4px;
display: flex;
justify-content: center;
align-items: center;
}
- type: custom:mushroom-template-card
icon: mdi:fire
icon_color: >-
{% if
is_state('select.aldes_easyhome_pureair_compact_premium_n_a_mode','Boost')
%}
red
{% else %}
grey
{% endif %}
tap_action:
action: call-service
service: select.select_option
service_data:
entity_id: select.aldes_easyhome_pureair_compact_premium_n_a_mode
option: Boost
card_mod:
style: |
ha-card {
border: none !important;
background: none !important;
box-shadow: none !important;
padding: 4px;
display: flex;
justify-content: center;
align-items: center;
}
J’ai peux-être une piste pour les températures:
def decode_temperature_bcd(value):
"""
Decodes a temperature value encoded with BCD (Binary Coded Decimal)
and 0.25°C precision using the 2 least significant bits.
The temperature is encoded as follows:
- The 2 least significant bits (bits 0-1) represent the decimal part:
0b00 = 0.00°C, 0b01 = 0.25°C, 0b10 = 0.50°C, 0b11 = 0.75°C
- The remaining bits (bits 2-7) are shifted right by 2 and decoded as BCD
for the integer part of the temperature.
Parameters:
value (int): The encoded temperature byte (0x00 to 0xFF).
Returns:
float: The decoded temperature in degrees Celsius.
Example:
>>> decode_temperature_bcd(0x62) # Binary: 0110 0010
18.5
# Bits 0-1: 0b10 = 2 -> 2 x 0.25 = 0.5°C
# Bits 2-7: 0x62 >> 2 = 0x18 -> BCD 18 = 18°C
# Result: 18 + 0.5 = 18.5°C
"""
# Extract the 2 least significant bits for decimal part
decimal_bits = value & 0b11
decimal_part = decimal_bits * 0.25
# Shift right by 2 bits to get the BCD encoded integer part
bcd_value = value >> 2
# Decode BCD: extract tens and units
tens = (bcd_value >> 4) & 0x0F
units = bcd_value & 0x0F
integer_part = tens * 10 + units
# Combine integer and decimal parts
temperature = integer_part + decimal_part
return temperature
Salut,
Ah très bonne nouvelle ! donc chaque température serait codé sur deux bits ?
Tu as pu télécharger le pack Wetransfer que je t’ai envoyé en mp ? ![]()
Non que sur sur un byte.
- les deux bits de poids faible correspondent à la valeur après la virgule (valeur x 0.25)
- les 6 bits de poids fort correspondent à la valeur entière en (codage BCD)
Non, je n’ai pas eu de lien Wetransfer…
Essayons avec un échantillon de trames :
| # | Date/Heure | Trame | Taille | Module | Type |
|---|---|---|---|---|---|
| 13557 | 12/01/2026 19:17:24.212 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2D 5C 28 5C 28 1F 03 17 04 90 01 4A 90 | 28B | VMC EasyHome | RX |
| 13556 | 12/01/2026 19:17:24.209 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13555 | 12/01/2026 19:17:14.118 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2D 5C 28 5C 28 1F 03 17 04 90 01 4A 90 | 28B | VMC EasyHome | RX |
| 13554 | 12/01/2026 19:17:14.115 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13553 | 12/01/2026 19:17:04.021 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2D 5C 28 5C 28 1F 03 17 04 90 01 4A 90 | 28B | VMC EasyHome | RX |
| 13552 | 12/01/2026 19:17:04.018 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13551 | 12/01/2026 19:16:54.915 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2D 5C 28 5C 28 1F 03 17 04 90 01 4A 90 | 28B | VMC EasyHome | RX |
| 13550 | 12/01/2026 19:16:54.912 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13549 | 12/01/2026 19:16:44.808 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13548 | 12/01/2026 19:16:34.713 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2C 5C 28 5C 28 1F 03 17 03 90 01 4A 92 | 28B | VMC EasyHome | RX |
| 13547 | 12/01/2026 19:16:34.710 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13546 | 12/01/2026 19:16:24.610 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2C 5C 28 5C 28 1F 03 17 03 90 01 4A 92 | 28B | VMC EasyHome | RX |
| 13545 | 12/01/2026 19:16:24.607 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13544 | 12/01/2026 19:16:14.505 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13543 | 12/01/2026 19:16:04.401 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13542 | 12/01/2026 19:15:54.304 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13541 | 12/01/2026 19:15:43.209 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13540 | 12/01/2026 19:15:33.103 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13539 | 12/01/2026 19:15:23.006 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
| 13538 | 12/01/2026 19:15:13.906 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18B | AldesBox | RX |
Prenons la dernière : 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2D 5C 28 5C 28 1F 03 17 04 90 01 4A 90
Ah mince, les sensors sous HA se sont actualisés pour la dernière fois il y a 14 minutes, je n’ai pas pris les trames de ce moment.
Je viendrais poster trames + sensors si j’arrive à les voir s’actualiser plus au moins en même temps pour vérifier ta théorie !
Trame avec actualisation :
| # | Date/Heure | Trame | Taille | Module | Type |
|---|---|---|---|---|---|
| 13633 | 12/01/2026 19:25:29.030 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2E 5B 27 5C 27 BE 02 17 05 90 01 4A F3 | 28 | VMC EasyHome | RX |
| 13634 | 12/01/2026 19:25:39.125 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18 | AldesBox | RX |
| 13635 | 12/01/2026 19:25:39.129 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2E 5B 27 5C 27 BE 02 17 08 90 01 4A F0 | 28 | VMC EasyHome | RX |
| 13636 | 12/01/2026 19:25:49.218 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18 | AldesBox | RX |
| 13637 | 12/01/2026 19:25:49.222 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5D 2E 5B 27 5C 27 BE 02 17 08 90 01 4A F0 | 28 | VMC EasyHome | RX |
| 13638 | 12/01/2026 19:26:00.321 | FD 87 11 4B 02 02 00 00 43 FF 00 00 FF FF FF FF 4A 94 | 18 | AldesBox | RX |
| 13639 | 12/01/2026 19:26:00.324 | 87 00 1B 4B 03 01 00 01 90 01 43 00 00 00 5C 2E 5B 27 5C 27 BE 02 17 08 90 01 4A F1 | 28 | VMC EasyHome | RX |
température 1 : 17,2°C à 19:25:07
sur la trame de 19:25:29.030:
0x5D me donne 17.25°C avec mon calcul.










