Jak číst data z webu a uložit je do Home Assistant

Do Home Assistant můžeme jako senzor připojit i obsah webové stránky. Můžeme na ní analyzovat html kód a získat tak jen konkrétní část obsahu. Home Assistant díky tomu získá jen údaj, se kterým může dále pracovat a uložit ho. Slouží k tomu integrace scrape. Získání dat z webových stránek jsem zkoušel těmito 2 způsoby.

Podle pořadí HTML prvku

První možností, jak požadovaná data získat, je podle pořadí HTML prvku. Jako příklad si vezmeme stránku ČHMI, který dává veřejně k dispozici informace o hladině spodních vod nebo výšce hladiny a průtoku některých potoků a řek.

  1. V prohlížeči otevřeme například Detail objektu podzemních vod Zbraslav.
  2. Zobrazíme si HTML kód stránky (nejčastěji pomocí CTRL + U).
  3. V kódu najdeme požadovaný údaj. V našem příkladu je to řádek 227, který obsahuje kód <td style=“text-align:center;“>192.57</td>.
Příklad HMTL kódu pro výběr podle pořadí HTML prvku
  1. HTML prvek je buňka tabulky <td>, takže v našem YAML kódu zapíšeme select: ‚td‘.
  2. Nyní spočítáme pořadí značky <td> v kódu. Nebudu tajit, že se to špatně počítá. Dobrý způsob je pokus – omyl. Pořadí elementu v kódu zapíšeme jako index: 27.
  3. Kód níže uložíme do souboru configuration.yaml a restartujeme Home Assistant.
  4. Zadaný senzor vidíme jako entitu sensor.podzemni_voda_zbraslav

Obsah souboru configuration.yaml

sensor:
  - platform: scrape
    resource: http://hydro.chmi.cz/hpps/hpps_pzv_detail.php?seq=168521
    name: podzemni_voda_zbraslav
    select: 'td'
    index: 27
    unit_of_measurement: 'm n. m.'

Podle názvu HTML prvku včetně vybrání části textu

Druhou možností, kterou jsem zkoušel, je nalezení informací podle id nebo třídy HTML prvku a následné vyříznutí části textu. Ať se nedržíme při zemi, zajímavou integrací by mohl být aktuální počet satelitů ve vesmíru. Žádné okamžitě použitelné číslo jsem nenašel, takže se spokojím s článkem UCS Satellite Database, který vypadá, že je pravidelně aktualizovaný.

  1. V prohlížeči otevřeme článek UCS Satellite Database.
  2. Zobrazíme si HTML kód stránky (nejčastěji pomocí CTRL + U).
  3. V kódu najdeme požadovaný údaj. V našem příkladu je to řádek 1053, který obsahuje kód <p class=“page-subtitle“>In-depth details on the 2,666 satellites …
Příklad HMTL kódu pro výběr podle třídy HTML prvku
  1. HTML prvek odstavec <p> má třídu „page-subtitle“, takže v našem YAML kódu zapíšeme select: „.page-subtitle“.
  2. Nyní rozdělíme obsah odstavce pomocí mezery na jednotlivá slova a vybereme čtvrté slovo ve větě. V YAML kódu napíšeme value_template: ‚{{ value.split(“ „)[4] }}‘
  3. Kód níže uložíme do souboru configuration.yaml a restartujeme Home Assistant.
  4. Zadaný senzor vidíme jako entitu sensor.satellite_count
sensor:
  - platform: scrape
    resource: https://www.ucsusa.org/resources/satellite-database
    name: Satellite_count
    select: ".page-subtitle"
    value_template: '{{ value.split(" ")[4] }}'