Nilan EC9 -Poistoilmalämpöpumpun päivitys, osa 2

Nilan EC9 -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

25 thoughts on “Nilan EC9 -Poistoilmalämpöpumpun päivitys, osa 2

  1. Kiitos hyvästä jutusta. Kohta lähtee itsellenikin tilaukseen USB-palikka. Itseäni kiinnostaisi erityisesti lattialämpöveden lämmitys automaattisesti pörssin halpoina tunteina tai hintarajojen mukaan. Samoin legionellakuumennuksen ajoitus.

    1. tsellä oli aiemmin käytössä lattialämmityksen automatiikka, niin että tietyn tehotason ylittyessä lattialämmitys kytkettiin pois ja tehotason alittuessa se kytkettiin taas päälle. Vastaavalla tavalla voisi tehdä automaation myös pörssisähkön mukaan. https://hyotynen.iki.fi/kotiautomaatio/tehomaksu/

      Oman Nilan EC9 version haaste vain on että lattialämmityksen säätöjä ei voi tehdä suoraan arvoja rekistereihin kirjoittamalla, vaan homma pitää hoitaa hieman kikkaillen, kirjoittamalla sopivat näppäinpainallukset holding-rekisteri 2000:een.

      1. Kiitos vastauksesta. Käyn hakemassa Turun Triopakilta perustikun kunhan kerkeen. Meinasin asentaa HA:n vanhaan läppäriiin, kun Piiden saatavuus on aika huono eli hinnat korkeat. Itselläni on kyllä ohjelmistokehitystausta, mutta tämmöistä en ole ennen tehnyt. Meillä on onneksi valmiiksi CTS 602. Toinen HA-projekti on tehdä autotallin sähkölämmityksen ohjaus Shellyn tuotteilla tai jollain minkä sähkömies saa kytkettyä helposti. Kirjoitan omasta projektistanikin jutun kunhan saan sen valmiiksi.

        Voisiko lattialämmityksen kytkemistä pois tehdä säätämällä lattialämmityksen maksimilämpötilan esimerkiksi 21 asteeseen ja halpoina tunteina vaikka 36 asteeseen? Tätä ehdotettiin tämän löytämäni toisen projektin tiimoilta. Sitä ja sinun juttuasi yhdistelemällä voisi saada mukavan kokonaisuuden. https://github.com/joriws/nilan2homeassistant

        1. Ihan ei tuon linkkaamasi repon hyöty auennut. Modbus toimii natiivisti HA:ssa ilman tuota mbusd:täkin ja itselle tarpeellisetset rekisterit löytyvät myös Nilanin ohjeesta.

          Lattialämmityksen saa pois päältä laskemalla maksimilämpötilaa alle nykyisen lämpötilan. Toisaalta jos sen haluaa pakottaa päälle, kannattanee nostaa minimilämpötilaa tätä ylemmäksi. Tähän automaatioon sopivat ehdot nordpoolin hinnoista ja mahdollisesti vielä sääennusteista, ettei tule keväisin ja syksyisin lämmityksessä ylilyöntejä.

          1. > Ihan ei tuon linkkaamasi repon hyöty auennut. Modbus toimii natiivisti HA:ssa ilman tuota mbusd:täkin ja itselle tarpeellisetset rekisterit löytyvät myös Nilanin ohjeesta.

            Repon tekijänä kommentoin, hyöty on se että sulla on HA-kone jossain talossa muualla kun kaapelin mitan päässä Nilanista, eli kuinka yhdistän HA:n ja Nilanin langattomasti HA:n näkökulmasta.

            Jos HA laitteesi on suoraan piuhalla kiinni Nilanissa, niin toki repon modbus tcp voi muuttaa modbus rtu-moodiin ja ajaa ilman mbusd:tä. Mutta mbusd siis ratkaisee etäyhteyden ongelman mikä ainakin minulla on ja en esp8266 sun muita halunnut ruveta tilailemaan kun openhab jäljiltä oli vanha raspi + usb-rs-485 jo valmiina. On muitakin ratkaisuja mutta tämä tuntui olevan least effort.

          2. Nyt kun tuota lukee tarkemmin, niin onhan tuo tuossa tilanteessa ihan näppärä. Kiitos selvennyksestä.

        2. Ehdin jo vähän itsekin tästä innostua, kunnes tuo totuus CTS 600:n päivittämisestä ensin CTS 602:een laski innostusta. Aika kova investointi kuitenkin, kun ainakin tuon Nilanin hinnaston mukaan on aika arvokas päivitys.

          Itse olen ajatellut yrittää nyt talvella pörssisähkön kanssa pelata niin, että Nilanista laitan siirtymän avulla menoveden lämpötilan ylöspäin kuumemmaksi kuin on tarve ja lämmitellään vain alakerran betonilattiaa.

          Fissio.fi ja Raspberry Pi sitten katkaisemaan sähköt lämmityskattilalta kalliiden tuntien aikana. Ja muutenkin Fissio sitten ohjaamaan lämmitystä niin, että lämpiminä päivinä sinne lattiaan ei tarvitse kokoajan puskea sitä kuumempaa vettä vaan välillä voidaan pitää pitkiäkin taukoja ja kohdistaa se lämmitys muutenkin aina halvimmille tunneille.

          Sähkön katkaisu kattilalta on helppo, kun on jo kytkentä jossa kontaktori kytkee lämmityksen pois kun sähkösauna menee päälle. Tähän samaan väliin vain vaihtorele jolla voidaan halutessa se kytkeä pois ilman saunan päälle laittoa.

          Ei tämä mikään ideaali tilanne ole, kun ei ole varsinaista lämminvesi puskuria tuossa vaan pitää sitä lämpöä koettaa varata sinne lattiaan öisin/halpointa tunteina ja sitten antaa muina aikoina jäähtyä.

          Tuohon lämminvesivaraajaan joku olikin laittanut vähän vastaavan releohjauksen siihen apuvastukseen. Eli sillä voisi taas vastaavasti pakottaa se vastus päälle esim. yöaikaan ja näin lämmittää se käyttövesi normaalia lämpimämmäksi. Näin ei tarvitsisi sitten päivällä lämmitellä välttämättä vettä ollenkaan ja kaikki PILP:n lämmitysenergia menee tuloilman lämmittämiseen.

          Mutta maksaahan se sähkövastuksen käyttö öisinkin joten sekin hyöty pitää tarkkaan miettiä 🙂

          1. Innostuin itsekin tutkimaan asiaa hieman tarkemmin, vaikka vielä ei pörssisopimusta olekaan. Home Assistantissa on jo Nordpool -integraatio asennettuna ja halvimpien tuntien perusteella tehtävä automaatio viritteillä. Kirjoitellaan tästäkin kunhan keritään.

            Ja kannattaa kysyä CTS 602:sta tarjous Nilanilta. Uskoisin että listahintoihin ei tarvitse tyytyä.

  2. Aloittelijana olisin kysynyt mihin nämä HA:ssa tämä koodi kirjoitetaan ? Configuration.yaml ?

    1. Tämän jutun kirjoittamisen aikaan konfigurointi Home Assistantin käyttölliittymässä oli vielä hitusen lapsenkengissä, joten nämäkin esimerkit oli ajateltu kirjoitettavan suoraan configuration.yaml:iin. Nykyisellään ison osan sensoreista, automaatioista jne. pystyy muokkaamaan suoraan Home Assistantin käyttöliittymän kautta. Tästä huolimatta omasta mielestäni on edelleen mielekkäämpää esittää esimerkit jutuissa Yaml -koodina kuin käyttöliittymän ruutukaappauksina.

  3. Itsekkin olen saanut nyt päiviteltyä nilain SW:n uudempaan niin alkoi modbus pelittään.
    Tästä sinun loistavasta postauksesta poiminut muutamia osia mutta vielä jää hämäränpeittoon että miten tuo takkakytkin ja tuuletus on toteutettu? Onko sinulla RPI kiinni Nilanin takkakytkin pinneissä vai komennatko jotenkin tuon UserFunc ja User2Func:n aktiiviseksi modbussin yli?

    1. Takkakytkin- ja tuuletustoimintoa ohjaan
      ESPHomella ja erillisellä esp32 -lankulla, jossa on releet kytkettynä Nilanin pinneihin. Onnistuu toki erillisillä releilläkin. En siis ole sotkenut Modbusia noihin.

  4. Hei, tilasin juuri Modbus boksin etäohjausta ja muutakin säätämistä varten ja pitäisi lähipäivinä laittaa se paikoilleen. Boksin mukana ei tullut mitään ohjetta. Ilmeisesti pumppu liitetään verkkokaapelilla boksiin ja boksi sitten verkkoon toisella kaapelilla. Mutta mihin tuo modbus piuha liitetään tuossa lämpöpunmussa? Pumpun päällä on rasia, johon tulee ilmeisesti laitteen kyljessä olevan ohjauspaneelin johto. Mutta siinä ei ole ylimääräisiä liittimiä, kuin ainoastaan usb liitin vieressä. Ja selkeää ohjeistusta tuntuu olevan hankalahko löytää. Sen verran olen googlaillut, että ei kuitenkaan pitäisi olla kovin ihmeellinen homma. Kokemusta on mm. kaikenlaisten tietokoneiden korjailusta ym. elektroniikkaväkertämisestä jonkinverran.

    1. Nilanin ohjauspaneelissa kytkentä tehdään samaan liitinriviin mihin on seinäpaneelikin kytketty. Kolme johdinta A1, B1 ja maa kytketään Modbus-boksin vastaaviin liittimiin.

    2. Itsellä oli melkoisestikkin ongelmia tuon modbussin kanssa. Ratkaisuna voin kertoa että SW update 2.38 versioon auttoi ja sitten alko myös modbus pelaamaan. Tuos SW versio näytti olevan myös etäohjaus boxilla vaatimus. Päivitys paketin ja ohjeet sain Nilanilta ja päivitys tapahtuu piirilevyllä olevan USB liitännän kautta.

      1. Modbus asennettu ja firmis tuli päivitettyä mutta en saa kännystä ohjattua iv konetta millään tavalla, toisen välilehden näyttämä jossa pitäisi olla sensoritiedot yms mittaus asiat ei näytä kuin ohjelma version . Olisko Ristolla joku kikka takataskussa mitä ja mistä pitäisi tehdä ?

        1. Ei vastausta kysymykseen, vaan muutama lisäkysymys:

        2. Tuoko tuo uusi firmis jotakin uusia ominaisuuksia laitteeseen?
        3. Onko tietoa toimiiko tuo Nilanin etäohjausboksi yhdessä RS485 -tikun kanssa? Käsittääkseni Modbus-väylässä saa olla vain yksi master (tikku) ja useampi slave (Nilan)
          1. Ei mielestäni muuttunut mikään vaikka noita valikoita selailin läpi.

          2. Joo en kyllä minäkään mitään uusia ominaisuuksia huomannut. Oma modbus to mqtt on vielä työn alla niin en kaikkia asetuksia ole räplännyt mutta ainakin nopeuden vaihto onnistuu ja sensori tiedot tulee ulos.

        4. Jaa-a itsellä on käytössä tollanen RS485->USB tikku enkä suoraan osaa sanoa Nilanin etä ohjaus boksista. Itse taisin resetoida asetukset tuon SW päivityksen jälkeen kun se vaati myös valmistaja valikosta oikean laitteen uudelleen valinnan. En nyt sitten olen ihan varma oliko se tämä reset joka laittoi modbusin toimivaan vai tuo päivitys. Pävityksen älysin kysyä kun katsoin tuon uuden lisälaitteen tarvivan tuon version että toimii ja näytti tulevan samaan modbus väylään.

          1. Hei Risto,

            Millaisia modbus -ongelmia sinulla oli ennen Nilanin softapäivitystä? Eikö se toiminut lainkaan, vai toimiko jotenkin vajavaisesti?

            Minä olen opettelemassa asiaa. Löysin tällaisen paketin,

            https://github.com/StefanUG/nilan-hass-modbus

            jonka avulla saan luettua tietoja Nilanista. Kirjoittaminen rekistereihin kuitenkin takkuaa. Joko se ei onnistu lainkaan, tai sitten arvo palautuu hetken päästä takaisin siihen, mikä se oli.

          2. Kirjoittaminen Nilanin rekistereihin toimii itsellä moitteettomasti. Esimerkiksi HA:n käyttöliittymässä valittu lämpötila saadaan siirtymään Nilaniin alla olevalla service-kutsulla:

            service: modbus.write_register
            data_template:
            hub: nilan
            unit: 30
            address: 1003
            value: "[{{ states('input_number.nilan_ilmanvaihtopyynto') }}]"

          3. Itsellä ei toiminut yhteys ollenkaan ilmsn päivitystä.

Vastaa

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