Nastavenie premennej v rámci Akcie - šablóna?

Automatizace tvořené přímo, pomocí funkcí HomeAssitent(a).
lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od lubost »

Zdravím,

potreboval by som poradiť s automatizáciou.
Už čiastočne viem využiť v rámci automatizácie Podmienku, kde je šablóna a nejaký výraz sa porovnáva a na základe výsledku nasleduje akcia...
Prípadne v rámci Akcie mám Choose a potom viac možností a na záver Default... ale aj tam sa šablóna dá použiť iba v rámci Podmienky, nie Akcie.

Teraz by som potreboval, aby sa v určenom čase (to viem) vykonala Akcia a to klasické priradenie hodnoty jednej premennej do druhej... manuálne ju viem nastaviť cez Zavolať službu -Číselný vstup-Set, ale tam musím zadať (nastaviť) konkrétnu hodnotu. Ja by som však chcel, aby sa hodnota požadovanej premennej priraďovala z inej, ktorú viem nastaviť na karte Lovelace...
Prípadne nejaký odklik na návod pri používaní premenných cez rôzne podmienky... nejaké malé skúsenosti s jednoduchým programovaním mám...
ako vyskladať v samotnom skripte viacnásobný If - then - else...
Napísať si takéto skripty a ten len v nejakom čase zavolať...sú

Mám vytvorený senzor priemernej teploty, kde su entity požadovaných teplomerov. Druhý senzor je priemerná požadovaná teplota, kde je opäť príslušné entity. Lenže teraz by som chcel, aby sa tie priemerné hodnoty vypočítavali iba pre tie entity, kde v danej izba nie je otvorené okno a taktiež príslušná požadovaná teplota sa počas dňa mení (vyššia/nižšia)...
Vo finále by mala každá premenná požadovanej teploty danej izby nastavenú príslušnú hodnotu a boolean premennú (true/false), či sa má/nemá započítavať do priemeru.
Takto by mi sa vylepšilo moje zónové vykurovanie, keďže teraz sa započítavajú aj izby, kde je otvorené okno, hlavica je zavretá, izba sa nevykuruje, je tam logicky nižšia teplota, čo ponižuje priemernú teplotu a tak mám vyšší rozdiel na OpenThermostat a kotol kúri s vyššou účinnosťou...
Sorry za dlhší príspevok...

Ešte aktuálny stav senzorov v configuration.yaml (a práve toto by som chcel, aby sa v nejakých intervaloch každých 5 minút "prepočítavalo" podľa aktuálneho stavu okna a času použila vyššia/nižšia teplota):

Kód: Vybrat vše

sensor:
  - platform: average
    name: 'Priemerna teplota hore'
    entities:
      - sensor.detska_teplomer_teplota
      - sensor.obyvacka_teplomer_teplota
      - sensor.spalna_teplomer_teplota
      - sensor.kuchyna_teplomer_teplota
      
  - platform: average
    name: 'Priemerna pozadovana teplota hore'
    entities:      
      - input_number.temp_detska_vyssia
      - input_number.temp_kuchyna_vyssia
      - input_number.temp_spalna_vyssia
      - input_number.temp_obyvacka_vyssia


Vďaka, Lubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od Pete30 »

lubost píše: 23. listopad 2021, 06:46 Teraz by som potreboval, aby sa v určenom čase (to viem) vykonala Akcia a to klasické priradenie hodnoty jednej premennej do druhej... manuálne ju viem nastaviť cez Zavolať službu -Číselný vstup-Set, ale tam musím zadať (nastaviť) konkrétnu hodnotu. Ja by som však chcel, aby sa hodnota požadovanej premennej priraďovala z inej, ktorú viem nastaviť na karte Lovelace...
Trošku se ztrácím ve tvém popisu :roll:
Jen abych to dobře pochopil:
Zavolať službu -Číselný vstup-Set to ti funguje jak potřebuješ pokud manuálně zadáš hodnotu ?
Ja by som však chcel, aby sa hodnota požadovanej premennej priraďovala z inej, ktorú viem nastaviť na karte Lovelace... , chceš jí přičíst, odečíst nebo co s ní chceš udělat ?
1 Máš entity a,b,c,d a vypadne ti průměrná skutečná hodnota na jedné entitě xy ?
2 Máš enity a,b,c,d a vypadne ti průměrná požadovaná hodnota na jedné entitě xy ?
3 Máš entitu u které jsi schopen manuálním přiřazením hodnoty změnit její hodnotu ?
Takže máš 3 entity se kterými chceš pracovat(nepočítám ty které průměruješ) ?
Jako akci chceš tu 3 entitu(číselnou) která změní hodnotu po výpočtu těch předchozích ?
Případně sem vlož to manuální nastavení, abych měl představu ;)
Pokud nejsem přítomen tak jsem na rybách ;)

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od lubost »

Najprv jednoduchá vec, pokiaľ by som hodnotu zadal ručne:
Každých 10 minút porovnávam, aká je teplota v danej izbe (senzor teplomer) voči požadovanej (viem ju nastaviť na karte lovelace, je to číselná premenná). Ak je teplota v miestnosti vyššia ako požadovaná, zatvorí sa termostatická hlavica. Ak je nižšia, otvorí sa hlavica. V podmienke automatizácie mám toto:

Kód: Vybrat vše

      - conditions:
          - condition: template
            value_template: >-
              {{states("sensor.kuchyna_teplomer_teplota") < 
              states("input_number.temp_kuchyna")}}
Toto porovnanie by som chcel ale doplniť o ďalšiu premennú. Neviem, či toto by bol správny zápis

Kód: Vybrat vše

            value_template: >-
              {{states("sensor.kuchyna_teplomer_teplota") < 
              (states("input_number.temp_kuchyna") - states("input_number.temp_znizenie_pomocny"))}}
Ale táto premenná je nastavovaná podľa určitého času. Mám časové obdobia OD-DO, kedy je požadovaná vyššia teplota v miestnosti a kedy nižšia. Keď je požadovaná vyššia, nastavujem hodnotu NULA, ak má byť útlm, chcem jej priradiť hodnotu premennej, ktorá sa nastavuje opäť na karte lovelace. Čiže ak nastavím, že pokles by mal byť 1,5 stupňa, tak sa bude o túto hodnotu teplota vo všetkých izbách nižšia, ak nastavím 1, tak to bude iba jeden stupeň. Zatiaľ túto hodnotu nastavujem v automatizácii na pevnú hodnotu:

Kód: Vybrat vše

action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.kurenie_vyssia
  - service: input_number.set_value
    target:
      entity_id: input_number.temp_znizenie_pomocny
    data:
      value: 1
Ciže namiesto pevnej hodnoty (value: 1) by som tam potreboval niečo také:
{{states("input_number.temp_znizenie_pomocny")==states("input_number.temp_znizenie")}}
Ak tento výraz dám do karty vývojára/šablóny, tak dostávam true/falshe, podľa toho, či sa rovnajú/nerovnajú... ak dám iba jedno "=", tak to vyhodí chybu. Skúšal som to zadať v samotnej automatizácii po prepnutí do kódu, ale po uložení a opätovnom otvorení je to prázdne.

A keď vyriešim toto, potom by som chcel vytvoriť senzor na priemernú požadovanú teplotu a priemernu aktuálnu teplotu. Aktuálne ich mám zadané v configuration.yaml ako average senzor, ale vždy beriem všetky izby do výpočtu. Ako namerané, tak aj požadované teploty. A ako som písal vyššie, celkom to nevyhovuje, potreboval by som brať do úvahy iba tie izby, kde nie je otvorené okno (keďže tam sa nekúri) a taktiež aj požadovanú teplotu aj s prípadným znížením...
Samotná požadovaná teplota v miestnosti by bola ako tento výraz:
(states("input_number.temp_kuchyna") - states("input_number.temp_znizenie_pomocny"))
Keďže tá pomocná premenná by v čase mala hodnoty buď 0 alebo práve hodnotu zníženia... takže výsledná hodnota by bola práve ta požadovaná do výpočtu v danom čase.
Skúsim teda túto časť popísať:

Kód: Vybrat vše

//najprv vynulujem potrebne premenne:
priemerna_pozadovana = 0
priemerna_teplota = 0
priemerna_pocet = 0
Ak je okno spalna zatvorené (binary_sensor.okno_hore_spalna_contact)
     priemerna_pozadovana = priemerna_pozadovana + pozadovana_spalna   
     priemerna_teplota = priemerna_teplota + teplota_spalna
     priemerna_pocet = priemerna_pocet + 1
pokracujem dalsou izbou... pretoze ak je okno otvorene, nepotrebujem nic na premennych menit
// mam vyhodnotene vsetky izby, idem vypocitat priemerne hodnoty
priemerna_pozadovana = priemerna_pozadovana / priemerna_pocet
priemerna_teplota = priemerna_teplota / priemerna_pocet
A v podstate tieto priemerne teploty odosielam do virtualneho termostatu, ktory nasledne reguluje kotol...
Ak teda priemerna_pozadovana > priemerna_teplota
kotol stale je zopnutý a dohrieva vodu do kúrenia. Ak sa podmienka obráti, kotol sa vypína...

Ešte obrázok na moju aktuálnu kartu vykurovania
Obrázek

Legenda:
Vľavo sú všetky izby, kde vidím aktuálnu a požadovanú teplotu, či je otvorené okno a či je aktívna termostatická hlavica
- Atag-zaslaná - to je vlastne priemerná teplota v celom byte, posielam do OpenThermostatu cez service: mqtt.publish
- Atag-cieľová - samotný OpenThermostat si prepočíta teplotu vykurovacej vody a nastaví jej hodnotu
- Atag-teplota - reálna teplota vykurovacej vody
- Teplota vody - je aktuálna teplota teplej úžitkovej vody, jej maximálnu požadovanú teplotu nastavujem medzi ostatnými požadovanými teplotami (aktuálne 55 st.)
- Atag-% - aktuálna záťaž kotla
taktiež tam vidím, či v danom čase sa požaduje vykurovanie a či je zopnutý horák...
Lubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od Pete30 »

Co vidím:
V prvním kódu porovnáváš sensor.kuchyna_teplomer_teplota menší než input_number.temp_kuchyna = výstup šablony bude true nebo false
V druhém kódu se snažíš odečíst od true nebo false input_number.temp_znizenie_pomocny = což samozřejmě nejde
Tím máš vysvětleno že {{states("input_number.temp_znizenie_pomocny")==states("input_number.temp_znizenie")}} bude opět true nebo false ;)
Nepracuješ v šabloně se skutečnou hodnotou, ale jen on/off.
Pokud chceš například porovnat dva senzory a vypočítat jejich rozdíl ve skutečné hodnotě můžeš to vyzkoušet například takto:

Kód: Vybrat vše

value_template: >-
  {% set kuchyna = states.sensor.kuchyna_teplomer_teplota.state | float(0) %}
  {% set inkuchyna = states.input_number.temp_kuchyna.state | float(0) %}
  {{ kuchyna - inkuchyna }}
Výsledkem bude hodnota kuchyně po odečtení čísla nastaveného v input_number :roll: a s tím se dá pracovat dál.
Pokud nejsem přítomen tak jsem na rybách ;)

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od lubost »

Zdravim,

prave takéto nakopnutie potrebujem, ako je v tom príklade... práca s premennými a ich samotné použitie...
Čo sa týka prvého kódu, že výsledkom je true/false... ved toto potrebujem v podmienke danej automatizácie... ak je true, zavolá sa služba, ktorá nastaví na termostatickej napr. vyššiu teplotu a zopne ju, ak false, tak opäť služba nastaví pre termostatickú hlavicu nižšiu teplotu a vypne ju .
Len by som chcel, aby to samotné porovnanie na pravej strane zohľadňovalo aj priradenú hodnotu nastaveného zníženie... pretože v určitom čase je hodnota tejto premennej NULA (nechcem zníženie v byte) a určitý čas nejaká nastavená hodnota (o túto bude porovnávanie teplôt nižšie). Obe premenné na pravej strane sú číselné hodnoty, ktoré sú nastavené na karte lovelace (Teploty, nastavená hodnota pre kuchyňu a samotné zníženie). A výsledkom by bolo true/false, čo vlastne potrebujem... čiže ak je nameraná hodnota 21.5, navolená 22, požadované zníženie 1, tak by sa porovnávalo:
21.5 < 22 - 1
výsledkom je nepravda, čiže mám v izbe teplejšie, ako požadujem, zatvorím termostatickú hlavicu...
o hodinu už sa ukončí pokles (čiže druhá premenná má hodnotu 0), a teplota v izbe sa nezmení, tak sa bude porovnávať:
21.5. < 22 - 0
výsledkom je pravda, čiže v izbe je nižšia teplota, ako v danom čase požadovaná, otvorí sa hlavica a radiátor bude vyhrievať...

čiže potrebujem správne zapísať tento stav (ako podmienku cez možnosť Šablóna v Automatizácii).

A ešte, ako môžem v automatizácii priradiť hodnotu premennej tak, aby:
táto premenná: input_number.temp_znizenie_pomocny sa rovnala tejto premennej: input_number.temp_znizenie...
som spomínal, že v rámci Akcie viem nastaviť premennú, ale napevno zadaným číslom... ale ja chcem, aby sa priradila hodnota v nastavených časoch práve podľa danej premennej a v iných časoch napevno nulou. Tú nulu nastaviť viem, inú hodnotu zatiaľ nastavujem napevno... neviem odovzdať hodnotu z premennej (Automatizácia, časť Akcia)...

To je zatiaľ prvá časť, s ktorou si neviem rady...
PS: Ten príklad nižšie:
- priradím hodnoty teplomera alebo snímača novym premennym ako číselné hodnoty
- s tými následne viem robiť matematické operácie, zatiaľ mi je to jasné
- ako by som ale takéto zadanie zadal v rámci Automatizácie v časti Akcie? cez akú možnosť? v časti Podmienka mám možnosť vybrať Šablóna, tam by som to vedel zadať... ale v časti Akcie? toto hľadám, toto neviem...

Ľubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od Pete30 »

I v akci lze použít šablony.
Například doma používám dávkovací pumpu na hnojiva do akvária a chtěl jsem mít přehled a upozornění na nízký stav roztoku.
Nastavím na kartě počet ml dávkování a v nastaveném čase se rozjede čerpadlo šablona spočítá že za kolik vteřin se nadávkuje například 5ml které požaduji a akce vypne čerpadlo.
Další v akci jsem použil šablony: mám službu - input_number.set_value a mám dva input_number 1. odečet roztoku a 2. dávkování.
zde od odečet_roztoku odečtu dávkování a nastavím odečet_roztoku na hodnotu vypočítanou šablonou.
Výsledek je že po každém dávkování se snižuje číslo které udává ml v zásobníku které vidím na kartě náhledu.

U tvého projektu si myslím že to bude docela složité vše poskládat.
Stále počítáš s průměrnou teplotou domu a tvoje úvaha je pokud průměr v domě je například 22°C tak proč topit v obýváku když má 22,5°C, ale co když já budu chtít v obýváku 24°C protože mám rád teplo ?
Pokud nejsem přítomen tak jsem na rybách ;)

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od lubost »

I v akci lze použít šablony.
Veľmi ma to teší, len ja stále neviem kde to mám zadať. A ani ako to mám zadať... úplne triviálne priradenie, napr.
a > b + c
z = y
A potom práca s podmienkami... if then else a do toho zakomponované matematické úkony, či priradenie premenných... vyššie je k tomu slovný opis.

Čo sa týka samotného kúrenia a používania priemernej teploty... postupne to ladím. Kým na začiatku termostat iba klasicky zapínal/vypínal, ako funguje väčšina termostatov, keď dosiahnu nastavenú teplotu, kotol prestane kúriť. Ak sa termostat zopne, kotol ide "na plné pecky"...
Mám kondenzačný kotol na protokole OpenTherm, poskladal som si za 20 € aj krabičku, ktorú cez virtuálny termostat dokážem ovládať. A keď mal kúriť, tak som posielal na termostat napr. požadovanú hodnotu 25 stupňov, ak nemal kúriť, tak 15... a tak sa kotol správal prakticky po starom, stále išiel pomaly na 100%, ak bola potreba kúrenia... tak ma napadlo tam posielať priemernú teplotu. Ako sa priemerná teplota v byte približovala požadovanej, tak kotol ide stále na menšiu účinnosť. A o tom je ten novší kotol.
Potom som prišiel na problém s otvorenými oknami a preto som začal riešiť tie šablóny a spôsob, ako to tam zadať. A pri tom ma už napadlo, že taktiež z priemeru budem vylučovať aj izby, ktoré už budú nakúrené... Čiže presne, ako sa spomína, ak už ostane iba obývačka nevykúrená, tak priemerná aj požadovaná teplota bude už iba tá z tej obývačky. Ale potrebujem sa naučiť prácu s podmienkami...
Možno v NodeRed by som to nejako dal, ale zatiaľ nemám priestor sa tomu venovať, stále si myslím, že toto je triviálne, len vedieť syntax, ako to zapísať... (a ako to následne použiť ako akciu v automatizácii)
takto viem úplne presne, čo sa u mňa pri vykurovaní deje, ako to celé funguje. Aktuálne som do nového systému pripojil aj starý kotol na tuhé palivo a práve to celé dávam dokopy, aby len čo začnem kúriť v ňom, na základe nasnímanej teploty na výstupe sa automaticky spustilo iné čerpadlo, prepol trojcestný ventil, otvoria sa naplno všetky termostatické hlavice v celom byte, zastavia sa automatizácie, ktoré súvisia so zónovým kúrením a kondenzačným kotlom, budem mať prehľad v mobile o teplote stúpačky/spiatočky na starom kotly (v minulosti som musel ísť pozrieť na jeho teplomer), ak by sa prehrievala stúpačka, tak aj notifikácia do mobilu... do tej krabičky plánujem pridať farebné diódy, ktoré podľa teploty stúpačky sa budú postupne rozsvecovať, čiže aj vizuálne z diaľky budem mať prehľad o teplote...
už sa zamýšľam aj nad možnosťou, že pripojím na tie staré dvierka cez retiazku nejaký mechanizmus, ktorý na základe teploty ich bude otvárať/privierať... proste možností a myšlienok na mraky... len sa prelúskať cez syntax, aby som pár premenných vedel porovnať, sčítať, spriemerovať, vypodmienkovať...

Ľubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od Pete30 »

Už nevím jak vysvětlit.
Rozeberu tvůj příklad a > b + c
a > b= true(false) + c ???? nelze přičíst číselnou hodnotu (to je snad jasné)
z == y = true/false

a - b = číselná hodnota
a + b = číselná hodnota
a / b = číselná hodnota
a * b = číselná hodnota

a - b + c > a = true/false

příklad jednoduché akce v automatizaci:

Kód: Vybrat vše

service: input_number.set_value
data:
  value: >-
    {{ states('input_number.x') | int -
    states('input_number.y') | int }}
target:
  entity_id: input_number.y
Když se na to podíváš tak od x odečtu y a výslednou hodnotou nastavím y, ale to y bude vypočítaná hodnota v jiné šabloně ze skutečných hodnot(třeba termostatu) kde dostaneš číslo a ne false nebo true, to můžeš vyhodnotit dále v další šabloně a použít třeba jako podmínku.
Pokud budeš pracovat s true/false můžeš v akci nastavit input_boolean který vyhodnotíš pomocí toho tvého příkladu a > b a použít ho opět jako podmínku nebo kdekoliv jinde kde potřebuješ.
Jinak takto automatizovat je zase zbytečné, pokud chci pouze výsledek on/off můžu rovnou vytvořit senzor šablony a ten výsledek použít rovnou kde potřebuji. Tak to například používám u televize kde měřím odběr (W) kde šablonou vyhodnotím > 30 a dostanu on/off a to používám na vypnutí rádia když se zapne televize.
Pokud nejsem přítomen tak jsem na rybách ;)

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od lubost »

Rozeberu tvůj příklad a > b + c
a > b= true(false) + c ???? nelze přičíst číselnou hodnotu (to je snad jasn
Blbo som to napísal, správne to malo byt:
a > (b + c)

Ale rozjasňuje sa...
ešte môžem poprosiť konkrétnu syntax:
ak je okno1 zatvorené alebo izba1 nevykúrená, potom
{{states("input_number.teplota_pozadovana_vypocet") | float(1) = states("input_number.teplota_pozadovana_vypocet") | float(1) + states("input_number.temp_kuchyna_vyssia") | float(1) }}
{{states("counter.pocet_na_priemer") | int = states("counter.pocet_na_priemer") | int + 1 }}

ale vypisuje mi to chybu:
TemplateSyntaxError: expected token 'end of print statement', got '='

Musím teda ešte veľa študovať, aká je správna syntax...

Ľubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Nastavenie premennej v rámci Akcie - šablóna?

Příspěvek od Pete30 »

A když zadáš ==
Pokud nejsem přítomen tak jsem na rybách ;)

Odpovědět

Zpět na „Automatizace“