Poistoilmalämpöpumpun päivitys, osa 2

Poistoilmalämpöpumpun päivitys, osa 2

Nilan EC9 poistoilmalämpöpumpun päivityksen ensimmäisessä osassa käsiteltiin CTS 600 -ohjaimen vaihtamista CTS 602:ksi. CTS 602 mahdollistaa laitteen etäohjauksen, sillä sitä voi hallita RS485 -väylää käyttävän Modbus -sarjaliikenneprotokollan avulla.

Etäohjauksen kytkentää varten tarvitaan USB RS485 -sovitin, jollaisia saa halvimmillaan parilla kympillä. Valitsin tarkoitukseen kuitenkin hieman laadukkaamman Hjelmslund Electronicsin USB485-STIXL sovittimen. Sen asetuksia piti muuttaa windows-ohjelmistolla että se tunnistautuisi Linuxissa oikein. Erillisten ajureiden asentamista ei tämän jälkeen pitäisi tarvita.

Kaapelointi toteutettiin kierretyllä parikaapelilla (Cat5e), kuljettamalla kaapeli CTS 602:n säädintilan oikean yläreunan läpiviennin kautta, josta menevät myös lämpötila-anturien kaapelit lämminvesivaraajalle ja lattialämmitykselle. RS485 kytketään CTS 602:n CN7 -liittimen nastoihin 2,3 ja 6. Nastat 2 ja 3 ovat RS485 -väylää varten ja nasta 6 on maadoitus. Kaapelin toiset päät kytketään USB -sovittimen vastaaviin nastoihin.

Kun kaapelointi on tehty ja USB -sovitin toimii oikein, voidaan tiedonsiirtoyhteyttä testata sitä varten tehdyllä skriptillä:

TESTING Nilan Connection
__main__.Nilan<id=0x76a1cd50, address=30, mode=rtu, close_port_after_each_call=False, precalculate_read_size=True, debug=True, serial=Serial<id=0x76a1ce10, open=True>(port='/dev/ttyUSB0', baudrate=19200, bytesize=8, parity='E', stopbits=1, timeout=1.0, xonxoff=False, rtscts=False, dsrdtr=False)>

MinimalModbus debug mode. Writing to instrument (expecting 7 bytes back): '\x1e\x03\x03ë\x00\x01ö\x15' (1E 03 03 EB 00 01 F6 15)
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1544030331973.6 ms, minimum silent period: 2.01 ms.
MinimalModbus debug mode. Response from instrument: '\x1e\x03\x02\x00\x02¬G' (1E 03 02 00 02 AC 47) (7 bytes), roundtrip time: 22.9 ms. Timeout setting: 1000.0 ms.

old userVentSet:             2
new userVentSet:             1
Connection to the Nilan instrument looks good!

Jos kaikki toimi oikein, pitäisi skriptin antaa yllä olevan kaltainen tuloste ja Nilanin puhaltimien nopeus pitäisi olla muuttunut. Virhetilanteessa kannattaa kokeilla vaihtaa väyläkaapelit toisin päin ja tarkistaa onko skriptissä määritelty RS485 -sovittimen käyttämä USB -portti oikein (oletuksena /dev/ttyUSB0).

Modbus -protokollan mukaisesti, Nilanin tiedot on tallennettu kahden tyyppisiin rekistereihin: Input -rekistereissä olevaa tietoa ei voida väylän kautta muuttaa. Tällaista tietoa ovat esimerkiksi lämpötila-antureiden arvot. Toinen rekisterityyppi on Holding -rekisteri.. Niihin on tallennettu tiedot mm. laitteen asetuksista. Holding rekistereiden tietoja on mahdollista muuttaa kirjoittamalla uudet arvot rekistereihin.

Home Assistantissa ei tällä hetkellä ole (vielä) suoraa tukea Nilanin laitteiden (CTS 602) ohjaamiseen, mutta tuki Modbus -protokollalle löytyy. Sitä varten configuration.yaml -tiedostoon lisätään rivit:

modbus:
  type: serial
  method: rtu
  port: /dev/ttyUSB0
  baudrate: 19200
  stopbits: 1
  bytesize: 8
  parity: E

Nilanin tiedot luetaan laitteen rekistereistä Modbus -sensorien avulla. CTS 602:n käyttämät rekisterit ja muut tiedot löytyvät Nilanin ohjeesta. Laitteen slave id tai node address on 30 ja esimerkiksi asetuslämpötila löytyy holding -rekisteristä numero 1004. Lämpötilan arvo rekisterissä on ohjeen mukaan 100 -kertainen, joten sen voi skaalata oikeaksi sensorin asetuksissa:

- platform: modbus
  registers:
    - name: Setpoint temp
      unit_of_measurement: °C
      scale: 0.01
      slave: 30
      register: 1004
      register_type: holding

Home Assistantin käyttöliittymää varten, tehdään configuration.yaml -tiedostoon rivit kytkimille ja eri asetusten valinnoille:

switch:
  - platform: template
    switches:
      nilan_kytkin:
        friendly_name: "Pääkytkin"
        value_template: "{{ is_state('sensor.nilan_control_run', '1') }}"
        turn_on:
          service: modbus.write_register
          data_template:
            unit: 30
            address: 1001
            value: 1
        turn_off:
          service: modbus.write_register
          data_template:
            unit: 30
            address: 1001
            value: 0

input_select:
  nilan_asetus:
    name: Lämmitysvalinta
    options:
      - Lämmitys
      - Jäähdytys
      - Automaattinen
    initial: Automaattinen
    icon: mdi:settings

input_number:
  nilan_lampotilapyynto:
    name: Lämpötilapyyntö
    initial: 30
    min: 15
    max: 30
    step: 1

  nilan_ilmanvaihtopyynto:
    name: Puhaltimet
    initial: 2
    min: 0
    max: 4
    step: 1

Ylimpänä käytetty template switch sisältää valmiiksi komennot PILP:n käynnistämiseksi ja sammuttamiseksi. Lisäksi value_template -rivi seuraa nilan_control_run -sensorin (holding-rekisteri 1001) avulla seinäpaneelin kautta tehtyjä muutoksia ja päivittää Home Assistantin käyttöliittymässä olevan kytkimen tilan vastaavaksi.

Yllä olevien input_select ja input_number -valintojen käyttämiseksi käyttöliittymän kautta, automations.yaml -tiedostoon lisätään alla olevat rivit:

- alias: 'PILP lämmityspyyntö'
  trigger:
    platform: state
    entity_id: input_number.nilan_lampotilapyynto
  action:
    - service: modbus.write_register
      data_template:
        unit: 30
        address: 1004
        value: "{{ states('input_number.nilan_lampotilapyynto') | int *100}}"

- alias: 'PILP lämmityspyynnön päivitys jos muutettu seinäpaneelista'
  trigger:
    platform: state
    entity_id: sensor.nilan_control_tempset
  action:
    service: input_number.set_value
    data_template:
      entity_id: input_number.nilan_lampotilapyynto
      value: "{{ trigger.to_state.state | int }}"

- alias: 'PILP ilmanvaihtopyyntö'
  trigger:
    platform: state
    entity_id: input_number.nilan_ilmanvaihtopyynto
  action:
    - service: modbus.write_register
      data_template:
        unit: 30
        address: 1003
        value: "{{ states('input_number.nilan_ilmanvaihtopyynto') | int }}"

- alias: 'PILP ilmanvaihtopyynnön päivitys jos muutettu seinäpaneelista'
  trigger:
    platform: state
    entity_id: sensor.nilan_control_ventset
  action:
    service: input_number.set_value
    data_template:
      entity_id: input_number.nilan_ilmanvaihtopyynto
      value: "{{ trigger.to_state.state | int }}"

- alias: 'PILP asetus'
  trigger:
    platform: state
    entity_id: input_select.nilan_asetus
  action:
    - service: modbus.write_register
      data_template:
        unit: 30
        address: 1002
        value: "{%if states.input_select.nilan_asetus.state == 'Lämmitys' %}1{%elif states.input_select.nilan_asetus.state == 'Jäähdytys' %}2{%else%}3{%endif%}"

- alias: 'PILP asetus muutettu seinäpaneelista'
  trigger:
    platform: state
    entity_id: sensor.nilan_control_mode
  action:
    service: input_select.select_option
    data_template:
      entity_id: input_select.nilan_asetus
      option: "{%if trigger.to_state.state | int == 1 %}Lämmitys{%elif trigger.to_state.state | int == 2%}Jäähdytys{%else%}Automaattinen{%endif%}"

Yllä jokaiselle toiminnolle on kaksi automaatiota: toinen välittää muutokset PILP:lle jos asetuksia on muutettu Home Assistantissa ja toinen päivittää Home Assistantin valinnat vastaaviksi, jos asetuksia on muutettu PILP:n seinäpaneelin kautta.

PILP asetukset
PILP asetukset
PILP tiedot
PILP tiedot

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *