Passerelle MQTT => Chauffe Eau ALDES - B200-FAN_T.Flow® Hygro+

Salut,
Ça me fait penser au message de @AirV qui se demande si c’est pas du protocole ebus, d’après Wikipedia c’est aussi en 2400 bauds… C’est plausible, ça leur éviterait de tout réinventer, surtout que c’est un protocole conçu pour les systèmes de chauffage. Ça simplifierait grandement l’intégration dans Home Assistant car ça existe déjà et des cartes open source existent, si quelqu’un en a une on sait jamais :sweat_smile:

J’avais pas vu le doigt de gant, c’est clair que c’est le mieux, ça permet d’être autonome.
Je propose d’étudier la commande de la soufflerie, du groupe extérieur et des grilles de ventilation et on peut remplacer la carte complète :rofl:

Et ça retombe sur mes mesures de départ
https://forum.hacf.fr/t/reverse-engineering-aldes-b200-fan-t-flow-hygro/15188/13

Je ne suis jamais tombé sur ces cartes, c’est cool merci du partage !

Voici quelques trames que j’ai obtenu avec les valeurs relevées sur le CE en mode EXPERT:

Je suis encours pour développer un petit bout de code pour faire l’acquisition de ces trames via un ESP32 ou ESP8266.

3 « J'aime »

Salut @yanoooou le sauveur !

Dans le but de tester ton code, peux-tu faire une photo rapide et détailler les éléments que tu utilises pour relever les trames ?

En fait idéalement si tu peux faire un croquis de ton montage avec l’esp32, ce serait cool, même à main levée :wink:

As-tu un dépôt Github ?

Hello,
J’ai donc réalisé un petit montage pour lire les trames IBUS et les afficher sur une page WEB (dans un premier temps).
Pour le montage, j’ai juste fait un pont diviseur avec une résistance de 10k et une autre de 1.2k qui attaque la borne « GPIO9 » d’un NODEMCU 32S.
j’ai programmé rapidement un petit code micro-python pour lire l’UART 1 et l’afficher dans une page WEB.
Voici une petite photo du montage:

Un exemple de la page WEB:

Pas encore, mais j’y pense.

Salut @yanoooou !
Peux-tu poster ton code ici afin de te filer un coup de main pour la partie décodage ?
Merci d’avance en tous cas, je pensais pas qu’un montage aussi simple pouvais le faire, j’ai le matos donc si je peux t’aider pour l’identification des trames, c’est cool.

Voici mon code de test :

from machine import Pin,UART
import network,socket
import time

serial_input = "0x33 " * 10

uart1 = UART(1, baudrate=2400,bits=8, parity=0, stop=1)

ssid = '' # A COMPLETER
password = '' # A COMPLETER

def web_page():
    html = """
    <!DOCTYPE html>
    <html>
        <head>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>IBUS T-FLOW SERVEUR</title>
            <style>
                p { font-size: 36px; }
            </style>
        </head>
        <body>
            <h1>Valeurs IBUS : </h1>
            <p><span>""" + str('[{}]'.format(', '.join(hex(x) for x in serial_input))) + """</span></p>
        </body>
    </html>
    """
    return html

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    print(f"Try connect to SSID : {ssid}")
    wlan.connect(ssid, password)

    while not wlan.isconnected():
        print('.', end = " ")
        time.sleep_ms(500)

print("\nWi-Fi Config: ", wlan.ifconfig())

socketServeur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketServeur.bind(('', 80))
socketServeur.listen(5)

while True:
    try:
        print("Attente d'une connexion client")
        connexionClient, adresse = socketServeur.accept()
        connexionClient.settimeout(4.0)
        requete = connexionClient.recv(1024)     #requête du client
        requete = str(requete)
        connexionClient.settimeout(None)
        input = uart1.read()
        if input != None:
            serial_input = input
        print(serial_input)

        connexionClient.send('HTTP/1.1 200 OK\n')
        connexionClient.send('Content-Type: text/html\n')
        connexionClient.send("Connection: close\n\n")
        reponse = web_page()
        connexionClient.sendall(reponse)
        connexionClient.close()  
        print("Connexion avec le client fermee")      
    except:
        connexionClient.close()  
        print("Connexion avec le client fermee, le programme a declenché une erreur")

2 « J'aime »

Salut,
J’ai une question bête : à quoi correspond ton tableau de droite ? Je comprends que celui de gauche c’est ce que tu décodes sur le bus mais à droite je vois pas.
Merci pour ton partage

Salut,
Je tableau de droite correspond aux valeurs que j’ai relevé sur l’écran du chauffe-eau en mode expert.

1 « J'aime »

Pour ceux qui ne le savent pas, le mode expert est accessible en appuyant simultanément sur les touchent « Mode » et « + » puis en validant le code « 0321 ».

Voilà l’accès :

Le code :

Le menu info expert :

2 « J'aime »

OK merci, c’est spécifique au chauffe-eau alors, sur la pompe à chaleur c’est un écran différent

Bonjour,

je vous suis en silence mais j’ai trouvé ca sur le net.
Ca serais pas plus simple?

Bon courage a tous

L’IBUS d’ALDES n’est pas tout à fait identique à l’EBUS… par exemple sur l’IBUS il y a un bit de parité alors qu’il n’y en a pas sur EBUS.
Donc les interfaces et codes EBUS ne sont pas compatibles avec IBUS.

Sinon quelqu’un aurait il une interface ALDES CONNECT à me prêter pour avancer sur le décodage ?

Salut @yanoooou,

Malheureusement je n’en possède pas sinon ce serait sans soucis ! Peut être que @guix77 ou @mgre pourrons te dépanner à ce sujet ?

Salut,

Peux-tu stp expliquer le lien que tu trouves entre les valeurs T_haut et T_bas de tes relevés en mode expert avec les valeurs Hexa des trames ?

Car je comprend pas comment tu passes de 35 à 0x6E ? 6E faisant 110 en décimal je suis perdu.

Salut, pour pouvoir décoder un flottant dans une trame, il faut connaître ses règles d.'encodage en binaire, c’est à dire sa résolution, sa plage et le nombre de bits.
Exemple, supposons qu’on a une trame qui a 8 bits pour le coder, on a donc 256 valeurs possibles, si la valeur min c’est -9 et résolution 0,4.
6E donne 110, 110x0,4=44, on ajoute la valeur min -9 ça donne 35.
69 donne 105, 105x0,4-9=33
La valeur max sera -9 + 255x0,4=93.
Mais ce n’est qu’une supposition en regardant les valeurs

Bonjour à tous,
Voici quelques infos sur les recherches de mon côté.
Après avoir été trop optimiste et trop rapide dans ma première analyse du protocole ibus pensant que c’était du modbus, j’en arrive à la même conclusion que @yanoooou, c’est très proche du ebus mais ce n’est pas vraiment du ebus… :pensive:

En effet, après avoir réalisé une interface prototype ibus → usb je n’ai jamais vraiment réussi à communiquer avec ma vmc DeeFly en modbus. J’ai alors exploré les protocoles Lin puis ebus basé sur ebusd (merci @AirV :wink: ) mais toujours sans succès.

Le travail de @yanoooou redonne un peu d’espoir de réussir et m’a rappelé ma première approche de décodage de la transmission radio entre la télécommande Aldes 11023226 et le module optionnel TI CC110L de la VMC.

A l’époque j’avais identifié que les températures était codées comme expliqué par @djtef avec une résolution de 0.5deg et un offset de -33.
Exemple pour une température de 22°C on obtient 0x6E. (110*0.5-33=22)

Pour les vitesses de la VMC c’était simplement de 0 à 3…
Si cela peut aider…

REQUEST speed up
TEMP in 18
TEMP out 18
temp remote 24
speed_state [0…3] 0 (holidays)
speed_request 1 (daily)
temp_type auto
Filter_state [0…3] 1
time ?
energy [kWh] ?
1st trame
RX FIFO (remote TX) [0x] [0b] [0d] DECODAGE
0x17 00010111 23
0xC4 11000100 196
0xA0 10100000 160
0x1C 00011100 28
0x87 10000111 135
0x61 01100001 97
0xCA 11001010 202
0x30 00110000 48
0x00 00000000 0
0x00 00000000 0
speed request 0x01 00000001 1 daily
0x00 00000000 0
0x00 00000000 0
0x00 00000000 0
0x00 00000000 0
temp remote 0x72 01110010 114 24
0x40 01000000 64
0x09 00001001 9
0x0D 00001101 13
0x03 00000011 3
0xC5 11000101 197
0x66 01100110 102
0x9B 10011011 155
0x9B 10011011 155
0x1C 00011100 28
0x85 10000101 133
1st trame
TX FIFO (MVHR TX) [0x] [0b] [0d] DECODAGE
0x1C 00011100 28
0xC4 11000100 196
0xA0 10100000 160
0x1C 00011100 28
0x87 10000111 135
0x29 00101001 41
speed state 0x00 00000000 0 holidays
0xA0 10100000 160
0x00 00000000 0
0x20 00100000 32
0x00 00000000 0
temp bypass? 0x6E 01101110 110 22
0x40 01000000 64
0x06 00000110 6
0x13 00010011 19
0x0C 00001100 12
0x30 00110000 48
temp in/out ? 0x66 01100110 102 18
temp in/out ? 0x66 01100110 102 18
0x29 00101001 41
0x10 00010000 16
0x00 00000000 0
0x00 00000000 0
0xC4 11000100 196
0x09 00001001 9
0x82 10000010 130
0x00 00000000 0
0xC2 11000010 194
CRC ? 0xD9 11011001 217

@yanoooou combien de temps penses-tu qu’il te faudrait? J’ai une Aldes Connect mais elle me sert tous les jours… :sweat_smile:

Et sinon, si on dump le firmware du STM32 de l’Aldes Connect ne pensez-vous pas qu’on peut y arriver plus vite? Je pense arriver à extraire le firmware mais je n’ai pas les compétences pour décompiler… :sweat:

Hello!

Merci a tous pour les infos !

Je pense avoir décodé une partie de la trame.
Voici la liste des valeurs avec les calculs :
bytes N°5 : « Soft » = dec(x)
bytes N°7 : « Etat » = ???
bytes N°29 : « Cond_C » = dec(x)/2
bytes N°30 : « Cond_R » = dec(x)/2
bytes N°37 : « T_haut » = dec(x)*0.5-20
bytes N°38 : « T_bas » = dec(x)*0.5-20
bytes N°33 : « T_hp » = dec(x)*0.5-20
bytes N°35 : « T_evap » = dec(x)*0.5-20
bytes N°34 : « T_vmc » = dec(x)*0.5-20

Je vais prochainement mettre à jour le code de mon ESP32 pour afficher directement ces valeurs sur la page web embarquée.

@PaC , pour l’ ALDES connect je pense qu’il faudrait bien 1 semaine, sans garantie de résultat :slight_smile:
Sinon tu pourrais « sniffer » les trames IBUS lorsque tu envoie des commandes via l’ ALDES connect et me transmettre les trames dans un premier temps.
Sinon décompiler le firmware du STM32 me semble compliqué…

Dés que j’aurai un moment, je vais essayer de faire un montage pour envoyer des trames sur l’IBUS.

2 « J'aime »

Ça prend forme, j’aime ça ! :stuck_out_tongue:

Effectivement il reste la partie TX à faire…

Pour information il y a aussi @guix77 qui a une interface AldesConnzct mais de mémoire il l’utilise. Peut-être qu’il pourrait aider au dev, de mémoire il n’était pas mauvais vu qu’il a déjà fait une intégration AldesConnect pour HA. :wink:

Voir ici :