Aktuální devizové (valutové) kurzy v Home Assistant Lovelace (Kalkih Mini Graph) cards

V článku si ukážeme jednoduchý návod na vytvoření senzoru pro parsování devízových kurzů z webu. První příklad funguje díky integraci (platformě) scrape (odkaz na man). V druhém příkladu použijeme platformu restful (odkaz na man).

Home Assistant Scrape

Jednoduché a srozumitelně vysvětlení toho jak do Home Assistant naparsovat kýžena data (v našem případě číslo) z webu, najdete na blogu Táta Geek, konkrétně v článku Jak číst data z webu a uložit je do Home Assistant. K návodu bych pouze doplnil, že třeba prohlížeč Firefox v okně se zobrazeným zdrojovým kódem stránky (CTRL+U) spočítá pořadí hledaného znaku pomocí funkce vyhledávaní v textu (CTRL+F). Počítáme v tabulce, na stránce se kterou pracujeme je td zobrazeno 331x a <td 165x.

Chceme naparsovat devízový kurz zloteho, takže: V okně Firefoxu (se zdrojovým kódem) nejdříve do vyhledávače napíšeme polsk načež se stránka odscroluje do místa se zadaným výrazem a ten označí (viz screenshot). Následně do vyhledávacího okna napíšeme <td načež vyhledávač označí nejbližší třídu td za středem aktuálního zobrazení a (vpravo dolu na liště) ukáže její pořadí v textu, to jest 117. Klikem na šipku u vyhledávacího okna (vlevo dolu) se doklikáme (3x) až na řádek 120, ve kterém je uvedený polský kurz. Scrape jsem nestudoval ale pravděpodobně umí začátek a konec řádku třídy a řídí se dle konce řádku. Když jsem použil jako index 120, Home Assistant naparsoval místo čísla 5,732 slovo Rumunsko. To je na řádku z pohledu třídy td za číslem 5,732. Jako index tedy použuijeme poslední řádek před samotným řádkem. To jest číslo 119 (stodevatenáctý tag <td který je na řádku počítadla 562).

Home Assistant scrape index
Firefox dolujeme pro Home Assistant scrape index

Na screenshotu zdrojového kódu stránky (CTRL+U) ČNB je otevřený vyhledávací dialog (CTRL+F) s označenou třídou (šedě) a zobrazeným pořadím (dolu v pravo) viz 120 z 165 výskytů. Podstatně lehčí výběr selektoru umí třeba Vivaldi Developers Tools.

Senzor Integrace scrape

Kód senzoru pro zápis do konfiguračního sensor.yaml souboru

  - platform: scrape
    resource: https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/
    name: currency_pln
    select: 'td'
    index: 119
    scan_interval: '08:00:00'

V hore uvedeném příkladu zápisu je pro senzory vytvořen sólo soubor sensors.yaml (né configuration.yaml). Proto není uvedena scrape entita nadepsána rodičem sensor.

V případě, že vkládate zápis pro senzor do configuration.yaml a jedná se o první senzor, zápis má vypadat takto:

sensor:
  - platform: scrape
    resource: https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/
    name: currency_pln
    select: 'td'
    index: 119
    scan_interval: '08:00:00'

V případ, že vkládate zápis pro senzor do configuration.yaml a nejdená se o váš první senzor, nový senzor zapíšeme pod již existujíci senzory a zápis bude vypadat takto:

sensor:
  - platform: mqtt
    state_topic: "home/kuchyna/teplota"
    name: "MQTT Sensor 5"
  - platform: rest
    resource: http://192.168.0.12/ENDPOINT
    name: "Weather"
  - platform: scrape
    resource: https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/
    name: currency_pln
    select: 'td'
    index: 119
    scan_interval: '08:00:00'

Pořadí senzorů lze samozřejmě měnit, důležité je pouze dodržet validní zápis (platné proměnné, odřádkování). V jednom konfiguračním souboru je vždy pouze jeden rodič – to znamená klidně 30 senzorů ale rodič (to první slovo senzor v příkladu) je pouze na začátku. Jak bylo uvedeno, pokud je použit extra soubor sensor.yaml rodičem je název souboru a tudíž se již do souboru samotného nezapisuje vůbec.

Co se načítání dat týče, nezapomínejte prosím na fakt, že se jedná o neplacený přístup k webu (i když by se i o tom dalo diskutovat :) a ani na fakt, že počítač či mobil má 99% lidí. Interval aktualizace proto nastavíme na efektívní čti rozumnou hodnotu. V našem příkladě je interval nastavený na 8 hodin.

Senzor Integrace Restful

V dalším příkladu parsujeme data (cenu Eura v České koruně) z moderního webu Evropské centrální banky (exchangerates.eu). Umí výstup přímo do JSON. Tento web z podstaty věci zobrazuje devízové kurzy odvozené (pouze) od Eura. JSON je prima, stačí jednoduchá šablona (value_template).

  - platform: rest
    name: currency_czk
    resource: https://api.exchangeratesapi.io/latest?symbols=CZK
    value_template: "{{ value_json['rates'].CZK }}"
    scan_interval: '08:00:00'

Pokud uvidíte v již funčkní integraci chybné údaje kurzů měn, nelekejte se. Nejedná se vlastně o chybu. Pokud nepoužívaté například Revolut, „venku“ se podíváte jednou ročně a nakupujete v bance, pak vám zajisté mohl uniknout fakt, že cena za nákup cizí měny na dovolenou je klidně i 1000 Kč :] Reálně o korunu nižší kurz Eura, Dolaru či Libry, než jaký denně vídáte je smutným faktem.

Lovelace nebo Mini Graph karta

Pokud nepoužijete naparsovaný kurz(y) výhradně pro automatizaci a třeba chcete devízové kurz(y) zobrazit na vašem Home Assistant panelu existují dvě varianty. Jedna základní, bez možnosti změny velikosti písma ale bohatší o možnost zobrazení času poslední aktualizace (Lovelace)

Home Assistant Lovelace
Home Assistant panel Entita

a jedna eyecandy (Mini Graph Card). S možností konfigurovat velikost i barvu písma, vertikální či horizontální grafy a mnoho dalších vychytávek.

Vertical stack Home Assistant
Verical stack HA podobné jako Kalkih Mini Graph karta

Fígle (křížové kurzy) umí money.js v kombinaci s openexchangerates (viz HA integrace). Mimo dolar je ale pouze s placeným přístupem.

Užitečné

Domovská stránka Home Assistant.
Home Assistant MQTT + Zigbee.

ICTIS.CZ