Luukku
Vakionaama
Laitetaan nyt tänne tämä omakin kötöstys.
Tämän laskennan mukaan säädetään tarveohjausta.
ottaa huomioon sisälämpötilan, 0,5h ja 1h derivaatat, ulkolämpötilan.
Seuraava steppi säädölle sallitaan vasta 15min kuluttua tai heti, jos on riittävän suuri eli vähintään 10%.
Kylmäkerroin on. Tämän lisäksi pitää olla automaatioita muutama ja pari input.numberia.
Tarkkaillaan toimintaa ja parannellaan.
v.01.01.2026.1
Sulatussensori:
Tällä siis ohjataan Daikinin ilpin tarveohjausta Faikout lisäosan kautta. Template sensori laskee tarveohjauksen tarpeen huomioiden erillisen sensorin laskeman kertoimen ( T-out, T-in, tuuli ja sen suunta) sekä omassa sensorissaan olevien kertoimien perusteella tarveohjauksen määrän. Sensori sisältää myös hystereesit ettei säätö pumppaa kokoajan. Uusimpaan versioon tuli myös sulatuksen jälkeinen rajoitus tarveohjaukselle ettei pumppu ryntää, kun tuo Faikoutin DC100% näköjään antaa tosiaan täyden kompressoritehon tarvittaessa. Ryntäyksen jälkeen nämä Daikinit heittää herkästi katkolle.
Periaatteena tehdä "yksinkertainen" muutaman sensorin systeemi, mutta noita apusensoreita vaan tuntuu tulevan lisää. Pääohjaus kuitenkin yhdellä sensorilla.
Ennuste 1h sensori eli ennustaa mikä lämpötila on 1h päästä.
Tämän laskennan mukaan säädetään tarveohjausta.
ottaa huomioon sisälämpötilan, 0,5h ja 1h derivaatat, ulkolämpötilan.
Seuraava steppi säädölle sallitaan vasta 15min kuluttua tai heti, jos on riittävän suuri eli vähintään 10%.
Kylmäkerroin on. Tämän lisäksi pitää olla automaatioita muutama ja pari input.numberia.
Tarkkaillaan toimintaa ja parannellaan.
v.01.01.2026.1
Koodi:
v.01.01.2026.1
{% set T = states('sensor.sisälämpötila') | float(0) %}
{% set Tset = states('input_number.tavoitelampo') | float(0) %}
{% set d1 = states('sensor.1h_derivaatta') | float(0) %}
{% set d05 = states('sensor.0,5h_derivaatta') | float(0) %}
{% set prev = states('input_number.demand_locked') | float(0) %}
{% set T_out = states('sensor.ulkolampotila') | float(0) %}
{# --- 0) Kylmäkerroin ulkolämpötilasta --- #}
{% set gain_base =
2.0 if T_out < -5 else
1.5 if T_out < 2 else
1.0 %}
{# --- 0b) Ennakointikerroin lisätekijäksi --- #}
{% set preheat = states('sensor.lammityksen_ennakointi_kerroin') | float(1.0) %}
{% set preheat_gain = [1.9, [0.3, preheat] | max] | min %}
{# --- Lopullinen gain --- #}
{% set gain = gain_base * preheat_gain %}
{# --- 1) Perustarve sisälämpötilavirheestä --- #}
{% set e = T - Tset %}
{% if e | abs < 0.05 %}
{% set e = 0 %}
{% endif %}
{% set N_base = 50 + (-e * 50 * gain) %}
{% set N_base = [100, [40, N_base] | max] | min %}
{# --- 2) Ennusteen mukainen bias --- #}
{% set T_future = states('sensor.lampotila_ennuste_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 ohjaus --- #}
{% set N_trend = N_base + offset_1h %}
{% set N_trend = [100, [40, N_trend] | max] | min %}
{# --- 3) Sulatuksen jälkeinen rajoitus kytkimellä --- #}
{% if is_state('input_boolean.sulatusrajoitus', 'on') %}
{# Sulatuksen aikana: demand lukitaan 95 %:iin #}
{% set N_scaled = 95 %}
{% else %}
{# Normaalitilanne: skaalaus + clamp #}
{% set scale = 1.20 %}
{% set N_scaled = N_trend * scale %}
{% set N_scaled = [100, [40, N_scaled] | max] | min %}
{% endif %}
{# --- 4) Deadband + aikahystereesi (10 min) --- #}
{% set diff = (N_scaled - prev) | abs %}
{% set age = (now() - states.input_number.demand_locked.last_changed).total_seconds() %}
{# --- Eri rajat ylös- ja alaspäin --- #}
{% if N_scaled > prev %}
{% set threshold = 5 %}
{% else %}
{% set threshold = 10 %}
{% endif %}
{% if diff >= threshold or age > 600 %}
{{ N_scaled | round(0) | int }}
{% else %}
{{ prev | round(0) | int }}
{% endif %}
Sulatussensori:
Koodi:
- name: "Sulatussensori"
unique_id: sulatussensori_liquid
state: >
{% set liquid = states('sensor.faikout_liquid')|float(99) %}
{{ liquid < 0 }}
Periaatteena tehdä "yksinkertainen" muutaman sensorin systeemi, mutta noita apusensoreita vaan tuntuu tulevan lisää. Pääohjaus kuitenkin yhdellä sensorilla.
Ennuste 1h sensori eli ennustaa mikä lämpötila on 1h päästä.
Koodi:
{% set T_in = states('sensor.sisälämpö') | float %}
{% set dT_in = states('sensor.sisälämpö_derivaatta') | float %}
{% set dT_out = states('sensor.ulkolampo_derivaatta') | float %}
{# Suodatetaan äkilliset piikit: rajataan derivaatan vaikutus -0.5…0.5 °C/h #}
{% set dT_in_filtered = [dT_in, 0.5] | min %}
{% set dT_in_filtered = [dT_in_filtered, -0.5] | max %}
{% set dT_out_filtered = [dT_out, 1] | min %}
{% set dT_out_filtered = [dT_out_filtered, -1] | max %}
{# Painokertoimet: sisälämpötilan muutos tärkeämpi kuin ulko #}
{% set k_in = 0.9 %}
{% set k_out = 0.1 %}
{# Ennuste 1h eteenpäin #}
{{ (T_in + k_in * dT_in_filtered + k_out * dT_out_filtered) | round(2) }}
Viimeksi muokattu: