Ennustava jäähdytys sääennusteen ja tekoälyn avulla
Aikaisemmassa kirjoituksessa selvitin laskennallisesti geneettisen algoritmin avulla optimaalisempia tapoja talon lämmittämiseksi ja jäähdyttämiseksi sekä sisälämpötilan vaihteluiden tasaamiseksi. Tällä kertaa tarkoitus on siirtää teoria käytäntöön.
Selvityksessä helpoimmin toteutettava vaihtoehto oli pitää lattialämmityksen ohjaus ennallaan Uponor Control System:n ohjaamana ja tehdä muutokset PILP:n ilmalämmityksen/-jäähdytyksen avulla. Vastaavaa menetelmää voi soveltaa hyvin siis myös tavallisen ilmalämpöpumpun ohjaamiseen.
Tuloksien tarkemmassa analyysissä tunnistettiin kuusi erilaista tilannetta, joissa PILP:n tilaa vaihdettiin. Neljä näistä olivat perussäädön mukaisia: jäähdytyksen tai lämmityksen käynnistys tai sammutus sisälämpötilan mukaan. Näiden lisäksi kaksi voitiin pohjata lämpötilaennustukseen: lämmityksen sammutus kuusi tuntia ennen kuin ulkolämpötila nousee tavoitelämpötilan tasolle ja jäähdytyksen aloitus neljä tuntia ennen kuin ulkolämpötila nousee tavoitelämpötilan tasolle.
Jäähdytyksen sammuttukselle tai lämmityksen käynnistykselle ei havaittu yhteyttä lämpötilaennustukseen, vaan ne tehtiin tarkastelujaksolla aina sisälämpötilan niin vaatiessa.
Jos PILP:n halutaan lämmittävän, asetetaan laitteen lämpötilapyyntö reilusti nykylämpötilaa lämpimämmäksi. Jos PILP:n halutaan jäähdyttävän, asetetaan lämpötilapyyntö reilusti nykylämpötilaa kylmemmäksi. Jos lämmitys tai jäähdytys halutaan pysäyttää ja siirtyä pelkkään ilmanvaihtoon, asetetaan lämpötilapyyntö samaksi kuin huonelämpötila.
Jotta lämpötilansäätö saadaan ennustavaksi, järjestelmän täytyy tietää lähituntien paikallissääennuste. Tätä varten asensin Githubista komponentin Home Assistantiin, joka hakee tiedot Ilmatieteenlaitoksen ennusteista. Tämän jälkeen esimerkiksi lämpötilaennuste neljän tunnin päästä saadaan selville queryllä:
{{states.weather.fmi.attributes.forecast.4.temperature}}
PILP:n lämmityksen ja jäähdytyksen säätöä varten Home Assitantiin tehtiin neljä eri automaatiota: jäähdytyksen käynnistys, jäähdytyksen sammutus, lämmityksen käynnistys ja lämmityksen sammutus. Kaikki automaatiot suoritetaan 15 minuutin välein. PILP:n oma yhden asteen hystereesi ohitetaan hieman tarkemmalla muokattavalla arvolla.
- alias: 'Jäähdytys päälle'
trigger:
platform: time_pattern
minutes: "/15"
condition:
condition: and
conditions:
- condition: or
conditions:
- condition: template
value_template: "{{ states('sensor.nilan_t15_temp')|float > states('input_number.nilan_adaptive_setpoint')|float + states('input_number.nilan_hystereesi')|float }}"
- condition: template
value_template: "{{ states.weather.fmi.attributes.forecast.4.temperature > states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: state
entity_id: sensor.nilan_compressor_state
state: '0'
action:
- service: input_number.set_value
data_template:
entity_id: input_number.nilan_lampotilapyynto
value: 15
Jäähdytyksen käynnistyksen ehtona on että sisälämpötila on suurempi kuin tavoitelämpötila + hystereesi tai että neljän tunnin päästä ulkolämpötila on ennusteen mukaan korkeampi kuin tavoitelämpötila. Lisäksi PILP:n kompressori ei saa olla päällä eli laite vain vaihtaa ilmaa. Tällöin PILP:n lämpötilapyyntö asetetaan 15 asteeseen, jolloin se alkaa jäähdyttää.
- alias: 'Jäähdytys pois'
trigger:
platform: time_pattern
minutes: "/15"
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.nilan_t15_temp')|float < states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: template
value_template: "{{ states.weather.fmi.attributes.forecast.4.temperature < states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: state
entity_id: sensor.nilan_compressor_state
state: '1'
- condition: or
conditions:
- condition: state
entity_id: sensor.nilan_state
state: '8'
- condition: state
entity_id: sensor.nilan_state
state: '11'
action:
- service: input_number.set_value
data_template:
entity_id: input_number.nilan_lampotilapyynto
value: "{{ states.sensor.nilan_t15_temp.state | float }}"
Jäähdytyksen sammutuksen ehtona on että huonelämpötila on pienempi kuin tavoitelämpötila ja että neljän tunnin päästä ulkolämpötilan ennuste on pienempi kuin tavoitelämpötila. Lisäksi PILP:n täytyy olla jäähdyttävässä tilassa. Tällöin PILP:n lämpötilapyyntö asetetaan samaksi kuin huonelämpötila.
- alias: 'Lämmitys päälle'
trigger:
platform: time_pattern
minutes: "/15"
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.nilan_t15_temp')|float < states('input_number.nilan_adaptive_setpoint')|float - states('input_number.nilan_hystereesi')|float }}"
- condition: template
value_template: "{{ states.weather.fmi.attributes.forecast.6.temperature < states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: state
entity_id: sensor.nilan_compressor_state
state: '0'
action:
- service: input_number.set_value
data_template:
entity_id: input_number.nilan_lampotilapyynto
value: 30
Lämmityksen käynnistyksen ehtona on että sisälämpötila on pienempi kuin tavoitelämpötila – hystereesi ja että kuuden tunnin päästä ulkolämpötila on ennusteen mukaan pienempi kuin tavoitelämpötila. Lisäksi PILP:n kompressori ei saa olla päällä eli laite vain vaihtaa ilmaa. Tällöin PILP:n lämpötilapyyntö asetetaan 30 asteeseen, jolloin se alkaa lämmittää.
- alias: 'Lämmitys pois'
trigger:
platform: time_pattern
minutes: "/15"
condition:
condition: and
conditions:
- condition: or
conditions:
- condition: template
value_template: "{{ states('sensor.nilan_t15_temp')|float > states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: template
value_template: "{{ states.weather.fmi.attributes.forecast.6.temperature > states('input_number.nilan_adaptive_setpoint')|float }}"
- condition: state
entity_id: sensor.nilan_compressor_state
state: '1'
- condition: or
conditions:
- condition: state
entity_id: sensor.nilan_state
state: '7'
- condition: state
entity_id: sensor.nilan_state
state: '9'
action:
- service: input_number.set_value
data_template:
entity_id: input_number.nilan_lampotilapyynto
value: "{{ states.sensor.nilan_t15_temp.state | float }}"
Lämmityksen sammutuksen ehtona on että huonelämpötila on suurempi kuin tavoitelämpötila tai että kuuden tunnin päästä ulkolämpötilan ennuste on suurempi kuin tavoitelämpötila. Lisäksi PILP:n täytyy olla lämmittävässä tilassa. Tällöin PILP:n lämpötilapyyntö asetetaan samaksi kuin huonelämpötila.
Ensimmäisten päivien kokemusten perusteella järjestelmä vaikuttaisi reagoivan lämpötilaennusteisiin odotetulla tavalla ja pitävän huonelämpötilan tasaisempana kuin aikaisemmin. Tarvittaessa tavoitelämpötilan, hystereesin suuruutta ja lämpötilaennusteiden etäisyyttä voidaan muuttaa tarpeen mukaan ja hienosäätää järjestelmää.
2 thoughts on “Ennustava jäähdytys sääennusteen ja tekoälyn avulla”
Olen harrastanut HA:n parissa nyt puoli vuotta tarkoituksenani parantaa asumisviihtyvyyttä ja
minimoida lämmityskustannukset. Löysin blokisi vasta tänään, kun olen saanut systeemini jo koekäyttöön.
Olisin säästynyt paljolta turhalta googlaamiselta jos olisin lukenut mielenkiintoiset tekstisi aikaisemmin!
Sanot artikkelissasi että lämmitystarve saadaan ulkolämpötilasta. Olen lisännyt tähän vielä kaksi suuretta:
taloon kohdistuvan auringon lämmitysenergian ja tuulen. Näiden merkitys riippuu tietysti asunnon sijainnista. Aurinko pääsee esteettä paistamaan talon etuseinään joka on suunilleen itä-länsi-suunnassa.
Tämä viimeisin lämmitysstrategiasi käyttää ilmatieteen laitoksen sääennustetta. Itse asiassa käytän varaavan lattialämmityksen ohjaukseen ainoastaan sääennustetta: lasken pari kertaa tunnissa keskiarvot laskentahetkestä 24 tuntia eteenpäin lämpötilalle ja tuulen nopeudelle. Auringon lämmitysteho on keskiarvo joka tunti lasketusta suureesta, joka ottaa huomioon auringon asennon suhteessa talon etuseinään ja ennustetun pilvisyysprosentin. Lasken näistä kolmesta suureesta efektiivisen ulkolämpötilen, jota auringon lämmitysteho nostaa ja tuulisuus laskee. Efektiivisesta lämpötilasta lasken tarvittavat
vuorokautiset lämmitystunnit. Ohjaan lattialämmityksen päälle siten että lämmitystunnit tulevat täyteen
yösähkön aikana.
Omakotitaloni lämmitysjärjestelmä on aika yksinkertainen: varaava sähkölämmitteinen lattialämmitys ja ilmalämpöpumppu. Lattialämmitys on hyvin ’hidasliikkeinen’ kuten toteat. Se huolehtii minulla peruslämmöstä. Lämpötila-anturin ohjaama ILP on ketterämpi ja lämmittää ellei vuorokauden ajasta riippuvan
lämpötilaikkunan sisällä ei pysytä. Kunhan tästä ilmat vielä kylmenevät nähdään kuinka systeemini toimii!
Etkö sinä ole havainnut auringon lämmityksen osuutta lämmityksen tarpeeseen?
Sitten vielä epätoivoinen kysymys HA:sta: miten pääsen eroon AM/PM aika-formaatista. Olen juuri päivittänyt versioon 0.116.2 jossa tämä pitkäkestoinen ongelma on kuulemma korjattu, mutta minä en sitä huomaa! Ajan HA:ta RPi:ssä.
Kiitos hyvistä kommenteista!
Auringolla ja tuulella on toki vaikutusta lämmitys-/jäähdytystarpeeseen. Samaan listaan voisi lisätä vielä vaikka ihmisistä ja sähkölaitteista tulevan lisälämmön. Itsellä PILP on ainakin toistaiseksi pystynyt reagoimaan esim. auringon aiheuttamaan lisäjäähdytystarpeeseen tarpeeksi tehokkaasti ja nopeasti. Toisaalta järjestelmää voisi kehittää huomioimaan nämäkin muuttujat jolloin se toimisi energiatehokkaammin.
Aika-formaatin suhteen itsellä ei ole tuota ongelmaa ollut. Uskoisin että HA valitsee oikean formaatin joko järjestelmän Localen tai HASS:n time_zone -määrittelyn perusteella.