Blog - Home Assistant 18 pic 1920x1080 px
|

Home Assistant seriál s Jakubem: Díl 18: Danfoss Ally – nová automatizace a řízení teploty

Úvod

V loňském roce jsme si ve čtvrtém díle ukazovali a nastavovali termostatickou hlavici Danfoss Ally a teplotní senzor Xiaomi. Jenže během celé minulé topné sezóny se ukázalo, že papírově „chytrá“ hlavice v praxi umí být spíš zdrojem frustrace než pohodlí.

  • přetápěla
  • nedotápěla
  • odmítala se vypnout a topila klidně nekonečně dlouho
  • reagovala buď strašně pomalu, nebo vůbec

Ve většině případů stačilo z hlavice vyndat baterie, nechat ji 5 minut „odpočinout“ a zase fungovala téměř „normálně“. Přesto se problémy s přetápěním a nedotápěním vracely dál.

Začal jsem tedy hledat řešení – nejdřív jsem zpochybnil automatizaci, pak zkusil Generic Thermostat, následně Better Thermostat. Nic z toho nevyřešilo základní problém.

Nakonec jsem pochopil, že jediná cesta je kompletně přepsat logiku řízení teploty tak, aby Ally přestala být pasivní náhodou a začala se chovat konzistentně. A právě tuto logiku si dnes detailně projdeme.

Jak to funguje

Původně jsem se snažil jít nejčistší cestou a využít hodnotu pi_heating_demand, což je interní procentuální požadavek hlavice na otevření ventilu (0-100%). To by byla úplně nejlepší forma řízení: prostě jí pošlu, kolik má otevřít, a je hotovo.

Problém je, že do pi_heating_demand se nedá zapisovat, je to jen stavová hodnota ne řídicí vstup. Výrobce záměrně tuto funkci zamknul. Takže tento elegantní nápad padl.

Skončil jsem tedy u řešení, které funguje spolehlivě a mám ho plně pod kontrolou:
Home Assistant počítá, jak moc má hlavice přitopit, a Ally dostává jen finální setpoint.

Nepoužívám žádnou její interní regulaci. Ally je v téhle konfiguraci prostě „vykonavatel“.

Používám tři parametry:

  • Kp – jak agresivně reagovat na zimu
  • Max. boost – kolik stupňů jsem maximálně ochotný přidat nad svůj požadavek
  • Min. delta – minimální rozdíl, aby mělo smysl vůbec budit hlavici

Logika:

  1. Otevřené okno → pošlu hlavici 5 °C a netopím.
  2. V místnosti je stejně nebo tepleji, než chci → posílám jen svůj cílový setpoint. Nic neřeším.
  3. V místnosti je chladněji → spočítám rozdíl, použiju Kp a určím, o kolik stupňů má smysl přitopit (boost).
  4. Boost nikdy nepřesáhne max. boost → nedochází k přetápění
  5. Pokud by změna byla menší než min. delta, hlavice ji ignoruje, takže ji vůbec nepošlu.

Výsledek je jednoduchý:

  • Home Assistant řídí
  • Ally jen poslouchá
  • teplota se drží přesně a stabilně
  • žádné přetápění, žádné nedotápění, žádné „záseky“

Postup

Vytvoření helperů

Aby šla regulace jemně ladit a nebylo potřeba upravovat automatizaci v YAML, tak vytvoříme čtyři číselné helpery (pomocníky) typu input_number a jednoho pomocníka typu boolean. Helpery najdeme v Settings -> Devices & services -> Helpers a pomocí „+ Create Helper“ vytvoříme nového pomocníka, celkem budeme vytvářet pět pomocníků:

  • input_number.bedroom_setpoint
    Cílová teplota v místnosti (hlavní vstup)
  • input_number.bedroom_kp
    Jak agresivně má systém reagovat, když je v místnosti zima
  • input_number.bedroom_max_boost_c
    Maximální počet stupňů, které může automatizace přidat nad setpoint
  • input_number.bedroom_activate_delta
    Minimální rozdíl potřebný k tomu, aby hlavice vůbec reagovala
  • input_boolean.bedroom_tune_mode
    Režim ladění (umožňuje zapnout nebo vypnout možnost měnit pokročilé hodnoty).

Helper bedroom_setpoint

V okně najdeme nebo vyhledáme typ „Number“ a pomocníka přidáme s následujícím nastavením:

  • Name: bedroom_setpoint
    (název si můžete přizpůsobit, ale pokud ho změníte, budete muset upravit i automatizaci)
  • Minimum value: 5
  • Maximum value: 30

bedroom_setpoint je hodnota, kterou budete používat k nastavení cílové teploty, na kterou chcete topit. Všechna logika regulace se následně odvíjí právě od této hodnoty.

Helper bedroom_kp

Stejným způsobem přidáme i helper bedroom_kp:

  • Name: bedroom_kp
    (název si můžete přizpůsobit, ale pokud ho změníte, budete muset upravit i automatizaci)
  • Minimum value: 1
  • Maximum value: 40

Helper bedroom_max_boost_c

  • Name: bedroom_max_boost_c
    (název si můžete přizpůsobit, ale pokud ho změníte, budete muset upravit i automatizaci)
  • Minimum value: 0
  • Maximum value: 6

Helper bedroom_activate_delta

  • Name: bedroom_activate_delta
    (název si můžete přizpůsobit, ale pokud ho změníte, budete muset upravit i automatizaci)
  • Minimum value: 0
  • Maximum value: 2

Helper bedroom_tune_mode

U tohoto helperu nevybereme typ Number, ale Toggle. Slouží k zapínání a vypínání režimu ladění.

Rozbor automatizace

Následující část je záměrně rozepsaná detailně a je určená hlavně pro ty, kteří si chtějí automatizaci upravovat nebo jí opravdu rozumět.

Pokud chcete řešení jen používat, můžete si stáhnout hotový blueprint, vybrat své entity a tuto část klidně přeskočit.

Triggery

Automatizace se spouští ve dvou případech

1) Každou minutu

Minutový trigger slouží jako pojistka.
Zajistí, že se logika pravidelně přepočítá a hlavice dostane správný setpoint i v situacích, kdy:

  • Ally ignoruje předchozí příkaz
  • externí senzor zrovna neposlal update
  • nebo se systém ocitne ve stavu, kdy nic jiného trigger nespustí

Je to prostě základní stabilizace.

2) Při změně důležitých vstupů

Automatizace se spustí i pokaždé, když se změní:

  • teplota v místnosti
  • cílový setpoint
  • Kp / max boost / activate delta
  • stav okna

To zajišťuje:

  • okamžitou reakci na změnu setpointu
  • přesnou regulaci, když se změní teplota
  • okamžité vypnutí, když se otevře okno
  • okamžitý přepočet, když ladíš parametry

Shrnutí triggerů

  • Minutový trigger = stabilita a jistota
  • Trigger na změnu hodnot = rychlá reakce na všechny důležité změny

Dohromady tvoří spolehlivý systém, který funguje i když Danfoss Ally zrovna ne.

Proměnné

V části variables si automatizace připraví všechny hodnoty, které potřebuje k výpočtu nového setpointu. Díky tomu je YAML přehlednější a výpočty se neopakují v několika místech.

Níže projdeme jen ty důležité proměnné, které přímo ovlivňují regulaci.

user_setp

Cílová teplota, kterou chce uživatel.
Je to „pravda“ celého systému — ke které se snažíme dostat.

temp

Aktuální teplota v místnosti podle externího senzoru.

kp, max_boost_c, activate_delta

Tři hodnoty, které určují chování regulace:

  • kp – jak silně přitápět
  • max_boost_c – kolik °C maximálně přidat nad setpoint
  • activate_delta – minimální rozdíl, aby hlavice vůbec reagovala

window_open

Pokud je okno otevřené, regulace se vypne a hlavice dostane 5 °C.

Ve výchozím nastavení automatizace začne topit okamžitě po zavření okna. To ale nemusí být vždy žádoucí – typicky když krátce větráte a v místnosti je ještě studený vzduch, který se má nejdřív promíchat a ohřát přirozeně.

Řešením je přidat časové zpoždění po zavření okna, během kterého se topení stále drží vypnuté.

Předchozí kód tedy stačí v automatizaci nahradit následující variantou a upravit si hodnotu v sekundách.
Například 300 odpovídá 5 minutám (5 × 60 sekund). Postup, jak upravit blueprint, naleznete zde.

err

Rozdíl mezi cílovou a skutečnou teplotou:

  • kladné číslo → je zima → přitápět
  • nula nebo záporné číslo → je teplo → nepřitápět

Je to základní vstup pro výpočet boostu.

raw_pct a pct

raw_pct je teoretická síla přitopení v procentech (0–100).

pct je její oříznutá verze, aby se nepřehoupla přes hranice.

  • 0 % → žádné přitopení
  • 100 % → plný boost

boost_c

Výsledný boost ve stupních, tedy o kolik °C přidáme k setpointu.

boosted_setp

Cílová teplota včetně boostu.
Tohle je hodnota, která se pošle hlavici — pokud dává smysl.

new_sp

Proměnná new_sp určuje, jakou teplotu nakonec pošleme hlavici.
Je to nejdůležitější část celé automatizace — všechny předchozí výpočty (Kp, boost, err…) se nakonec promítnou právě sem.

Celý výpočet má jen tři hlavní větve:

1) Otevřené okno → vypnout topení

2) V místnosti je teplo → drž setpoint

err = user_setp – temp

  • Je-li err ≤ 0 → v místnosti je dost tepla.
  • Nepřidáváme žádný boost.
  • Hlavici pošleme jen uživatelský setpoint (nic neřešíme).

3) V místnosti je zima → spočítáme přitopení

Tady začíná ta hlavní logika regulace.

  • boosted_setp je setpoint navýšený o vypočítaný boost (podle Kp a rozdílu teplot)
  • wake_sp = temp + activate_delta je minimální hodnota, kterou hlavice musí vidět, aby vůbec reagovala
    (protože malé změny ignoruje)

Potom se vybere větší z těchto dvou:

  • buď boostovaný setpoint,
  • nebo wake_sp (aby se hlavice „probudila“)

Tím je zaručeno:

  • že regulace přitápí jen tolik, kolik je potřeba
  • ale zároveň se nikdy nestane, že Danfoss Ally ignoruje příliš malou změnu

4) Ochrana proti nesmyslným hodnotám

Hlavice má své povolené limity — Danfoss Ally umí jen:

  • 5 °C minimum
  • 35 °C maximum

Tady se zaručí, že automatizace nikdy neposílá mimo rozsah.
Je to ochrana proti extrémním situacím (např. tunění extrémními hodnotami Kp).

5) Shrnutí logiky new_sp

Jednoduše řečeno:

  • Otevřené okno 5 °C
  • Teplo v místnosti pošli jen uživatelský setpoint
  • Zima v místnosti vypočítej boost, ale hlavice musí dostat aspoň temp + activate_delta
  • Mimo rozsah ořez na 5–35 °C
  • Výsledek odešle se hlavici jako nový setpoint

Tahle větev rozhoduje o tom, zda topíme, jak moc topíme a kdy přestaneme.

Akce automatizace

Poslední část automatizace je velmi jednoduchá: pošle finální vypočítaný setpoint do hlavice Danfoss Ally.

1) Vybereme zařízení, kterému chceme poslat hodnotu

To je vaše hlavice.

2) Pošleme jí novou teplotu

new_sp je finální teplota spočítaná v části variables:

Tou může být:

  • cílový setpoint (když je teplo)
  • boostovaný setpoint (když je zima)
  • minimálně temp + activate_delta (aby reagovala)
  • nebo 5 °C (když je otevřené okno)

Automatizace nikdy neposílá nic jiného.

3) Použije se služba climate.set_temperature

To je standardní způsob, jak Home Assistant nastavuje teplotu hlavicím.

4) Proč je mód restart

Protože automatizace může být spuštěna několikrát rychle za sebou (např. teplota se mění, posouváme se sliderem, ladíme Kp apod). Bez restartu by se mohly posílat staré hodnoty / fronta příkazů.

Blueprint

Díky blueprintu si můžete ušetřit spoustu práce. Stačí importovat soubor, vybrat helpery, hlavici, externí teplotní senzor a případně senzor otevřeného okna. Celá automatizace se pak nastaví sama, bez ručního přepisování entit.

Pro import blueprintu se přesuneme do Settings-> Automations & scenes -> Blueprints a klikneme na „Import blueprint“. V poli „Blueprint address“ vyplníme následující adresu a klikneme na „Preview“ a poté na „Import blueprint“.

Blueprint se senzorem otevřeného okna naleznete zde.

Blueprint bez senzoru otevřeného okna naleznete zde.

V seznamu blueprintů vybereme náš nově importovaný blueprint a nastavíme příslušné entity.


Ujistěte se, že váš okenní kontakt má stav „on“ při otevření. Pokud váš senzor používá jinou logiku (např. „open/closed“), je možné si blueprint ručně upravit přes File Editor. Blueprint najdete ve složce:

config/blueprints/automations/Freestylerrr/danfoss_ally_p_boost_with_window_sensor.yaml

V souboru pak stačí upravit vyhodnocení stavu okna v tomto řádku tak, aby odpovídalo vašemu senzoru:

Vytvoření dashboardu

Aby se regulace dala pohodlně používat v běžném provozu, připravil jsem si jednoduchý dashboard, kde mám na jednom místě cílovou teplotu, aktuální stav a možnost ladění parametrů.

V horní části dashboardu je běžné ovládání – nastavení cílové teploty, aktuální teplota v místnosti, stav okna a informace o otevření ventilu. To jsou věci, které používám denně. Vše ostatní je záměrně schované.

Pokročilé ladění je dostupné až po zapnutí přepínače Tune advanced settings. Dokud je vypnutý, žádné ladicí parametry na dashboardu vůbec nejsou vidět, takže se k nim není možné omylem dostat. Po zapnutí se zobrazí parametry Kp, maximální boost a minimální rozdíl pro probuzení hlavice.

Tyto hodnoty je potřeba si doladit podle konkrétní místnosti – univerzální nastavení neexistuje. Záleží především na velikosti místnosti, umístění externího teplotního senzoru, typu a velikosti radiátoru a také na tom, jak rychle radiátor topí a jak dlouho drží teplo.

Například velký nebo litinový radiátor, který dlouho zůstává horký, obvykle potřebuje nižší Kp a klidnější regulaci. Naopak menší nebo rychle chladnoucí radiátor si často říká o agresivnější reakci. Podobně hraje roli i umístění externího senzoru – senzor blízko radiátoru nebo v průvanu se bude chovat jinak než senzor umístěný uprostřed místnosti.

Důležitou roli hraje také hodnota Max boost. Ta musí být nastavená relativně vysoko, jinak se může stát, že hlavice vůbec nezačne topit. Danfoss Ally totiž často ignoruje malé změny setpointu a reaguje až na výraznější rozdíl. Vyšší maximální boost neznamená agresivní topení – je to pouze horní limit. Skutečnou sílu topení určuje kombinace rozdílu teplot a hodnoty Kp.

Prakticky to znamená, že:

  • nízký max boost může způsobit, že hlavice nereaguje
  • vyšší max boost dává hlavici dostatečný impuls se „probudit“
  • jemnost regulace se pak řeší hlavně pomocí Kp

Ideální postup je nastavit spíše konzervativní hodnoty, sledovat chování topení v průběhu několika hodin a parametry postupně jemně upravovat. Ne podle jednoho krátkého výkyvu, ale podle dlouhodobého chování – zejména toho, zda místnost přetápí, nebo se na cílovou teplotu dostává příliš pomalu.

V běžném provozu pak už řeším jen cílovou teplotu. O zbytek se stará automatizace.

Pro dashboardy bohužel Home Assistant zatím nemá ekvivalent „blueprintů“ jako u automatizací. Proto zde přikládám kompletní YAML kód celého dashboardu. Po vložení bude potřeba upravit názvy entit tak, aby odpovídaly vašemu Home Assistantu (zejména teplotní senzor, hlavice, okenní kontakt a helpery).

Závěr

V dnešním díle jsme dostali hlavici Danfoss Ally z polofunkčního stavu do stavu plně funkční a stabilně regulující termostatické hlavice. Celé řešení je postavené tak, aby si každý mohl nastavení přizpůsobit vlastním podmínkám — velikosti místnosti, typu a velikosti radiátoru nebo umístění externího teplotního senzoru.

Výsledkem je řízení topení, které reaguje předvídatelně, nepřetápí, nedotápí a nechová se nahodile jako při použití výchozí logiky hlavice. Pokud jste s Danfoss Ally bojovali podobně jako já, věřím, že vám toto řešení výrazně zlepší každodenní provoz.

Tak nohám v teple zdar!

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

2 Komentáře

  1. Dobrý den, parádá toto přišlo naprosto vhod protože přesně jak píšete je to spíše zdroj frustrace… Mám stejný HW tzn. jak xiaomi teplotní senzory tak hlavice Danfoss. Jen bych měl pár otázek.

    1) s tímto novým návodem zachoval jste zapnutou automatizaci pro odesílání teploty ze senzoru do hlavice?
    2) s novou automatizaci na PID řizení kterou jste představil v tomto článku, přestal jste využívat Better Thermostat protože již s tímto řízením není potřeba nebo jste ho zachoval ?
    3) Maximální hodnotu v Helperu KP je 40 musel jste někde nastavit reálně opravdu tak vysoké KP ?

    Moc díky za návody v podstatě vy jste mě přivedl k HA a i když se naše cesty od 5 dílu trošku rozešly pořád s velkým očekáváním čekám na další díly. Super články a jen tak dál

    1. Dobrý den, jsem rád, že se Vám články líbí :).

      1) Ne, původní automatizaci pro odesílání teploty do hlavice už nepoužívám. Vše řeší nová P-boost automatizace, která pracuje s externím senzorem jen jako se vstupem pro výpočet a do Danfoss Ally posílá už pouze výsledný setpoint.
      2) Better Thermostat již není potřeba, všechno řídí automatizace a teplotu nastavuji přes slider.
      3) Nemusel, ale mám rychlý radiátor a relativně malé místnosti. U starých litinových by mohla být vysoká hodnota potřeba, trvá jim dlouho než začnou pořádně topit.