TV program v Home Assistant. Integrujeme EPG data z Linux SAT Enigma2 set-top boxu VU+ nebo webu

Máte set-top box, v něm EPG, k tomu Android / iOS aplikaci a občas i tištěný TV program, no pořad či film který chcete vidět né a né trefit? Rádi se podívate na něco zajímavého, no neradi (nebo vůbec) listujete v televizním programu, aby jste nakonec zjistili, že premiéra i poslední repríza pořadu již proběhla..

Existuje jednoduché řešení. Každý linuxový set-top box s LAN portem (DVB-S, DVB-C a DVB-T), linuxový televizní set-top box či linuxový IPTV přijímač umí pracovat s EPG. A obvykle má i API.

Přítomnost API na svém zařízení zjistíte zavoláním getallservices v prohlížeči (Firefox, Chrome, Opera, Edge, Bromite, Samsung, Safari..) Pro účel článku testováno na VU+ Zero 4K + OpenPLI 7.3 / 8.0.

http://ip_adresa_set_top_boxu/web/getallservices?sRef= 

V případě, že uvidíte XML výstup..

TV program

..jedná se o program nebo seznam stanic..

<e2servicelistrecursive>
<e2bouquet>
<e2servicereference>
1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet
</e2servicereference>
<e2servicename>Favourites (TV)</e2servicename>
<e2servicelist>
<e2service>
<e2servicereference>1:64:0:0:0:0:0:0:0:0::News</e2servicereference>
<e2servicename>News</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:1:B60:14:46:E080000:0:0:0:</e2servicereference>
<e2servicename>AlJazeera English</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:64:3:0:0:0:0:0:0:0::Šeské</e2servicereference>
<e2servicename>CZ</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:19:791A:2C6:600:E080000:0:0:0:</e2servicereference>
<e2servicename>CT: D/Art HD</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:19:3FC:AF1:BB:E080000:0:0:0:</e2servicereference>
<e2servicename>CT 1 HD</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:19:7DB:AF2:BB:E080000:0:0:0:</e2servicereference>
<e2servicename>CT 2 HD</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:1:FB8:AF4:BB:E080000:0:0:0:</e2servicereference>
<e2servicename>CT 24 HD</e2servicename>
</e2service>
<e2service>
<e2servicereference>1:0:19:7924:2C6:600:E080000:0:0:0:</e2servicereference>
<e2servicename>CT Sport HD</e2servicename>
</e2service>
...

(po zadání loginu a hesla = dle konfigurace vašeho set-top boxu) můžete integrovat. Pomocí volání getallservices jsme získali referenční čísla služeb (programů). Ty použijeme v dotazu a výstup (název, čas, událost, popis) integrujeme do Home Assistant, dle vlastní chuti, kritéria pořadí, datumu, času nebo vyhledaného výrazu.

Stanice kde beží obvykle nejvíc premiér je HBO – v příkladu proto použijeme servicereference HBO, to jest: 1:0:19:7E1:AF2:BB:E080000:0:0:0:

Zavoláme výpis přehledu pořadů pro HBO

http://ip_adresa_set_top_boxu/web/epgservice?sRef=1:0:19:7E1:AF2:BB:E080000:0:0:0:

a získáme tak aktuálně načtený výpis pořadů na kanálu HBO

<e2eventlist>
<e2event>
<e2eventid>10243</e2eventid>
<e2eventstart>1614954300</e2eventstart>
<e2eventduration>6600</e2eventduration>
<e2eventcurrenttime>1614954456</e2eventcurrenttime>
<e2eventtitle>Popelka</e2eventtitle>
<e2eventdescription/>
<e2eventdescriptionextended/>
<e2eventservicereference>1:0:19:7E1:AF2:BB:E080000:0:0:0:</e2eventservicereference>
<e2eventservicename>HBO HD</e2eventservicename>
<e2eventgenre id="85">děti/mládež: karikatury/loutky</e2eventgenre>
</e2event>
<e2event>
<e2eventid>10244</e2eventid>
<e2eventstart>1614960900</e2eventstart>
<e2eventduration>3000</e2eventduration>
<e2eventcurrenttime>1614954456</e2eventcurrenttime>
<e2eventtitle>Čtyři svatby a jeden pohřeb (9)</e2eventtitle>
<e2eventdescription/>
<e2eventdescriptionextended/>
<e2eventservicereference>1:0:19:7E1:AF2:BB:E080000:0:0:0:</e2eventservicereference>
<e2eventservicename>HBO HD</e2eventservicename>
<e2eventgenre id="20">film/drama: komedie</e2eventgenre>
</e2event>
<e2event>
<e2eventid>10245</e2eventid>
<e2eventstart>1614963900</e2eventstart>
<e2eventduration>6900</e2eventduration>
<e2eventcurrenttime>1614954456</e2eventcurrenttime>
<e2eventtitle>Krycí jméno U.N.C.L.E</e2eventtitle>
<e2eventdescription/>
<e2eventdescriptionextended/>
<e2eventservicereference>1:0:19:7E1:AF2:BB:E080000:0:0:0:</e2eventservicereference>
<e2eventservicename>HBO HD</e2eventservicename>
<e2eventgenre id="16">film/drama: film/drama (obecně)</e2eventgenre>
</e2event>
...

Pomocí Unix Timestamp konverteru přeložíme obsah prvního a posledního tagu e2eventstart. Ten sice obsahuje čas začátku pořadu, no v linuxovém formátu 1614960900 namísto Pátek 5. března 2021 16:15:00. Tímto překladem (pokud to tedy někdo neumí zpaměti :) ověříme, že se skutečné jedná o aktuální výpis pro daný den. Ilustračně

01. 03. 2021 00:00 je 1614556800
05. 03. 2021 00:00 je 1614902400
06. 03. 2021 00:00 je 1614988800 = co den + 86400 sekund

Vše je v pořádku.. Vytvoříme prostý Home Assistant scrape senzor z prvního řádku (index 0) výpisu pořadů aka Právě beží..

  - platform: scrape
    resource: 'http://ip_adresa_set_top_boxu/web/epgservice?sRef=1:0:19:7E1:AF2:BB:E080000:0:0:0:'
    name: tv_hbo_prave_bezi
    select: 'e2eventtitle'
    index: 0
    scan_interval: 00:10:00
    authentication: basic
    username: root
    password: heslo

Restartujeme Home Assistant. Po restartu máme k dispozici nový senzor. Zde dle preferencí, můžeme volit od prostého zobrazení názvu pořadu v karte třeba „Právě běží“ na dashboardu. Nebo senzor dále upravit (pomocí vyhledávání v textu), třeba pro opkované hledání konkrétního pořadu, kdy po jeho nalezení výsledek s datem a časem zobrazíme na libovolném místě (Home Assistent kartě) / zařízení (panelu, počítači, telefonu).

Možnost získat XML EPG data bez set-top box API

se jmenuje enigma2-plugin-extensions-epgexport. Tento plugin jsem kdysi kdesi zahlédl ve verzi 1.0-1 a zběžně jej otestoval. Umí export EPG do XML souboru, která následně publikuje pomocí www na portu 4444. Zpracování dat je stejné, místo protokolu www (prohlížeče) Home Assistant načte exportované data ze /složka/soubor.epg pomocí (třeba) wget. V navazujícím článku se k reforku enigma2-plugin-extensions-epgexport verze 1.4-1 na OpenPli 8 krátce vrátim.

Možnost získat EPG data bez XML

se jmenuje „načtu data z externí webové stránky“. Žel zde, pokud vím, neexistuje zatím žádná webová stránka která poskytuje neplacený přístup k přehledu programů v XML či JSON. Když se zběžně podíváte na zdrojové kódy webů zavedených poskytovatelů přehledů TV programů (či televizí), napadne vás, že spíš usilují o to, aby TV program nešlo číst (lépe = strojově) jinak než v počítači s myší v ruce :) Jako nejvíc uživatelsky přívětivý se v tomto směru jeví přehled TV programů zpravodajského webu aktuality.sk.

Kde se, s ohledem na brutální objem (9) sledovacích kódů v úvodní stránce plátku a neméně strašidelný (3) počet slídilů na subdoméne tv-program.aktuality.sk, ale nelze domnívat, že tu jde o jakýsi altruismus :)

Home Assistant HBO senzor

Pokusíme se vytvořit dva jednoduché senzory pro HBO s názvem Dnes a Zítra večer. Pomocí HA scrape a dat z webové stránky.

  - platform: scrape
    resource: https://tv-program.aktuality.sk/stanica/hbo/
    name: tv_hbo_dnes_vecer
    select: 'a'
    index: 121
    scan_interval: 06:00:00

  - platform: scrape
    resource: https://tv-program.aktuality.sk/stanica/hbo/
    name: tv_hbo_zajtra_vecer
    select: 'a'
    index: 139
    scan_interval: 06:00:00

Vytvoření karty v Lovelace klikem na + je jednoduché. Pokud další den vaše Home Assistant dashboard karta ukazuje stejné pořady jako TV program načtený v prohlížeči, v scrape použitý select a index pro sečtené pořadí 121 a 139 je s nejvetší pravděpodobností správne. To jest 123í tag <a je vyhrazený na HBO webovém programu, pro pořad o 20:00 hod, co den. To jest, lze jej používat pro náš scrape senzor.

Pokud se vám (HBO na rozdíl od HBO2 a HBO3 má pravidelně večerní film o 20:00 hod) načte další den (nebo další další den) pořad jiný (před nebo po 20:00 hod) = server načítá a vkládá pořady z databáze dle pořadí (počtu) a radí je dynamicky (automaticky) za sebou. V tomto případě je potřeba najít jiný způsob pomocí jiné třidy. Počítání tříd (tagů) v zdrojovém kódu webové stránky je popsáno v článku Devízové kurzy v HA Lovelace.

Lovelace dashboard card HBO

Výsledek může vypad nějak takhle

TV Program Home Assistant
TV Program Home Assistant

Možnost získat EPG data pomocí čtečky RSS / Atom / JSON feed

I když by tato možnost byla ideální (viz článek Integrujeme feed do Home Assistant pomocí TinyTinyRSS s oznámením na Telegram) zatím neexistuje :/

Automatizace

Voláním přes web lze set-top box ovládat s wget. URL pro nastavení časovače pomocí eventid.

 http://IP/web/timeraddbyeventid?sRef=1:0:1:7926:A:70:1680000:0:0:0:&eventid=53779&dirname=/hdd/movie/

Užitečné

HA command_line a shell_command.
Domovská stránka hassio.

ICTIS.CZ