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.
8 thoughts on “Tehomaksu ja talon hetkellisen maksimitehon automaattinen rajoittaminen”
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).
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.
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..
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” .
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.
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
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.
Kolme vuotta sitten käytin mbpoll -skriptiä, koska HA:n Modbus -rajapinta ei toiminut tähän tarkoitukseen. Sittemmin HA:n Modbus -rajapinta on päivittynyt ja homman voi hoitaa suoraan sillä. Oikeat painallukset (rekisterit) voi napata tästä vanhasta jutusta ja soveltaa niitä tässä uudessa jutussa viitattuun tapaan: https://hyotynen.iki.fi/kotiautomaatio/porssisahko-kulutuksen-optimointia-edullisimmille-tunneille/