Dost informací najdeme v dokumentaci v sekci "TIME":
https://www.home-assistant.io/docs/conf ... emplating/
Posledních pár hodin jsem se ztrácel a nadával proč mi nic nefunguje.
Takže datum a čas můžeme mít buď jako
- int nebo float nebo i string - počet sekund od 1.1.1970 UTC - což je výhodné pro výpočty intervalů, jednoduchým provnáním <> zjistíme jestli je událost v minulosti nebo budoucnosti apod.
z některých zdrojů to může přijít i jako počet ms (tedy pak stačí před použitím dělit 1000) A pro případnou kontrolu jestli to číslo opravdu je ten určitý datum/čas máme i online nástroj: https://www.epochconverter.com/
- nějaký string YYY-MM-DD HH:MM apod. Pokud je v nějakém nestandartním tvaru tak - než nějaké přehazování řetězení s částni stringu - je asi nejjednodužší použít timestamp_custom viz odkaz na docs nahoře
- datetime objekt - což je věc která jako jediná umožňuje používat metody objektu - třeba pro den v týdnu .weekday()
více též v nahoře odkazované dokumentaci a v https://docs.python.org/3.8/library/dat ... e.datetime
Největší zásek je právě s tím že když to vidíme zobrazené jako třeba 2021-08-14 23:36:53 tak z toho opravdu není poznat jestli je to interně int, float, str, nebo objekt.
Takže jsem udělal malý taháček:
Následující si nakopírujte do vývojářské nástroje, šablony. Je to samodokumentující.
Kód: Vybrat vše
{% set nyni=(now().timestamp()) %} nyni> {{ nyni }}
------------------ slunce vyjde v:
{% set vychod = as_timestamp(strptime(state_attr("sun.sun", "next_rising"), "")) %} # vychod je ted v epoch (sekund od 1.1.1970)
vychod> {{ vychod }}
--------------------
tedy vyjde za
{{ (vychod | int) - (nyni | int) }} sekund
{{ ((vychod | int) - (nyni | int)) /60 }} minut
{{ ((vychod | int) - (nyni | int)) /3600 }} hodin
-------------------------------
vychod je cislo {{ vychod }} (epoch)
udelame z nej string obsahujici datum {{vychod | timestamp_local}}
a z nej datetime objekt {{ as_datetime(vychod | timestamp_local) }}
se kterym uz muzeme pouzivat datetime metody a atributy
{{ (as_datetime(vychod | timestamp_local)).weekday() }}
a pro vystup pro zobrazeni z nej udelame iso string aby to zkousl i Apple :)
{{ (as_datetime(vychod | timestamp_local)).isoformat() }}
a nejake hratky:
{% if now().weekday() < 5 %}
ne
{%- else -%}
ano
{%- endif %}
now() {{ now() }}
now().weekday() {{ now().weekday() }}
{{ now() + timedelta( hours = 23, minutes = 17 ) }}
{% if ((now() - timedelta(days=3)).weekday()) < 5 %}
ne
{%- else -%}
ano
{%- endif %}