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).
Obsah
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).

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)

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.

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.