Tehomaksu ja talon hetkellisen maksimitehon automaattinen rajoittaminen

Tehomaksu ja talon hetkellisen maksimitehon automaattinen rajoittaminen

Vuoden 2019 alusta alkaen Lahti Energia alkoi periä sähköverkkonsa alueella olevilta asiakkailta ns. tehomaksua: ”Tehomaksun suuruus määräytyy edellisen 12 kuukauden suurimman kulutetun tuntitehon mukaan. Tuntiteho tarkoittaa asiakkaan yhden tunnin aikana kuluttamaa energiamäärää.” Tehomaksun suuruus on 77 snt/kW kuukaudessa. Samanaikaisesti Lahti Energia pienentää sähkönsiirtomaksuaan.

Sähkönkulutuspiikkien madaltaminen pienentää siis tehomaksun suuruutta. Suurimmat yksittäiset sähkön kuluttajat talossani ovat keskuslämmitys, sauna ja ruoan laitto. Keskuslämmityksen hoitaa Nilan EC9 poistoilmalämpöpumppu, joka lämmittää kiertoveden kolmen 3kW sähkövastuksen avulla. Laite käyttää sähkövastuksia portaittain lämmitystarpeen mukaan. 9kW maksimiteho on käytössä vain kovimmilla pakkasilla.

Helpoin keino maksimitehon pienentämiseksi on poistoilmalämpöpumpun lämmitystehon pienentäminen. Laitteen kytkentäkaavion mukaan kolmannen lämmitysvastuksen voi jättää kytkemättä, jolloin laitteen lämmitysteho on maksimissaan 6kW, mikä sekin riittää lämmitykseen enemmän kuin hyvin. Kolmas lämmitysvastus saadaan pois käytöstä yksinkertaisesti poistamalla K9-johtimen kytkentä CTS602 -ohjaimen relekortilta.

Keskuslämmityksen loppua 6kW tehoa voidaan lisäksi kytkeä pois tarpeen mukaan. Lattialämmitys varaa lämpöä betonilaattaan, joten lämmityksen hetkellinen sammutus esimerkiksi saunomisen tai ruoanlaiton ajaksi ei heikennä asumismukavuutta. Tämä saadaan automatiosoitua aikaisemmin Home Assistantiin lisätyn sähkönkulutuksen reaaliaikaisen seurannan ja Nilan EC9:n Modbus -väylän avulla.

Käytännössä Home Assistant saadaan katkaisemaan lattialämmitys kun hetkellinen kulutus nousee säädettävän kW -rajan yli ja käynnistämään sen taas kun hetkellinen kulutus laskee toisen säädettävän rajan alle. Valitettavasti keskuslämmityksen kytkeminen ei onnistu suoraan yksittäistä Modbus-rekisteriä muokkaamalla. Rajoituksen voi kuitenkin kiertää holding-rekisteri 2000:n avulla. Kyseisen rekisterin avulla CTS602:lle voidaan syöttää näppäimistön painalluksia ja sitä kautta hallita lattialämmityksen kytkentää keskuslämmitys-valikossa. packages/sahko.yaml -tiedostoon lisätään seuraavat rivit:

input_select:
  tehorajoitus:
    name: Tehorajoitus
    options:
      - Automaattinen
      - Manuaalinen
    initial: Manuaalinen
    icon: mdi:settings

input_number:
  tehorajoituksen_ylaraja:
    name: Tehorajoituksen yläraja
    initial: 8500
    min: 100
    max: 12000
    step: 100

  tehorajoituksen_alaraja:
    name: Tehorajoituksen alaraja
    initial: 2200
    min: 100
    max: 12000
    step: 100

input_boolean:
  lattialammitys:
    initial: on

shell_command:
  lattialammitys_paalle: '/home/homeassistant/.homeassistant/custom_components/nilan/lammitys_paalle &'
  lattialammitys_pois: '/home/homeassistant/.homeassistant/custom_components/nilan/lammitys_pois &'

automation:
  - alias: "Lattialämmitys pois raja ylitettäessä"
    trigger:
      platform: template
      value_template: "{% if (states.sensor.watt.state|float)>(states.input_number.tehorajoituksen_ylaraja.state|float)%}true{% endif %}"
    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: input_select.tehorajoitus
          state: 'Automaattinen'
    action:
      - service: automation.turn_on
        entity_id: automation.lattialammitys_paalle_raja_alitettaessa
      - service: automation.turn_off
        entity_id: automation.lattialammitys_pois_raja_ylitettaessa
      - service: script.lattialammitys_pois

  - alias: "Lattialämmitys päälle raja alitettaessa"
    trigger:
      platform: template
      value_template: "{% if (states.sensor.watt.state|float)<(states.input_number.tehorajoituksen_alaraja.state|float)%}true{% endif %}"
    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: input_select.tehorajoitus
          state: 'Automaattinen'
    action:
      - service: automation.turn_off
        entity_id: automation.lattialammitys_paalle_raja_alitettaessa
      - service: automation.turn_on
        entity_id: automation.lattialammitys_pois_raja_ylitettaessa
      - service: script.lattialammitys_paalle

script:
  lattialammitys_paalle:
    sequence:
      - service: script.turn_off
        data:
           entity_id: script.lattialammitys_paalle
      - service: shell_command.lattialammitys_paalle
      - service: input_boolean.turn_on
        data:
          entity_id: input_boolean.lattialammitys

  lattialammitys_pois:
    sequence:
      - service: script.turn_off
        data:
           entity_id: script.lattialammitys_pois
      - service: shell_command.lattialammitys_pois
      - service: input_boolean.turn_off
        data:
          entity_id: input_boolean.lattialammitys

Lattialämmityksen kytkeminen tehdään automaatioissa erillisten skriptien avulla, joissa käytetään mbpoll -komentorivikäskyjä. Tämä siitä syystä että Home Assistantin oma Modbus -rajapinta ei anna syöttää näppäinpainalluksia holding-rekisteri 2000:n kautta riittävän nopeasti. (Huom. sittemmin Home Assistantin Modbus -rajapinnan päivityttyä, olen siirtynyt pois käyttämästä mbpoll -skriptiä). Esimerkiksi lämmitys saadaan kytkettyä pois alla olevan skriptin avulla.

#!/bin/bash

#0x01 : ESCAPE
#0x02 : UP
#0x04 : DOWN
#0x08 : ENTER
#0x10 : OFF
#0x20 : ON
# Lämmitys pois: 5 x alas, enter, enter, alas, enter, esc, esc

mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 8
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 8
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 4
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 8
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 1
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 1
sleep 0.2
mbpoll /dev/ttyUSB0 -1 -0 -t 4:int -r 2000 -a 30 0

Skriptissä olevat sleep -komennot varmistavat ettei väylää kuormiteta liian nopeasti. Joka toinen mbpoll -komento kirjoittaa rekisteriin nollan, joka vastaa näppäimen nostamista ylös.

Tehorajoitus
Tehorajoitus

8 thoughts on “Tehomaksu ja talon hetkellisen maksimitehon automaattinen rajoittaminen

  1. Erittäin mielenkiintoista luettavaa olet kirjoitellut kotiautomaatioon liittyen. Tuli vuodenvaihteessa ensimmäistä kertaa vastaan ja sen jälkeen olenkin ajoittain seuraillut päivityksiä. Itsekin olen kyhännyt oman Nilanin Raspberryyn, jossa pyörii Openhab 2.

    Kun olet aika syvälle perehtynyt näihin asioihin, niin olisinkin kysäissyt erästä Nilanin ohjaukseen liittyvää asiaa. Eli olen siis käyttänyt netistä löytyvää valmista filupakettia Nilanin ohjauksessa, jota olen muokannut omien mieltymysten mukaan. Nyt olen huomannut, että Nilanin tarjoamassa modbus-ohjeessa/manuaalissa ei ole kaikkia modbus-väylän toimintoja esitetty? Esimerkiksi KOMP MAX T12 puuttuu listalta. Lisäksi huoltovalikosta säädettäviä parametreja en ole löytänyt listalta. Tarvitsisin näitä lähinnä sellaiseen tarkoitukseen, että tulo- ja/tai poistopuhaltimen asetuksia muutettaisiin asentamani vaipan yli mittaavan paine-erolähettimen mittauksen perusteella (saataisiin tällä tavoin pidettyä paine-ero suht vakiona erikoistilanteissa).

    1. Kiitos kommenteistasi! Olet tullut samaan johtopäätökseen kuin minä. Nilan ei valitettavasti ole avannut kaikkia laitteen parametreja Modbus -väylän käyttöön. Kysyin asiaa myös Nilan Suomen asiakaspalvelusta ja varmistin vielä pääkallopaikalta Tanskasta että asia on niin. Skannasin lisäksi kaikki rekisterit 0…9999 siinä toivossa että tiedot olisi vain jätetty ohjeesta pois, mutta ei auttanut.

      Itse olisin tarvinnut lattialämmityksen ohjaukseen soveltuvaa rekisteriä. Jouduin toteuttamaan asian yllä kuvatulla tavalla Holding -rekisteri 2000:n (näppäimistö) avulla. Ei kovin elegantti ratkaisu mutta se on toiminut.

      Tietojen lukemiseen voisi koettaa yhdessä näppäinpainallusten kanssa käyttää Input-rekistereitä 2002…2011., joista pitäisi saada näytöllä näkyvät tiedot ulos. Mutta onhan tuo kieltämättä aika hankala tapa.

      1. Tätä vastausta vähän pelkäsinkin, voi harmi.. Olen ilmeisesti koko ajan ymmärtänyt tämän ohjainkortin ja ohjainpaneelin ”hierarkian” väärin. Luulin siis, että varsinainen sovellus pyörii Nilanin sisällä tällä ohjainkortilla (joka olisi master). Onko kuitenkin niin, että itse koneen sisällä oleva kortti on slave ja ohjauspaneeli master. Ja että paneelissa olisi se varsinainen laitetta ohjaava äly? Kai se näin on oltava, muutenhan nuo aiemmassa mainitsemani asiat olisi luettavissa tuolta väylästä?

        Sähkö- ja instrumentointisuunnittelu on työalaani, siitä syystä nämä hölmöt pähkäilyt ja kysymykset sovelluspuoleen liittyen..

        1. Ei ole itselläkään täyttä varmuutta asiasta, mutta useiden keskustelupalstojen perusteella uskon että ohjainkortti on laitteen master ja käyttöpaneeli vain yksinkertainen liityntä siihen. Käyttöpaneeli ei ehkä kuitenkaan juttele ohjainkortin kanssa Modbus -protokollan avulla, mikä voisi selittää ”puuttuvat rekisterit” .

          1. Näinhän se taitaakin olla.
            Nilanin modbus-manuaalissa on Setup-taulukossa maininta:
            ”Device type: CTS 602 is a Modbus slave”
            Tarkoittaako tämä sitten yleisellä tasolla, että modbus-väylään liitettäessä laite toimii orjana? Itsellä vielä hämärässä sekin, mitä CTS 602 käsittää (tämän perusteella oletan että ohjainkortin sekä paneelin). Muutenki on oma osaaminen väylien kanssa melko vähäistä.

            Joskus törmäsin aiheeseen, jossa joku oli tutkinut vanhemman CTS600-sarjan laitteen ohjainkortin ja paneelin välistä yhteyttä. Taisi vaan jäädä sille tutkiskelun tasolle.. Olisiko tässäkin sitten osa tuosta keskustelusta toteutettu samaan tapaan.

  2. Menee itselläkin jo puurot ja vellit sekaisin 🙂 Korjataan vielä sen verran että CTS602 on toki PILP:n ”master” ja äly, mutta Modbus -väylässä se toimii slavena ja RPi on väylän master.

    Oma PILP on vanhempaa mallia, joka ei Modbusia ennen CTS600:n päivittämistä CTS602:ksi jutellut. Käyttöpaneeli on alkuperäinen, joten kommunikaatio käyttöpaneelin ja CTS602:n kanssa lienee toteutettu samoin kuin ennenkin

  3. Terve! Erittäin hienoa työtä jo vuonna 2019. 3 vuotta myöhemmin tämä mbpoll tuntuu Home Assistantin kanssa huomattavan ajankohtaiselta, koska tuon Nilanin keskuslämmityksen ohjattavuus suoraan modbus-rekisteihin ei tunnu olevan mitenkään mahdollista.

    Osaisitko vielä näin muutaman vuoden jälkeen tarkemmin avata miten nuo mbpoll-komennot tulisi syöttää 2022 vuoden HA:ssa? Tuo ”packages/sahko.yaml” lisääminen jäi vähän auki: Pitäisikö sellainen tehdä täysin nollasta vai onko se tullut aikanaan esim. nordpool-integraation kautta?

    Pahoittelut, että kysymykset ovat vähän yksinkertaisia, mutta luulen, että tästä tiedosta olisi monelle apuja.

Vastaa

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