Interfaçage HITACHI Yutaki S (Pompe à chaleur)

Bonjour à tous,

Je me permets de créer un sujet dédier ici concernant l’interfacage avec Home Assistant d’une pompe à chaleur HITACHI Yutaki S.

J’éditerai ce post petit à petit pour arriver petit à petit à un tuto.

Le but de l’ouverture de ce sujet est dans un premier temps de rassembler l’ensemble des gens qui ont ce système de chauffage afin de d’échanger sur les différentes manières d’échanger.

La création de ce post fait suite à un début d’échanges ICI

Voilà mon système :

2 « J'aime »

Pour infos, dans le cadre d’un autre projet voilà les dépôt/lien intéressant que j’avais trouvé.

J’ai d’ailleur utilisé le module BSB-LAN en combinaison à un ESP32 pour la PAC atlantic de mon voisin et ça marche à merveille.

Mes sources :

D’ailleur je peux assez facilement tester pour vous le module BSB-LAN, il faut juste que je trouve un esp32 qui traîne :wink:

Du coup je confirme qu’il y a une composante continue de 13,5V sur les bornes 3 et 4 sur laquelle est superposé une trame de communication. La tension oscille d’environ 5V (+2,5V /-2,5V).

[EDIT du 03/12/2022]
@cocof, @Gaitt, @waako @Twinsen

après essai via un esp32 38pin qu’il me restait (pas au bon format, il fallait un 30pin) le code du module BSB-LAN ne fonctionne pas tel quel sans modification. De plus cela fait redémarrer l’écran de ma PAC de temps en temps donc pas très bon signe…

:laughing: et t’as pas peur pour la garantie de ta PAC?
La mienne a moins d’un an, j’ai pas envie de la briquer ou autre…

Mdr, elle a été installé en 2018 donc plus sous garantie depuis un moment :wink:

Bonjour
Module P1P2-ESP-interface recu, connecté sur le bus h- link ( broche 3/4 peu importe le sens), après confirmation du wifi ( adresse box, serveur mqtt, et logon/login), ça communique entre ma PAC et home assistant !
Bon pour le moment y a aucune info utile car le code est fait pour une dailkin, reste maintenant à mettre en forme le message pour que ça corresponde a du Hitachi!

1 « J'aime »

C’est un bon debut, je pense que je vais craquer et m’acheter le module aussi!!

Je craquerais aussi dans le temps car cela me fera un backup en cas de problème de ma passerelle Modbus HITACHI.

Par contre vu le prix je pense que je me ferai un PCB moi même car la puce MAX22088 vaut 7€ et le schéma nécessaire est dispo sur le site du fabricant dans la doc du kit évaluation alors il y a de quoi faire soi même.

Tu arrives à enregistrer les trames bruts ?

Non ça envoie des infos déjà traitées/formaté mais pour Daikin via mqtt ,( qui ne correspond a rien pour nos Hitachi) voir:

Je regarde le code mais c’est y compliqué, y a bcp de fichier et une notice en anglais… Pas sûr que j’y arrive.

Ah ben oui forcément, d’où ma question des trames brut.

bonjour, je me lance dans un petit tuto de mes découvertes de pilotage de ma pac hitachi Yutaki Combi 2.0:) voici mes sources et remerciements

il faut donc acheter le module P1P2-ESP-interface (aussi nommé P1P2MQTT bridge) chez Arnold (un peu plus de 100€, pas besoin du module Ethernet. on le reçoit sous 10j, on l’assemble, on le connecte au bus de l’unité intérieur (sur le même bus que la télécommande, peu importe le sens de polarité, éventuellement vérifier qu’il y a bien une tension d’environ 15V continu sur le bus. Attention a connecter PAC hors tension. Dois y avoir moyen de se le faire soit même, attendre que Neuvidor se lance…)

Le module P1P2 émet ainsi un réseau wifi, il faut s’y connecter à l’aide de son téléphone (code wifi P1P2P3P4), on ouvre une page internet à l’adresse http:// 192.168.4.1. On tombe sur le page de configuration du module P1P2 ; on renseigne son reseau wifi, l’adresse ip de sont Home assistant, ainsi que son logon/login mqtt. (voir l’excellente video youtube du journaldethomas sur l’intégration zigbee qui explique très bien comment installer Mosquitto broker).

au bout de qq minute, sous l’intégration Mosquitto vous allez voir apparaitre un appareil P1P2 et tout plein d’entité… qui ne vous servent à rien car par défaut le firmware du module P1P2 est pour du daikin.
Il faut donc flasher 2 nouveaux firmwares dans le module P1P2 : il faut récupérer les 2 firmwares nommé H-Link sous P1P2Serial/Firmware_images at H-link · Arnold-n/P1P2Serial · GitHub et suivre les instructions de la même pages. j’ai un peu galéré donc je résume ici : il y a donc 2 firmwares à télécharger : 1 pour l’ATMEGA et 1 pour l’ESP.

  • Pour l’ATMEGA : sous windows, on ouvre une fenêtre cmd.exe et on se place dans un répertoire ou on a préalablement téléchargé avrdude et le firmware P1P2Monitor-20221218-v0.9.29-H-link-P1P2-ESP-interface.ino.hex et on tape (192.168.1.192 : c’est l’adresse ip du mon module P1P2) :
avrdude.exe -c avrisp -p m328p  -P net:192.168.1.192:328 -e -Uflash:w:P1P2Monitor-20221218-v0.9.29-H-link-P1P2-ESP-interface.ino.hex:i
  • pour l’ESP, en ligne de commande ca doit être : python espota.py -i <IPv4> -p 8266 --auth=P1P2MQTT -f P1P2-bridge-esp8266-20221218-v0.9.29-H-link-P1P2-ESP-interface.ino.bin
    mais chez mois ca n’a pas fonctionné, je suis donc passé par un IHM trouvé sous : ESP8266-OTA-ESPOTA - DOMOTRONIC ca marche impec !

En utilisant l’utilitaire MQTT explorer (http://mqtt-explorer.com/ version portable) on peut voir les trames MQTT qui circulent. On se connecte comme ca : (192.168.1.44 = adresse ip de mon HA, username et password sont ceux de l’utilisateur mqtt créer sous HA.


puis on clique sur connecte et on voit les trames!!!

nota : si on utilise MQTT explorer avant de flasher les firmware on y voir des message d’erreurs dans les trames.

maintenant tout se passe sous HA, le but étant de récupérer la trame et de les transformer en valeur décimale, dans le fichier configuration.yaml il faut ajouter (merci Leon223) :

mqtt:
  sensor:
    - name : Hitachi
      unique_id: hitachi_status
      icon: mdi:transfer-right
      state_topic: "P1P2/R/192"
      value_template: >
        {% set parts = value.split(" ") %}
        {% set list = namespace(numbers=[]) %}
        {% if parts[4].startswith("89002901010100E2") %}
        {% set data = parts[4] %}
        {% for i in range(0, (int)((data | count) / 2)) %}
        {% set index = i * 2 %}
        {% set combine = data[index] + "" + data[index+1] %}
        {% set list.numbers = list.numbers + [combine | int(combine,16)] %}
        {% endfor %}
        {{ list.numbers | to_json }}
        {% else %}
        {{ states('sensor.hitachi') }}
        {% endif %}

avec state_topic : récupérer les infos de MQTT explorer (entourées en bleu dans l’image précédente)
ce code permet de mettre dans le sensor.hitachi un tableau avec les valeurs décimales de la trame commençant par 89002901010100E2
comme on peut le voir dans MQTT explorer d’autres trames circulent, j’ai donc créer aussi des sensors avec toutes les autres trames, je suis en train de chercher à quoi ca correspond. J’ai déjà trouvé la valeur de la température de mon thermostat intérieur dans la trame commençant par 89002901010100E3, j’ai donc créé un sensor.hitachi1. j’ai trouver environ 10 trames différentes,
Puis faut faire du reverse ingéniering pour trouver à quoi correspond toutes les valeurs du tableaux du sensor en comparant les valeurs affichées sur la télécommande !! et créer les capteurs qui vont bien. En voici déjà plein (à ajouter dans configuration.yaml :

template:
  - sensor:
      - name: "Hitachi Operation status"
        unique_id: hitachi_operation_status
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.8 }}
      - name: "Hitachi Operation status text"
        unique_id: hitachi_operation_status_text
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {% set status = list.8 %}
          {% if status == 72 %}
          en chauffage ECS
          {% elif status == 68 %}
          arreté
          {% elif status == 69 %}
          en attente
          {% elif status == 70 %}
          Chauffage En demande 
          {% elif status == 11 %}
          Alarm
          {% endif %}
      - name: "Hitachi Evi"
        unique_id: hitachi_evi
        unit_of_measurement: '%'
        icon: mdi:percent
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.9 }}
      - name: "Hitachi Evo"
        unique_id: hitachi_ev0
        unit_of_measurement: '%'
        icon: mdi:percent
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.10 }}
      - name: "Hitachi Freq"
        unique_id: hitachi_freq
        unit_of_measurement: 'Hz'
        icon: mdi:percent
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.11 }}
      - name: "Hitachi Courant"
        unique_id: hitachi_courant
        unit_of_measurement: 'A'
        icon: mdi:percent
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.13 }}
      - name: "Hitachi TWI"
        unique_id: hitachi_twi
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.17 }}
      - name: "Hitachi TWO"
        unique_id: hitachi_two
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.18 }}
      - name: "Hitachi T ECS inferieure"
        unique_id: hitachi_t_ecs_inf
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.21 }}
      - name: "Hitachi T eau corrigée"
        unique_id: hitachi_twcorrigee
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.32 }}
      - name: "Hitachi T Liq"
        unique_id: hitachi_t_liq
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.25 }}
      - name: "Hitachi T ext"
        unique_id: hitachi_text
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.26 }}
      - name: "Hitachi T ext moyenne"
        unique_id: hitachi_textmoyenne
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.27 }}
      - name: "Hitachi Td"
        unique_id: hitachi_td
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.28 }}
      - name: "Hitachi Te"
        unique_id: hitachi_te
        unit_of_measurement: '°C'
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi') | from_json) %}
          {{ list.29 }}

      - name: "Hitachi Température intérieure"
        unique_id: hitachi_temp_interieure
        icon: mdi:temperature-celsius
        state: >
          {% set list = (states('sensor.hitachi1') | from_json) %}
          {{ list.24 + (list.25)/10 }}

attention pour le dernier la source est sensor.hitachi1. la valeur de la température est sur 2 valeurs : les unités à la 24eme place et les dixiemes (0 ou 5) à la 25eme place d’ou ma formule list.24 + (list.25)/10

reste plus qu’a créer une carte entités dans un dashbord du type :

type: entities
entities:
  - entity: sensor.hitachi
  - entity: sensor.hitachi_operation_status
  - entity: sensor.hitachi_operation_status_text
  - entity: sensor.hitachi_temperature_interieure
  - entity: sensor.hitachi_evi
  - entity: sensor.hitachi_evo
  - entity: sensor.hitachi_freq
  - entity: sensor.hitachi_courant
  - entity: sensor.hitachi_twi
  - entity: sensor.hitachi_two
  - entity: sensor.hitachi_t_ext
  - entity: sensor.hitachi_t_ext_moyenne
  - entity: sensor.hitachi_t_eau_corrigee
  - entity: sensor.hitachi_t_ecs_inferieure
  - entity: sensor.hitachi_t_liq
  - entity: sensor.hitachi_td
  - entity: sensor.hitachi_te
title: PAC

et on obtient :

voici aussi toutes les trames trouvées :

RAF1 : trouver a quoi servent les autres trames et les autres valeurs : mode eco/confort du chauffage, de l’ECS, puissance consommée, restituée, loi d’eau, pression, débit.
RAF2 : la on ne fait que de la lecture, le but étant aussi de faire de l’écriture pour piloter la PAC via HA
Nota : pour le passage en mode eco chauffage, je passe via un contact sec de mon Ecodevice RT2 et un planning sous HA, mais quand j’aurai réussi à faire une communication bidirectionnel je pourrai le faire via le module P1P2.

2 « J'aime »

Vraiment cool ton partage et très belle progression depuis ton switch de Domoticz à HA en passant par le reverse engineering de cette PAC !

De mon coté j’ai mon thermostat sans fil (ATW-RTU-05) qui vient de me lâcher, enfin il fonctionne quelques minutes/heures/jours puis perd la communication avec le bus H-LINK. Du coup via la passerelle Modbus je n’ai pas assez la main sur les paramètres de la PAC pour remplacer le thermostat d’ambiance. Je suis donc actuellement en loi d’eau pur, sans régulation d’ambiance.

Je vais donc me lancer très prochainement dans la construction d’un PCB vu que le travail a plutôt bien avancé de votre coté ! Je suis en train de dessiner 2 PCB :

  • L’un basé sur une puce XL1192D avec uniquement des composants traversant
  • L’autre basé sur la puce MAX22088 avec uniquement des composants de surface

Je vous tiens au courant sur mes avancés.

C’est top çà, bravo! C’est déjà pas mal d’infos remontées sur HA.

Si tu factures ton module moins cher que celui d’Arnold, alors ça m’intéresse!! :wink:

ah ben c’est bien l’objectif, je suis quelqu’un de patient et j’aime faire moi même pour apprendre et souvent cela réduit les coûts :slight_smile:

1 « J'aime »

J’ai cherché sur les sites chinois des modules tout fait à base de MAX22088 mais rien trouvé.

Je viens de reporter le schéma d’Arnold sur mon logiciel, reste maintenant à adapter les valeurs des résistances et des condensateurs en trouvant des équivalents en version traversant. Je pense que son schéma pdf est fortement inspiré de celui de la doc du composant XL1192.

L’état actuel de mon projet :

Extrait de la doc du XL1192 :

C’est exactement ce que j’ai fait, j’ai aussi cherché à partir de composant MM1192 et XL1192 mais rien trouvé tout fait. Je m’oriente pour le moment plus sur le XL1192 car celui-ci existe en version traversante et la puce n’est pas trop onéreuse => 10,53€ les 5 puces.

De toute façon si je réalise des PCB, j’en approvisionnerai 5 car c’est la quantité minimale pour la fabrication de PCB :slight_smile:

[EDIT]

J’ai un peu de mal à identifier les condensateurs en montage traversant, ceux que je trouve sont immenses… Le format de la carte est loin d’être définitif mais j’avance bien. J’ai demandé de l’aide aux connaisseurs vis à vis du choix des condensateurs donc je devrais pouvoir lever ce point assez rapidement. :slight_smile:

Les points restants à éclaircir :

  • Pourquoi 2 condensateur de chaque coté de U3 => 10µF en // d’un 100nF
  • Pourquoi les 10µF sont aussi gros en version traversant ?
  • Valider l’adaptation de la liaison TX/RX vers l’ESP32
  • Mettre en place les connectiques annexes (bornier, liaison ESP, etc…)

Le choix des condensateurs est résolu, ça commence à prendre forme !