Hayward, Oasis and other generic Pool Heatpump using PC1002

Hi there,

If anyone interested, I was able to create climate entity from PC1002 pool heatpump board using Modbus.

Most of the information come from either this pdf https://www.oasisheatpumps.com/pdf/Technical_Manual_Pool_inverter_of_PC1002_2019.pdf or comparing registers after changer a settings on display.

If you think I am missing something, please share.

Modbus is done using a EW11 RS485 to Wifi gateway

modbus:
  - name: modbus_pool
    type: tcp
    host: 172.30.30.21
    port: 9999
    climates:
      - name: "Piscine"
        input_type: holding
        address: 2046
        slave: 1
        hvac_mode_register:
          address: 1019
          values:
            state_cool: 0
            state_auto: 1
            state_heat: 2
        fan_mode_register:
          address: 1076
          values:
            state_fan_low: 1
            state_fan_auto: 0
        hvac_onoff_register: 1011
        target_temp_register: 1136
        max_temp: 35
        min_temp: 15
        offset: 0
        precision: 1
        scale: 0.1
        temp_step: 0.5
        temperature_unit: C

If you have any question, feel free to ask.

Etienne

Hello Etienne,

I’ve been looking for this solution for a long time now, could you show me the configuration for home assistant, and tell me exactly how to set up this configuration. ?
Thank you very much

Hi Eric,

You need a RS485 to Wifi gateway (like Elfin EW11 https://www.aliexpress.com/item/32916950283.html).
You then connect it to your heatpump RS485 (I used a cat5 cable)

Follow intruction in EW11 manual to configure it (basically connect it to your Wifi)
Then configure Serial settings as this :

And Communications Settings as this :

And finally add this to your configuration.yaml (edit IP address according to yours)

modbus:
  - name: modbus_pool
    type: tcp
    host: 172.30.30.21
    port: 9999
    climates:
      - name: "Pool"
        input_type: holding
        address: 2046
        slave: 1
        hvac_mode_register:
          address: 1019
          values:
            state_cool: 0
            state_heat_cool: 1
            state_heat: 2
        fan_mode_register:
          address: 1076
          values:
            state_fan_low: 1
            state_fan_auto: 0
        hvac_onoff_register: 1011
        target_temp_register: 1136
        max_temp: 35
        min_temp: 15
        offset: 0
        precision: 1
        scale: 0.1
        temp_step: 1
        temperature_unit: C
    sensors:
      - name: "Pool Ambiant Temperature"
        slave: 1
        address: 2049
        data_type: int16
        input_type: holding
        scale: 0.1
        offset: 0
        precision: 1
        device_class: temperature
        state_class: measurement
        unit_of_measurement: '..C'
      - name: "Pool Water Outlet Temperature"
        slave: 1
        address: 2047
        data_type: int16
        input_type: holding
        scale: 0.1
        offset: 0
        precision: 1
        device_class: temperature
        state_class: measurement
        unit_of_measurement: '..C'
      - name: "Pool Fan Speed"
        slave: 1
        address: 2061
        data_type: int16
        input_type: holding
        scale: 0.1
        offset: 0
        precision: 1
        state_class: measurement
        unit_of_measurement: 'RPM'
      - name: "Pool Condenser Current"
        slave: 1
        address: 2022
        data_type: int16
        input_type: holding
        state_class: measurement
        unit_of_measurement: 'A'

This will create a standard entity climate and few other sensors to monitor things around like ambiant temperature, water outlet temperature, fan speed and Condenser Current (which can be use to track heatpump running or not).

Hello,
I have been looking to do this for a long time. I will order the EW11 and I will come back to you to give you news of my installation

really, thank you

Eric

For those interested, I create a MQTT using modbus4mqtt and MQTT HVAC Integration

The advantage is with this integration, you can use HVACAction which tells us current state of HVAC (heating, cooling, off, idle, etc) instead of only preset mode.

modbus4mqtt configuration (pc1002.yaml):

ip: 172.30.30.21
port: 9999
update_rate: 1
scan_batching: 1
registers:
  - pub_topic: "pool/hvac"
    address: 1019
    type: int16
    table: 'holding'
    pub_only_on_change: false
    json_key: mode
    value_map:
      cool: 0
      auto: 1
      heat: 2
  - pub_topic: "pool/hvac"
    address: 1011
    type: int16
    table: 'holding'
    pub_only_on_change: false
    json_key: power
    value_map:
      off: 0
      on: 1
  - pub_topic: "pool/hvac"
    address: 1136
    type: int16
    table: 'holding'
    scale: 0.1
    pub_only_on_change: false
    json_key: temp_target
  - pub_topic: "pool/hvac"
    address: 2046
    type: int16
    table: 'holding'
    scale: 0.1
    pub_only_on_change: false
    json_key: temp_inlet
  - pub_topic: "pool/hvac"
    address: 2047
    type: int16
    table: 'holding'
    scale: 0.1
    pub_only_on_change: false
    json_key: temp_outlet
  - pub_topic: "pool/hvac"
    address: 2049
    type: int16
    table: 'holding'
    scale: 0.1
    pub_only_on_change: false
    json_key: temp_ambient
  - pub_topic: "pool/hvac"
    address: 2061
    type: int16
    table: 'holding'
    scale: 0.1
    pub_only_on_change: false
    json_key: fan_speed
  - pub_topic: "pool/hvac"
    address: 1076
    type: int16
    table: 'holding'
    pub_only_on_change: false
    json_key: fan_mode
    value_map:
      auto: 0
      low: 1
  - pub_topic: "pool/hvac"
    address: 2022
    type: int16
    table: 'holding'
    pub_only_on_change: false
    json_key: condenser_current
  - set_topic: "pool/hvac/fan/set"
    address: 1076
    type: int16
    table: 'holding'
    value_map:
      auto: 0
      low: 1
  - set_topic: "pool/hvac/mode/set"
    address: 1019
    type: int16
    table: 'holding'
    value_map:
      cool: 0
      auto: 1
      heat: 2
  - set_topic: "pool/hvac/power/set"
    address: 1011
    type: int16
    table: 'holding'
    value_map:
      off: 0
      on: 1
  - set_topic: "pool/hvac/target/set"
    address: 1136
    type: int16
    table: 'holding'
    scale: 0.1

Home Assistant (configuration.yaml)

mqtt:
  climate:
    - name: Pool
      unique_id: pool
      current_temperature_topic: "modbus4mqtt/pool/hvac"
      current_temperature_template: "{{ value_json.temp_inlet }}"
      fan_modes:
        - "auto"
        - "low"
      fan_mode_state_topic: "modbus4mqtt/pool/hvac"
      fan_mode_state_template: "{{ value_json.fan_mode }}"
      fan_mode_command_topic: "modbus4mqtt/pool/hvac/fan/set"
      icon: mdi:pool-thermometer
      max_temp: 35
      min_temp: 15
      modes:
        - "auto"
        - "cool"
        - "heat"
        - "off"
      mode_state_topic: "modbus4mqtt/pool/hvac"
      mode_state_template: "{{ 'off' if 'off' in value_json.power else value_json.mode }}"
      mode_command_topic: "modbus4mqtt/pool/hvac/mode/set"
      power_command_topic: "modbus4mqtt/pool/hvac/power/set"
      payload_off: "off"
      payload_on: "on"
      action_topic: "modbus4mqtt/pool/hvac"
      action_template : >-
        {% if value_json.condenser_current|int > 0 %}
          {% if (value_json.temp_inlet|int < value_json.temp_outlet|int and value_json.mode == 'auto') or value_json.mode == 'heat' %}
            heating
          {% elif (value_json.temp_inlet|int > value_json.temp_outlet|int and value_json.mode == 'auto') or value_json.mode == 'cool' %}
            cooling
          {% endif %}
        {% elif value_json.power == 'off' %}
          off
        {% else %}
          idle
        {% endif %}
      temperature_state_topic: "modbus4mqtt/pool/hvac"
      temperature_state_template: "{{ value_json.temp_target }}"
      temperature_command_topic: "modbus4mqtt/pool/hvac/target/set"
      temperature_unit: C
      temp_step: 0.1
  sensor:
   -  name: Pool Fan Speed
      state_topic: modbus4mqtt/pool/hvac
      unit_of_measurement: 'RPM'
      state_class: measurement
      value_template: "{{ value_json.fan_speed }}"
      icon: mdi:fan
   -  name: Pool Ambient Temperature
      state_topic: modbus4mqtt/pool/hvac
      unit_of_measurement: '..C'
      state_class: measurement
      value_template: "{{ value_json.temp_ambient }}"
      icon: mdi:pool-thermometer
   -  name: Pool Outlet Temperature
      state_topic: modbus4mqtt/pool/hvac
      unit_of_measurement: '..C'
      state_class: measurement
      value_template: "{{ value_json.temp_outlet }}"
      icon: mdi:thermometer

Then for turning off automatically when choosing mode off or tuning on if other mode I create this automation :

alias: Pool - ON/OFF
description: Pool - ON/OFF
trigger:
  - platform: mqtt
    topic: modbus4mqtt/pool/hvac/mode/set
    payload: "off"
    id: "off"
  - platform: mqtt
    topic: modbus4mqtt/pool/hvac/mode/set
    payload: heat
  - platform: mqtt
    topic: modbus4mqtt/pool/hvac/mode/set
    payload: cool
  - platform: mqtt
    topic: modbus4mqtt/pool/hvac/mode/set
    payload: auto
condition: []
action:
  - if:
      - condition: trigger
        id:
          - "off"
    then:
      - service: climate.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: climate.pool
    else:
      - service: climate.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: climate.pool
mode: single

Hello Etienne,

Hello,
I haven’t received my EW11 yet, I hope it arrives quickly
to test all of this.
thank you and I will come back to you
Eric


Hello Etienne,

I received my EW11, I plugged it in following your instructions.
I also added the information in the home assistant configuration file, but home assistant cannot retrieve the information, I see the home assistant IP in the communicate state tab on EW11
“here is the error” Enregistreur: homeassistant.components.modbus.modbus
Source: components/modbus/modbus.py:331
intégration: Modbus (documentation, problèmes)
S’est produit pour la première fois: 13:53:12 (1 occurrences)
Dernier enregistrement: 13:53:12

Pymodbus: modbus_pool: Error: device: 1 address: 1136 → Modbus Error: [Input/Output] ERROR: No response received after 3 retries"

do you have any idea about my problem?
quick question do you speak French?::slight_smile:

Hello,

Etienne ?

Salut Eric, désolé je reçois pas de courriel quand quelqu’un m’écrit ici…

Ça veut dire qu’il est pas capable de recevoir la réponse de l’équipement. Le mieux serait de faire des tests avec un logiciel de polling modubus être certains que le coté modbus fonctionne bien (j’utilise personnellement ModbusMaster). Je soupconne soit que le TX/RX est inversé ou un problème de config coté EW11

J’ai essayé d’inverser TX/RX ca ne va pas mieux, et avec modbusmaster, j’ai dans les logs IO erreur, …
Je viens de commander un adaptateur USB/RS485 pour faire un test et eliminer un problème avec EW11.
Je te tien au courant, pourrait on échanger par mail ou autre ? car pareil je n’ai pas de notification…

MErci

Eric

Bonjour,

Je cherche le pdf ci-dessus, impossible de le telecharger. Merci!

David

Quel PDF??? Celui de Oasis? Ça fonctionne moi je suis capable de l’ouvrir et le sauvegarder.

Bonjour Etienne,

Je n’ai pas reçu de notification de message, rhaaa

Le PDF sur le site d’Oasis ci-dessus, toujours timeout depuis lors.

David

Ya un soucis de ton coté, je viens encore d’ouvrir le PDF sans problème. Malheureusement je ne peux pas attacher de PDF dans le forum.

Essaie avec un autre serverur DNS ou un VPN peut-être?

Salut,

Je suis en france et la ca passe. J’avoue que je n’ai pas essayé depuis la belgique avec un vpn. J’essaierai en rentrant. Merci pour les conseils.

Une petite question: je ne trouve aucune integration modbus4mqtt. Modbus2mqtt bien. Sur gitlab je trouve bien modbus4mqtt cependant. Comment ajouter ceci?

Merci d’avance! Et encore désolé pour les questions bêtes. Pourquoi ne pas faire un esphome qui poll la PAC en modbus plutot?

David

Blockquote
Une petite question: je ne trouve aucune integration modbus4mqtt. Modbus2mqtt bien. Sur gitlab je trouve bien modbus4mqtt cependant. Comment ajouter ceci?

Je ne crois pas qu’il existe d’intégration HACS, il faut utiliser docker ou podman. Je te conseil fortement de te familiariser avec docker, tu seras beaucoup moins limité qu’en te fiant uniquement aux intégrations déjà toutes faites.

Blockquote
Merci d’avance! Et encore désolé pour les questions bêtes. Pourquoi ne pas faire un esphome qui poll la PAC en modbus plutot?

Ce serait tout à fait possible, j’ai tout simplement utilisé ce que je considérais comme le plus simple/basic possible et que j’avais disponible sous la main. J’ai trouvé le pdf assez tard dans mes démarches aussi, donc au début je n’était vraiment pas certains que ça fonctionnerait donc je ne voulais pas trop investir de temps et de $$$. Aussi, le but était de mettre le tout dans la thermpompe et “l’oublier” là, tout en considérant qu’ici il faut 30° en été et -30° en hiver.

Etienne,

Merci pour ta reponse.

Je me demandais juste si la solution mqtt te permettait d’avoir les modes, mais je vois que le climate standard le permet aussi, je vais essayer.

Ensuite je suis sur raspberry pi 5 et haos, marre de gerer des linux de tous types, docker pas de souci. Les backups,… et restore et autre sont très bien foutus avec haos, tu prends un autre raspi et hop c’est fini. J’ai assez de serveurs et malgré portainer et autre ca me fatigue :slight_smile:

Ou es-tu que tu aies -30 en hiver? En belgique on va de -20 à +35 mais la piscine ce n’est que de mai à octobre… Le reste, en hivernage, la PAC vidée.

Quelle marque as-tu? Il y en a beaucoup avec le PC1002 chinois apparemment. Chez moi elle est en bas d’un talus, cachée je pensais deporter l’ecran (modbus aussi donc) mais j’ai la flemme… pas envie de faire l’integration mecanique.

Pour info je fais une electronique custom pour gerer TOUTE la piscine, de mon variateur de frequence aux mesures (ph, orp, temperature, tds, pression filtration, debit,…), en passant par les lumieres, volet,… plus envie de telecommandes inutiles et impossible (à part rfxcom) à controler avec un vrai retour d’etat.

Si tu veux un hardware j’en produis un de plus…

David

Oui oui j’ai l’état pas juste le preset avec le thermostat générique.

La piscine est fermée de Octobre à Avril, mais pour hiverner je fais juste vider les tuyau, retirer la cellule du chlorinateur et la cartouche du filtre. La marque c’est Hayward, un gros fabricant ici, mais je crois que c’est juste en Amérique. Mais tser ils réinvente pas la roue, ils sourcent les pièces à gauche et à droite.