in Home Assistant, Projects

Dixcell IC100CX Home Assistant интеграция

След доста мъки най-накрая термопомпата в къщата се управлява почти както искам, остава да вкарам логиката за връзка между очаквана външна температура и изходяща температура на водата от нея.


Първо да спомена каква е тя – 12 киловата трифазна вода-вода на Geotok с управление Dixell ic100cx.
Комуникацията между нея и Home Assistant става през modbus, за целта е необходим XJ485CX – TTL/RS485 serial interface. В България можете да го закупите от Apogee99, обикновено дори го имат налично 🙂
(следващата стъпка е да го елиминирам и него, но комуникацията не е чист сериен интерфейс, има допълнителен сигнал, който се подава от този преходник към диксела. Още не ми е останало време да го дебъгна за съжаление)

От тук нататък е въпрос на лични предпочитания как да изградите комуникацията. При мен отива в Protoss-PE11 модбъс гейт и от там всичко тече по TCP/IP.

Регистрите, които основно ви трябват от modbus:
256 – текуща температура на изхода на термопомпата
258 – текуща температура на входа на термопомпата
260 – текуща температура на входа от сондажа
262 – текуща температура на изхода от сондажната вода
1145 – зададена температура при охлаждане
1148 – зададена температура при отопление
1280 бит 0 – статус на термопомпата, 1 – включена, 0 – stand-by. При писане на 1 в регистъра контролера минава в stand-by
1282 bit 6 – активен режим охлаждане. 1 – включен. Запис в 1282 на 0x4040 в регистъра я включва в режим охлаждане (само, ако преди това е била изключена – 0 в бит 0 на 1280)
1282 bit 7 – активен режим отопление. 1 – включен. Запис в 1282 на 0x8080 в регистъра я включва в режим охлаждане (само, ако преди това е била изключена – 0 в бит 0 на 1280)

Всички температурни стойности са цели числа, като последната цифра се възприема като десетична от самия контролер, примерно 351 означава 35.1 градуса

След като сме въоръжени с горните данни (отне ми доста време да успея да ги събера с reverse engineering, Copeland не ги дават на никого) нататък нещата са лесни.

Примерни конфигурации за HomeAssistant

modbus:
  - name: "TP"
    type: tcp
    host: XXX.XXX.XXX.XXX
    port: 502
    delay: 10
    message_wait_milliseconds: 100
    sensors:
      - name: tp_status_register_0
        data_type: uint16
        address: 1280
        input_type: holding
        slave: 1
    climates:
      - name: TP Target Temperature
        data_type: int16
        address: 256
        target_temp_register: [256,1145,256,256,1148,256,256]
        hvac_mode_register:
          address: 1282
          values:
            state_heat: 33924
            state_cool: 17476
            state_off: 1028
            
        max_temp: 55
        min_temp: 15
        precision: 1
        scale: 0.1
        temp_step: 0.1
        slave: 1
switch:
  - platform: template
    switches:
      heatingonoff:
        turn_on:
          - service: modbus.write_register
            data:
              address: 1282
              slave: 1
              hub: TP
              value: 0x8080
        turn_off:
          - service: modbus.write_register
            data:
              address: 1280
              slave: 1
              hub: TP
              value: 0x1
      coolingonoff:
        turn_on:
          - service: modbus.write_register
            data:
              address: 1282
              slave: 1
              hub: TP
              value: 0x4040
          - service: modbus.write_coil
            data:
              address: 1449
              slave: 1
              hub: PLC02
              state: false
        turn_off:
          - service: modbus.write_register
            data:
              address: 1280
              slave: 1
              hub: TP
              value: 0x1
          - service: modbus.write_coil
            data:
              address: 1449
              slave: 1
              hub: PLC02
              state: true

climate:
  - platform: generic_thermostat
    name: House Heating
    heater: switch.heatingonoff
    target_sensor: sensor.average_indoor_temperature
    min_temp: 15
    max_temp: 25
    target_temp: 20.5
  - platform: dual_smart_thermostat
    name: House HVAC
    heater: switch.heatingonoff
    cooler: switch.coolingonoff
    target_sensor: sensor.average_indoor_temperature
    heat_cool_mode: true
    min_temp: 15
    max_temp: 25
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    target_temp_low: 19
    target_temp_high: 24

Също така е добра идея да синхронизираме статуса при старт на Home Assistant. За тази цел създаваме две нови автоматизации:

alias: Sync TP cooling mode
description: ""
trigger:
  - platform: homeassistant
    event: start
condition:
  - condition: numeric_state
    entity_id: sensor.tp_status_register
    below: 32880
    above: 16447
action:
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.coolingonoff
mode: single


description: "Sync Heat pump heat state at boot"
mode: single
trigger:
  - platform: homeassistant
    event: start
condition:
  - condition: numeric_state
    entity_id: sensor.tp_status_register
    above: 32898
action:
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.heatingonoff