Zapnutí zvlhčovače

Automatizace tvořené přímo, pomocí funkcí HomeAssitent(a).
Zamčeno
tomasr
Aktivní autor
Aktivní autor
Příspěvky: 82
Registrován: 11. leden 2023, 18:43
Dal poděkování: 3 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od tomasr »

acerot píše: 19. únor 2023, 18:07 Pokud vím, skript nelze použít jako výstup podmínky, protože skript nevrací hodnotu, pouze vykonává akce. Opravte mě, pokud se pletu.

Takže buď jak píše Pete30. Anebo použij šablonu, která ti sdělí, zda je někdo doma nebo dokonce kolik lidí je doma - záleží na tvé konkrétní implementaci. Tu pak můžeš použít v podmínce typu - condition: template.

Anebo si můžeš udělat template senzor založený na šabloně, který bude neustále existovat a evidovat, zda je někdo doma a ten jednoduše použiješ v podmínce buď state nebo numeric_state, podle toho, jak šablonu napíšeš. Výhoda vytvoření takového senzoru je, že ho můžeš dát do Dasboardu a že k němu vede HA historii změn jeho stavů.

Ten vzorek kódu skriptu, co jsi sem dal, moc nedává smysl. Máš v něm jen podmínku, ale nemáš v něm žádnou akci. Kompilátor to nejspíš snese, pokud to máš syntakticky dobře, a skript se bude dát zavolat a i se vykoná, ale jeho činnost bude nulová. Vyhodnotí podmínku, ale vlastně nebude vědět, proč ji vyhodnocuje, protože dle jejího výsledku nenásleduje žádná akce, kterou by buď vykonal nebo nevykonal. Předpokládám, žes to tak udělal proto, protožes měl za to, že skript vrátí logickou hodnotu z té podmínky.

A ještě poznámka. Skripty budeš určitě ladit, když nebudou dělat to, co mají. Když budeš chtít vědět, co přesně skript posledně dělal a kudy se větvil atd., jdi do seznamu skriptů v GUI, kde se u každého skriptu dá zobrazit jeho trasa posledního spuštění (a několika předchozích spuštění - dle nastavení Recorderu), viz přiložené obrázky. Na ty ikony vlevo v stromečku se dá klikat, takže uvidíš, co v jednotlivých krocích skript dělal. Stejným způsobem si lze zobrazit strom při ladění běhu automatizací.

skript.jpg
skript1.jpg
Toho, že skript takhle využít nejde jsem se bál. Ten skript ale vrací logickou hodnotu, viz:
Screenshot_20230219-183530196.jpg
Jak by si z tohodle udělal šablonu a hlavně kde? V sekci šablon lze šablony jen importovat, nikoliv vytvářet.
HA mám nainstalovaný v synology 918+.

Uživatelský avatar
acerot
Pokročilý
Pokročilý
Příspěvky: 118
Registrován: 12. prosinec 2022, 15:44
Dal poděkování: 2 poděkování
Dostal poděkování: 24 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od acerot »

Skupinu lze vytvořit i v GUI v Pomocnících. Aktuálně jsou skupiny striktně dle domén entit - nemůžeš kombinovat domény, které v manuálu nejsou uvedeny, že mohou spolu být ve skupině. Zavedli to nedávno, protože dřív to bylo jedno, do skupiny s mohl dát cokoliv k sobě, ale blbě se pak definovaly možné akce skupiny jako celku, protože její členové sebou nesly definice různých akcí (příklad: dnes můžeš na celou skupinu domény cover poslat službu close_cover, protože všichni její členové jsou covery a budou to umět vykonat. Ve staré definici skupiny, kdy jsi měl ve skupině jak covery, tak třeba lights a další už nebylo snadné poslat na celou skupinu close_cover, protože ostatní členové to neuměli provést). Starý způsob zápisu skupin je stále akceptován, ale v manuálu píšou, že ho nedoporučují používat https://www.home-assistant.io/integrati ... yle-groups

To nevrací logickou hodnotu skript, ale ta podmínka v něm.

Šablonu nadefinueš podle toho, co sis vybral: Když template senzor, tak v definici senzoru. Když podmínku, tak v podmínce při definici automatizace/skriptu. Píšeš automatizace/skripty v GUI nebo v YAML souborech (nebo obojí)?

tomasr
Aktivní autor
Aktivní autor
Příspěvky: 82
Registrován: 11. leden 2023, 18:43
Dal poděkování: 3 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od tomasr »

Ok, našel jsem to. Skupina uživatelů už podle všeho použít nejde, šla dříve a i když to zřejmě stále lze nadefinovat v yaml (v GUI možnost nevidím), tak to nechci moc delat jelikož je to depreaced a je možné že to úplně odstraní.

Aha, takže skript je prostě metoda, co nic nevrací a je to jen na vykonání sekvence akcí, které lze znovupouzit, ale předávat si proměnné nebo dál s ním pracovat nelze.

Ohledně těch šablon nerozumím. Nevím co máš na mysli definicí senzorů. Nikde nevidím možnost vytvořit si senzor. V automatizace už jsem viděl použití šablony, ale byl to kus kódu v podmínce, který nebyl znovupouzitelný.

Jelikož yaml není co se týče syntaxe úplně jednoznačný (alespoň mi to tam přijde), tak používam GUI na učení a upravují v yaml nebo když něco v GUI nejde, tak to taky píšu ručně, ale je to občas celkem bolestivé. Jelikož sám programuji, tak se yaml nebojim a rád bych do něj více pronikl.
HA mám nainstalovaný v synology 918+.

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

Re: Zapnutí zvlhčovače

Příspěvek od Pete30 »

tomasr píše: 19. únor 2023, 22:44 Ok, našel jsem to. Skupina uživatelů už podle všeho použít nejde, šla dříve a i když to zřejmě stále lze nadefinovat v yaml (v GUI možnost nevidím),
Proč by nešla použít, jede mi to tady v pohodě.
Pokud se ti nelíbí že je to zastaralé a že to odstraní (nevím o tom že by mělo být odstraněno) tak proč nepoužiješ zónu 0.
Pokud programuješ jak píšeš tak by pro tebe měl být yaml hračka. Je to jen texťák kde dodržuješ syntaxi, pár pravidel a to ještě ne doslova.
Pokud nejsem přítomen tak jsem na rybách ;)

tomasr
Aktivní autor
Aktivní autor
Příspěvky: 82
Registrován: 11. leden 2023, 18:43
Dal poděkování: 3 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od tomasr »

V GUI vidím jen tyto skupiny. Možná, že je skupina osob někde ukrytá, ale zde vidět není.
Screenshot_20230220-070633196.jpg
Právě protože je to textak, tak se mi v něm nepíše dobre. Syntaxi se ucim z GUI a jelikož není jednoznačná jak u jazyků bývá zvykem, tak se mi v nem nepíše dobre. To ale neznamená, že jazyk nějak zatracuju, jen popisují situaci.

Na co jsem třeba ještě nepřišel je snížení redundance kódu (i když doufám, že to jde). Třeba u těch telefonu ... při výměně telefonu pak přepisovat 10 automatizaci mi nepřijde zrovna efektivní.
HA mám nainstalovaný v synology 918+.

Uživatelský avatar
acerot
Pokročilý
Pokročilý
Příspěvky: 118
Registrován: 12. prosinec 2022, 15:44
Dal poděkování: 2 poděkování
Dostal poděkování: 24 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od acerot »

V GUI skupinu uživatelů domény person udělat (zatím?) nejde. A myslím, že to nejde ani v YAMLu - myslím dle nové syntaxe. Dle staré to stále jde a mělo by to fungovat:

Kód: Vybrat vše

group:
  lidi:
    name: "Lidi u nás doma"
    entities:
      - person.karel
      - person.marie
Ano, skript je sekvence akcí. Předávat proměnné do něj však lze, viz https://www.home-assistant.io/integrati ... to-scripts Je tam vidět, jak automatizace předává skriptu při volání služby script.turn_on hodnoty v sekci data: variables: a ve skriptu pak ty hodnoty použiješ v šabloně "{{ title }}". Volání skriptu s předáním proměnných si můžeš zkoušet v GUI v sekci Vývojářské nástroje / Služby, ale to asi už znáš.

Definice senzorů. Senzory jsou jedním ze stavebních kamenů HA a samozřejmé je, že si vytváříš svoje. Například takto v YAMLu definuju senzor platformy history_stats, který eviduje, jak dlouho mi každý den topí bojler. Využívá dalšího mnou definovaného binárního senzoru, který určuje, zda bojler topí či nikoli:

Kód: Vybrat vše

- platform: history_stats
  name: Bojler čas topení za den
  entity_id: binary_sensor.bojler_topi
  state: "on"
  type: time
  start: "{{ now().replace(hour=0, minute=0, second=0) }}"
  duration:
    hours: 24
Jsi programátor, dej YAMLu šanci. Mně trvalo skoro půl roku, než jsem ho pochopil. Teď v něm dělám všechno, kromě pár věcí, které si naklikám v GUI, například Pomocníky. Můžeš vytvářet věci jak v GUI tak v YAMLu, HA se s tím popasuje. Možná kromě několika výjimek, kdy autoři HA čas od času v aktualizaci oznámí, že možnost definice této integrace v YMALu už byla zrušena a od teď se to dělá jen v GUI.

Redundance kódu. Do jisté míry to i v YAMLu jde. Musíš si automatizaci dobře napsat jako znovupoužitelnou - lépe řečeno univerzílní. 10 automatizací pro 10 telefonů samozřejmě napsat jde a bude to fungovat, ale jak říkáš, udržitelnost a aktualizovatelnost takto vytvořeného kódu je zběsilost (i když VSCode umí zázraky ;) ). Takže napiš tu automatizaci jednu a tak, aby dokázala obsloužit nekonečně telefonů. Říct ti jak v jedný věte tady nejde, je to o několika postupech, jako jsou vícenásobné trigry automatizace, groupy, psaní věcí jako šablon (což jsou výrazy jazyka Jinja + HA doplňky k němu) spíše než exaktních deklarací, větvení pomocí podmínek atd. Jeden příklad za všechny. Nejsem žádná mág, takže napsat by se to dalo jistě ještě lépe, ale tato automatizace sdělí, že je vybitý jakýkoliv telefon díky šabloně použité ve zprávě, která vytáhne to správné friendly_name. Místo seznamu těch dvou telefonů by se tam dala použít grupa, to už se mi nechtělo dělat ;)

Kód: Vybrat vše

- alias: Mobilní zařízení je téměř vybito
  id: "mobilni_zarizeni_je_temer_vybito"
  mode: queued
  trigger:
    - platform: numeric_state
      entity_id:
        - sensor.note10_battery_level
        - sensor.s2_battery_level
      below: 10
  action:
    - service: script.turn_on
      entity_id: script.notifikuj
      data:
        variables:
          nadpis: "Mobilní zařízení"
          zprava: "Upozornění: Mobilní zařízení {{ state_attr(trigger.entity_id, 'friendly_name').split(' ')[0] }} je téměř vybito."

tomasr
Aktivní autor
Aktivní autor
Příspěvky: 82
Registrován: 11. leden 2023, 18:43
Dal poděkování: 3 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od tomasr »

Nezatracuji yaml jen se přiznám, že jsem z něj lehce zklamán. Na začátku jsem byl nadšenej a jak jsem dělal jednotlivý automatizace, tak mě ani moc netrápilo, že některé podmínky se opakují. Říkal jsem si "v pohodě, to doladím později". Teď zjišťují, že to buď nejde nebo jde velice složitě.

Bohužel ani v dokumentaci není dle mne moc dobře popsáno jak se daná věc dělá. Pochopil jsem, že sensory můžu definovat v sensors.yaml a ten pak načíst v configuration.yaml. udělal jsem sensor, dle aktuální syntaxe (snad):

Kód: Vybrat vše

template:
  - binary_sensor:
      - name: "somebody_home"
        state: >
          {{ is_state('device_tracker.asus_phone', 'home') or
            is_state('device_tracker.asus_phone_2', 'home') }}
Ten senzor jsem chtěl použít pro automatizace. Bohužel jeho entity_id našeptávač nenabídne. Jinak těch telefonu tam může být klidně 10 a tak to jde i v té podmínce automatizace, v tom problém není. Problém je, že potřebuju tyhle podmínky umístit do různých automatizací a v případě výměny jednoho telefonu bych rád změnil jen ten sensor. Napadá že jak to řešit nebo v čem je má úvaha tvorby senzoru chybná?
HA mám nainstalovaný v synology 918+.

Uživatelský avatar
Lion®
Administrátor fóra
Administrátor fóra
Příspěvky: 1604
Registrován: 28. září 2020, 14:07
Bydliště: podkrkonoší
Dal poděkování: 144 poděkování
Dostal poděkování: 193 poděkování
Kontaktovat uživatele:

Re: Zapnutí zvlhčovače

Příspěvek od Lion® »

Kód: Vybrat vše

      - name: somebody home
můžeš použít i unique_id: ...
________________
🍻 Přispěj a získej přístup do obsahu fóra pro dárce. :thx:
Oficiální sada s Raspberry Pi 4B/4GB, černá +Argon NEO Raspberry Pi 4 Case
Patriot Burst 2.5" SATA SSD 120GB + AXAGON EE25-XA6 ALINE box

Galerie realizací

tomasr
Aktivní autor
Aktivní autor
Příspěvky: 82
Registrován: 11. leden 2023, 18:43
Dal poděkování: 3 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od tomasr »

At už použijí name nebo unique_id, tak v automatizaci mi to při napsání podmínky entity_id nenajde.

Kód: Vybrat vše

- condition: state
    entity_id: binary_sensor.somebody_home
    state: "on"
Takhle si to myslel?
HA mám nainstalovaný v synology 918+.

Uživatelský avatar
acerot
Pokročilý
Pokročilý
Příspěvky: 118
Registrován: 12. prosinec 2022, 15:44
Dal poděkování: 2 poděkování
Dostal poděkování: 24 poděkování

Re: Zapnutí zvlhčovače

Příspěvek od acerot »

Vždyť to v podstatě máš ;) Uděláš si ten template senzor, cos tu uvedl. Seznam mobilů budeš tedy udržovat jen v něm (na jednom místě). A ve všech automatizacích/šablonách, kde budeš stav "někdo doma" potřebovat, použiješ už jen ten senzor. V automatizacích třeba takto v trigru nebo v podmínce state nebo v podmínce template:

Kód: Vybrat vše

  trigger:
    - platform: state
      entity_id: somebody_home
      to: "on"

  condition:
    - condition: state
      entity_id: somebody_home
      state: "on"

  condition:
    - condition: template
      value_template: >
        {{ is_state('sensor.somebody_home', 'on') + ....možné další podmínky/výrazy.... }}
Dávám ti za pravdu, že dokumentace je někdy supr a někdy dá zabrat ji pochopit.

A doporučuju pročíst toto pojednání o rozdělení konfigurace YAML souborů do podsložek kvůli přehlednosti. viewtopic.php?t=557

Co přesně myslíš tím Bohužel jeho entity_id našeptávač nenabídne?

Zamčeno

Zpět na „Automatizace“