Follow along with the video below to see how to install our site as a web app on your home screen.
Huomio: This feature may not be available in some browsers.
Minimiaskel 10 % molempiin suuntiin --- #}
{% set threshold = 10 %}
{# --- 20 % muutos sallitaan heti (alas tai ylös) --- #}
{% if diff >= 20 %}
{{ N_scaled | int }}
{# --- YLÖSPÄIN: sallitaan aina kun diff >= 10 --- #}
{% elif N_scaled > prev and diff >= threshold %}
{{ N_scaled | int }}
{# --- ALASPÄIN: sallitaan vain jos 600 s täynnä ja diff >= 10 --- #}
{% elif N_scaled < prev and age > 600 and diff >= threshold %}
{{ N_scaled | int }}
| Ulkolämpötila (°C) | HA:n tavoitelämpötila (°C) |
| +5 | 21,5 |
| -5 | 23,5 |
| -20 | 24,5 |
| -30 | 25,5 |
{% set T = states('sensor.ruuvitag_f777_temperature_filtered2') | float(0) %}
{% set Tset = states('input_number.ldc_daikin2_setpoint') | float(0) %}
{% set prev = states('input_number.ldc_daikin2_demand_locked') | float(0) %}
{% set T_out = states('sensor.outside_filtered_faikout_comfora') | float(0) %}
{# --- 0) Kylmäkerroin --- #}
{% set gain_base =
1.4 if T_out < -10 else
1.2 if T_out < -5 else
1.0 if T_out < 2 else
0.9 %}
{% set gain = gain_base %}
{# --- 1) Perustarve --- #}
{% set e = T - Tset %}
{% if e | abs < 0.05 %}
{% set e = 0 %}
{% endif %}
{% set N_base = 25 + (-e * 40 * gain) %}
{% set N_base = [100, [25, N_base] | max] | min %}
{# --- 2) Ennuste --- #}
{% set T_future = states('sensor.ldc_daikin2_temp_prediction_1h') | float(0) %}
{% set e_future = T_future - Tset %}
{% if e_future < -0.2 %}
{% set offset_1h = 5 %}
{% elif e_future > 0.2 %}
{% set offset_1h = -5 %}
{% else %}
{% set offset_1h = 0 %}
{% endif %}
{# --- 2b) Trendikorjattu --- #}
{% set N_trend = N_base + offset_1h %}
{% set N_trend = [100, [25, N_trend] | max] | min %}
{# --- 3) Sulatus --- #}
{% if is_state('input_select.ilp_sulattaa', 'sulatus käynnissä') %}
{% set N_scaled = 90 %}
{% else %}
{% set scale = 1.20 %}
{% set N_scaled = N_trend * scale %}
{% set N_scaled = [100, [30, N_scaled] | max] | min %}
{% endif %}
{# --- MUUTOS: 5 % tarkkuus vain alueelle 90 - 100 % --- #}
{% if N_scaled > 87.5 %}
{# Tämä sallii arvot 90, 95 ja 100 #}
{% set N_scaled = ((N_scaled / 5) | round(0) * 5) %}
{% set threshold = 5 %}
{% else %}
{# Alue 30 - 90 toimii 10 % jaolla #}
{% set N_scaled = ((N_scaled / 10) | round(0) * 10) %}
{% set threshold = 10 %}
{% endif %}
{# --- 4) Deadband + aikahystereesi --- #}
{% set diff = (N_scaled - prev) | abs %}
{% set age = (now() - states.input_number.ldc_daikin2_demand_locked.last_changed).total_seconds() %}
{% if diff >= 20 %}
{{ N_scaled | int }}
{% elif N_scaled > prev and diff >= threshold %}
{{ N_scaled | int }}
{% elif N_scaled < prev and age > 600 and diff >= threshold %}
{{ N_scaled | int }}
{% else %}
{{ prev | int }}
{% endif %}
No lisäsin omaan automaation tuon demand_lockedin päivityksen.Kun puukottelin tuota tekoälyn avustuksella, niin se huomautti että tuo demand_locked.last_changed attribuutti tarvitsee jonkin automaation päivittyäkseen. Eli periaatteessa se aikahystereesi steppihomma ei kai toimi muuten ? Ainakaan minulla siihen ei tule mitään aikaleimaa automaattisesti.
Tuota on helppo ohjata erillisellä automaatiolla, joka säätää tuota "input.number tavoite".Ehkä lisäisin tuohon ainoastaan tavoitelämpötilan eri ulkolämpötiloissa portaattomasti liukuen, kun ainakin tässä talossa on niin, että vetoisuuden, kylmän poistamiseksi kovemmalla pakkasella pitää olla jopa 2 astetta lämpimämpää sisällä, kuin plussakelillä.
Ylilämpöön on hyvä olla varmistus automaatio, että menee fan only tilaan. Itsellä puulämmitys loppuu, kun mennään lähelle nollaa niin silloin pumput hoitaa lämmityksen ja ne pysyy käynnissä pikkutehoilla.Lisäksi toki lisäisin ehdon, että tarvittaessa (pikkupakkaset tai plussakelit) siirrytään puhtaasti puhaltelemaan, leputtelemaan, eli lasketaan Daikinille saakka menevä pyynti niin alas, ettei kompressori käy. Muuten sitten varsinainen pyynti olisi toki aina maksimi, jotta ajetaan puhtaasti DC:llä varsinaisesti lämpötilansäätöä.
Joo pitää se olla. On se itselläkin, unohtui mainita. Hyvä, kun hokasit.Kun puukottelin tuota tekoälyn avustuksella, niin se huomautti että tuo demand_locked.last_changed attribuutti tarvitsee jonkin automaation päivittyäkseen. Eli periaatteessa se aikahystereesi steppihomma ei kai toimi muuten
Tuota on helppo ohjata erillisellä automaatiolla, joka säätää tuota "input.number tavoite".
Ylilämpöön on hyvä olla varmistus automaatio, että menee fan only tilaan. Itsellä puulämmitys loppuu, kun mennään lähelle nollaa niin silloin pumput hoitaa lämmityksen ja ne pysyy käynnissä pikkutehoilla.
Saman huomannut ja yllättävän paljon vaikuttaa, mutta niinhän jossain on sanottu, että ihminen vastaa 100W lämmitystehoa. Hyvä huomioida setponteissa varsinkin makuuhuoneessa.Tässä huomaa ihmisten vaikutuksen. Aamulla herätty ja poistuttu makuuhuoneesta, niin alkaa lämpö tippua.
25 tarvittiin ilmeisesti sen takia, että DC30 on mahdollinen. Ainakin tekojärki järkeili niin.Toi 25 saattaa rajoittaa liikaa. 35-40.
Tuon muuttaminen vaikuttaa peruslämmöntarpeeseen ja reagoi herkästi.
Tuo laahaus vähän alle setpontin on oikeastaan hyväkin, jos puilla lämmittää kaverina niin ei heitä niin pahasti ylilämmöille. Peruslämpö pumpuilla ja mukavuuslämpö puilla. Lauhemmilla keleillä sitten pumpuilla kaikki tai puilla miten haluaa.Vähän ehkä laahaa vielä alle setpointin. No vaikea sanoa pitkässä juoksussa. Vaimo toki meni laittamaan juuri takkaan puita.![]()
{% set T = states('sensor.sisalampotila') | float(0) %}
{% set Tset = states('input_number.tavoitelampotila') | float(0) %}
{% set T_out = states('sensor.ulkolampotila') | float(0) %}
{# --- 1) Ulkolämpötilaan perustuva kylmäkerroin --- #}
{% set cold_gain =
3.0 if T_out < -15 else
2.0 if T_out < -5 else
1.0 if T_out < 5 else
0.5 %}
{# --- 2) Sisälämpötilavirhe --- #}
{% set e = T - Tset %}
{# --- 3) Uunin lämmityksen tunnistus --- #}
{# Jos sisälämpötila on tavoitteen yläpuolella >0.3°C → uuni / muu kuorma #}
{% if e > 0.3 %}
{% set ilp_set = 16 %} {# minimi pyynti #}
{# --- 4) Alle tavoitteen → ILP pyyntiä ylös --- #}
{% elif e < -0.1 %}
{# Peruskorotus: mitä kylmempi ulkona, sitä enemmän nostetaan #}
{% set boost = (-e * cold_gain) %}
{% set ilp_set = 20 + boost %}
{# --- 5) Lähes tavoite → pidetään neutraalina --- #}
{% else %}
{% set ilp_set = 20 %}
{% endif %}
{# --- 6) Rajataan järkevä alue 16–26 °C --- #}
{% set ilp_set = [26, [16, ilp_set] | max] | min %}
{# --- 7) Pyöristys 0,5 °C portaisiin --- #}
{% set ilp_set = ((ilp_set * 2) | round(0) / 2) %}
{{ ilp_set }}
{# --- 0) Sensorit ja asetukset --- #}
{% set T = states('sensor.sisalampotila') | float(0) %}
{% set Tset = states('input_number.tavoitelampotila') | float(0) %}
{% set T_out = states('sensor.ulkolampotila') | float(0) %}
{% set calib = states('input_number.ilp_calibration') | float(0) %}
{# --- 1) Ulkolämpötilaan perustuva kylmäkerroin --- #}
{% set cold_gain =
3.0 if T_out < -15 else
2.0 if T_out < -5 else
1.0 if T_out < 5 else
0.5 %}
{# --- 2) Sisälämpötilavirhe --- #}
{% set e = T - Tset %}
{# --- 3) Uunin / sisäkuorman tunnistus --- #}
{% if e > 0.3 %}
{# Ylilämpö → ILP minimiin #}
{% set ilp_set = 16 %}
{# --- 4) Alle tavoitteen → ILP pyyntiä ylös --- #}
{% elif e < -0.1 %}
{# Boost riippuu virheestä ja ulkolämpötilasta #}
{% set boost = (-e) * cold_gain %}
{% set ilp_set = 20 + boost %}
{# --- 5) Lähes tavoite → neutraali pyynti #}
{% else %}
{% set ilp_set = 20 %}
{% endif %}
{# --- 6) Kalibrointi input_numberilla --- #}
{% set ilp_set = ilp_set + calib %}
{# --- 7) Rajat 16–26 °C --- #}
{% set ilp_set = [26, [16, ilp_set] | max] | min %}
{# --- 8) 0,5 °C portaisiin --- #}
{% set ilp_set = ((ilp_set * 2) | round(0) / 2) %}
{{ ilp_set }}
Tuntuu juu, että tuo @heebo1974 :n kone on kovin herkkä sille. Olis potentiaalinen testikohdeUpeaa, että Daikinin metkuja hienosäädetään yhteisössä eri tavoin
Liittyy Daikiniin yleisesti, mutta laitetaan tänne vaikka. Ihmettelin eilen Daikinin Cold Draft Preventionia ja sen mahdollista ohittamista ja keksin mahdollisesti suht helpon tavan yrittää sitä ohittaa.
Kylmäaineanturi on sisäyksikössä (Perfera) paikassa, joka ei suinkaan ole kuumin kohta. Kun anturin siirtäisi toiseen putkeen ja eristäisi sen kiinni putkeen, voisi saada pari-kolme astetta isompia lukemia, jotka ovat ymmärtääkseni merkityksellisiä, että onko cold draft prevention päällä vai ei.
Itse en kyllä ala takuunalaiseen laitteeseen tekemään modauksia. Faikout kuitenkin vähän eri juttu. Samoin sen ulkoanturin taitto lipan alle.Liittyy Daikiniin yleisesti, mutta laitetaan tänne vaikka. Ihmettelin eilen Daikinin Cold Draft Preventionia ja sen mahdollista ohittamista ja keksin mahdollisesti suht helpon tavan yrittää sitä ohittaa.
Kylmäaineanturi on sisäyksikössä (Perfera) paikassa, joka ei suinkaan ole kuumin kohta. Kun anturin siirtäisi toiseen putkeen ja eristäisi sen kiinni putkeen, voisi saada pari-kolme astetta isompia lukemia, jotka ovat ymmärtääkseni merkityksellisiä, että onko cold draft prevention päällä vai ei.
Ehkä analysoin hiukan. Alakerrassa tekee suurempia liikkeitä DC:n säädössä, yläkerta selvästi tasaisempi, näkyy myös lämpötilassa. Mennäänkö liian nopeasti 100 ja takaisin 30? Miltä se tuntuu sisällä lämpötilatuntemuksessa?Tämän päivän käppyröitä.
Katselin just pumpun käyttäytymistä sulatuksen jälkeen, kun DC pakotetaan 95%:in 10 min ajaksi niin kennon lämpötila nousee ihan hyvin sinne 35 asteeseen (koska ulkokenno puhdas) ja ottoteho pysyy 400-500W:ssa. Sisäyksikön anturi ehtii palautua sulatuksen aiheuttamasta järkytyksestä. Ei mitään tarvetta sille tehoryntäykselle mikä tulee Daikinin omalla ohjauksella ja pahimmassa tapauksessa lyödään katko päälle, kun termari näyttää liikaa. Kun 10 min jälkeen palaudutaan normaaliin DC ohjaukseen niin kyllä se vielä 100% pyysi hetkeksi. Ulkona -15.Täytyy muuten ihmetellä, ettei Daikinin oletettu insinörttiarmeija ole saanut aikaiseksi tämäntyyppisiä ohjausjärjestelmiä. Eli suomalaiset pumppaajanörtit näyttää saavan aikaiseksi paremmin toimivia ohjauksia kuin Daikinin lusmut. Kyllä olettaisi, että 2,5k:n pumpussa ei enää ole mitään virittelyn tarvetta!![]()
{# --- MUUTTUJIEN ALUSTUS --- #}
{# Haetaan sensorien arvot ja muunnetaan ne numeroiksi (float) #}
{% set T = states('sensor.ruuvitag_eac5_temperature_filtered2') | float(0) %}
{% set Tset = states('input_number.ldc_daikin1_setpoint') | float(0) %}
{% set prev = states('input_number.ldc_daikin1_demand_locked') | float(0) %}
{% set T_out = states('sensor.outside_filtered_faikout_stylish') | float(0) %}
{% set T_liq = states('sensor.faikout_stylish_liquid') | float(0) %}
{# --- 0) KYLMÄKERROIN (GAIN) --- #}
{# Mitä kylmempi ulkona on, sitä suurempi kerroin tarvitaan, jotta pumppu reagoi sisälämpötilan laskuun riittävän voimakkaasti. #}
{% set gain_base =
1.8 if T_out < -15 else
1.6 if T_out < -10 else
1.4 if T_out < -5 else
1.0 if T_out < 2 else
0.9 %}
{% set gain = gain_base %}
{# --- 1) PERUSTARVE (P-SÄÄDIN) --- #}
{# Lasketaan erotus (e) huonelämmön ja pyynnin välillä. #}
{% set e = T - Tset %}
{# Jos erotus on hyvin pieni (+/- 0.05 astetta), pidetään sitä nollana turhan heilunnan estämiseksi. #}
{% if e | abs < 0.05 %}
{% set e = 0 %}
{% endif %}
{# Kaava: Lähtötaso 25% + (vastakkainen erotus * 60 * voimakkuuskerroin) #}
{# Esim: Jos T on 0.5 astetta alle pyynnin, lisätään tehoa (0.5 * 60 * 1.4 = 42%) #}
{% set N_base = 25 + (-e * 60 * gain) %}
{# Rajataan tulos välille 25% - 100% #}
{% set N_base = [100, [25, N_base] | max] | min %}
{# --- 2) ENNUSTEKORJAUS --- #}
{# Katsotaan 1h ennustetta: jos kämppä on viilenemässä, lisätään tehoa jo etukäteen (offset). #}
{% set T_future = states('sensor.ldc_daikin1_temp_prediction_1h') | float(0) %}
{% set e_future = T_future - Tset %}
{% if e_future < -0.2 %}
{% set offset_1h = 5 %} {# Ennuste kylmä -> lisää 5% #}
{% elif e_future > 0.2 %}
{% set offset_1h = -5 %} {# Ennuste kuuma -> vähennä 5% #}
{% else %}
{% set offset_1h = 0 %}
{% endif %}
{# Lisätään ennustekorjaus perustarpeeseen ja rajataan taas 25-100% #}
{% set N_trend = N_base + offset_1h %}
{% set N_trend = [100, [25, N_trend] | max] | min %}
{# --- 3) SKAALAUS JA NESTEHERÄTYS (ANTI-HIBERNATION) --- #}
{# Jos sulatusrajoitus on päällä (kytkimestä), pakotetaan teho 90 prosenttiin. #}
{% if is_state('input_boolean.ldc_daikin1_sulatusrajoitus', 'on') %}
{% set N_scaled = 90 %}
{% else %}
{# Kerrotaan tarve 1.20 kertoimella, jotta saadaan hieman "puskuria" #}
{% set scale = 1.20 %}
{% set N_scaled = N_trend * scale %}
{# NESTEHERÄTYS: Estetään Stylishin nukahtaminen takan takia. #}
{# Jos neste (L) on 20-28.5C välillä, pakotetaan teho vähintään 50 prosenttiin. #}
{# Tämä varmistaa, että puhallus pysyy päällä (ei mennä Draft Prevention -tilaan). #}
{% if 20 < T_liq < 28.5 %}
{% set N_scaled = [N_scaled, 50] | max %}
{% endif %}
{# Rajataan lopullinen laskettu arvo välille 30% - 100% #}
{% set N_scaled = [100, [30, N_scaled] | max] | min %}
{% endif %}
{# --- 3b) PORTAISTUS / PYÖRISTYKSET --- #}
{# Stylish ymmärtää parhaiten tasalukuja. Käytetään tarkempaa 5% jakoa vain yläpäässä. #}
{% if N_scaled > 87.5 %}
{# Alue 90, 95, 100 (5% jaotus) #}
{% set N_scaled_rounded = ((N_scaled / 5) | round(0) * 5) %}
{% set threshold = 5 %}
{% else %}
{# Alue 30, 40, 50... (10% jaotus) #}
{% set N_scaled_rounded = ((N_scaled / 10) | round(0) * 10) %}
{% set threshold = 10 %}
{% endif %}
{% set N_final = N_scaled_rounded %}
{# --- 4) DEADBAND JA AIKAVIIVE (HYSTEREESI) --- #}
{# Estetään pumpun tehon jatkuva "sahaaminen" edestakaisin. #}
{% set diff = (N_final - prev) | abs %}
{# Lasketaan kuinka kauan (sekunteina) edellisestä muutoksesta on kulunut. #}
{% set age = (now() - states.input_number.ldc_daikin1_demand_locked.last_changed).total_seconds() %}
{# MUUTOSSÄÄNNÖT: #}
{# 1. Jos muutos on suuri (>= 20%), toteutetaan se heti. #}
{% if diff >= 20 %}
{{ N_final | int }}
{# 2. Jos tarve nousee, toteutetaan se jos kynnys (5% tai 10%) ylittyy. #}
{% elif N_final > prev and diff >= threshold %}
{{ N_final | int }}
{# 3. Jos tarve laskee, odotetaan 10 minuuttia (600s) ennen kuin vähennetään tehoa. #}
{% elif N_final < prev and age > 600 and diff >= threshold %}
{{ N_final | int }}
{# 4. Muussa tapauksessa pidetään edellinen tehoarvo ennallaan. #}
{% else %}
{{ prev | int }}
{% endif %}
Mitä käytännössä tarkoitat tällä?Faikout ottaa 30-100 välillä vastaan minkä tasaluvun tahansa, jos tuollaiselle on tarvetta, ottaa siis vaikka 48 vaikka näyttää 45 tai 50.
Paremmalta näyttää DC.
Mietin tätä samaa.. Oma veikkaukseni on se, että vaikka Faikout ottaisi sisään arvoja yhden askelin, silti se pyöristää ne viiden väleille.Mitä käytännössä tarkoitat tällä?
Eli voit käskyttää Faikoutille vaikka 43 niin se käyttää sitä vaikka sen oma säätö näyttää 40 tai 45. Tämä on ihan Faikoutin kehittäjän antama tieto.Mitä käytännössä tarkoitat tällä?
Ei pyöristä, mutta tuo sensori pyöristää mikä meillä on käytössä. Sahausta se aiheuttaa jos 1% pykälillä ohjaa, mutta hyvä tietää, että mahdollisuus on, jos jossain tilanteessa tarvii tuota ominaisuutta.Mietin tätä samaa.. Oma veikkaukseni on se, että vaikka Faikout ottaisi sisään arvoja yhden askelin, silti se pyöristää ne viiden väleille.
Tämähän saattaa olla läpimurtava tieto!! Miettikää mahdollisuuksia yläpäässä. Esim. DC95-100 yhden pykälän välein.Eli voit käskyttää Faikoutille vaikka 43 niin se käyttää sitä vaikka sen oma säätö näyttää 40 tai 45. Tämä on ihan Faikoutin kehittäjän antama tieto.
Ei pyöristä, mutta tuo sensori pyöristää mikä meillä on käytössä. Sahausta se aiheuttaa jos 1% pykälillä ohjaa, mutta hyvä tietää, että mahdollisuus on, jos jossain tilanteessa tarvii tuota ominaisuutta.