• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Hrátky s HDMI-CEC
#1
    K založení tématu Hrátky s HDMI-CEC mě přivedla potřeba mít možnost z Kodi aktivně ovládat zařízení připojená přes HDMI-CEC rozhraní.

Tu potřebu mám zejména proto, že chci ovládat zapínání a vypínání TV připojené ke Kodi boxu, na kterém je instalován nějaký *ELEC a kromě Kodi tam běží i další, na něm nezávislé, aplikace. Např. Tvheadend nebo Webgrab++. Měl jsem toto řešení v době, kdy jsem Kodi a ostatní zařízení ovládal přes DO Logitech Harmony One, a tam jsem si dokázal poměrně dobře poradit s tím, když se box spustil na základě požadavku zahájit nahrávání v Tvheadend a přitom nebylo třeba pouštět TV. A naopak, když jsem chtěl ukončit Kodi, ale stále ještě běželo nahrávání v Tvheadend nebo právě běželo grabování EPG aplikací Webgrab++. V takovém případě jsem stiskl tlačítko na DO, vypnula se televize, ale Kodi box běžel dál a vypnul se až tehdy, když skončilo nahrávání TV nebo grabování EPG.

Nyní, když používám pouze DO připojené k boxu s *ELEC, potřebuji něco podobného. Potíž je v tom, že pokud nastavím HDMI-CEC v Kodi tak, aby se TV zapínala spolu s boxem, tak pokaždé, když se například spustí automaticky nahrávání v Tvheadend, tzn. že se probudí box ze standby, zapne se i TV, což samozřejmě nechci. Zapnutí TV potřebuji provést až ve chvíli, kdy stisknu tlačítko POWER na DO. A naopak. Pokud běží Kodi a zároveň se nahrává nebo grabuje, chci aby se při stisku POWER na DO vypnula TV, ale box běžel dále a vypnul/uspal se, až když skončí nahrávání a grabování. Samozřejmě je tohle možné řešit tak, že bych si pořídil DO, které má jedno POWER tlačítko na box, tak druhé na TV. Takhle to ale řešit nechci. Chci zachovat logiku starého dobrého Logitech Harmony One. Pouze jedno POWER pro všechno. A taky nechci být při výběru DO omezen pouze na typ se dvěmi POWER tlačítky.

Řešeni existuje, i když není úplně jednoduché a nepatří k těm out-of-box. A když už to studuji a hraji si  stím, bude určitě užitečné s tím seznámit i komunitu. Chtěll bych se v tomto tématu této problematice věnovat a budu rád, pokud někdo má zkušenosti, aby se přidal.

Pro začátek tedy několik klíčových bodů popisující, jak mám v plánu postupovat a čím chci začít.

1. Většina toho, o čem budu psát, se týká *ELEC instalací. V mém případě hlavně CoreELEC, které je teď mým nejčastěji používaným systémem

2. Budeme potřebovat nějaké základní informace a znalosti o Kodi, Linux a také některých aplikacích, které jsou součástí *ELEC

3. Chceme-li dosáhnout toho, o čem píši v úvodu, je třeba v nastavení Kodi, případně systému, vypnout většinu automatických operací souvisejících s HDMI-CEC. Budeme totiž potřebovat zařízení připojení na HDMI-CEC ovládat na základě vlastních rozhodnutí, resp. skriptů, které budou spouštěny. Ať už automaticky nebo právě stiskem některých tlačítek na DO (třeba právě toho již zmiňovaného POWER tlačítka).

4. Pro začátek se budu věnovat Kodi built-in příkazům, které se týkají HDMI-CEC, v dalším kroku přejdu na, pro mnohé jistě známou, linux aplikaci cec-client.

6. Důležité asi také bude věnovat, se tématu HDMI-CEC s ohledem na výrobce a jejich jednotlivé modely TV. V tomto směru očekávám i některá omezení. Všichni asi tušíme nebo jsme se s tím setkali, že ne všichni výrobci se k problematice HDMI-CEC staví stejně a co platí o této kategorii funkcí na jedné TV nemusí platit na jiných. Proto bude určitě užitečné, pokud se v tomto tématu sejdou názory a zkušenosti s HDMI-CEC různých výrobců i jednotlivý modelů TV. A podobné to asi bude i co se týče HW boxů/PC, na kterých běží Kodi.

A nakonec tohoto úvodního příspěvku poznámka. Pamatujte, že jsem s poznáním této problematiky vždy jen o pár kroků před tím, co tu o ní zveřejňuji a že je také možné, že ke konečnému řešení nakonec 100% nedospěji. Mějte tedy se mnou trpělivost... Díky.

Doporučené odkazy:
Kodi Wiki List of built-in functions
 
Citovat
#2
Rezerva pro pozdější použití...
 
Citovat
#3
@JiRo: Předem díky za tvá polopaticky vysvětlená řešení (i ohledně skinu). Zatím sice z tohoto tématu nic nepotřebuji, ale co není teď, může být později.

V souvislosti s HDMI-CEC bych rád znal funkci v Kodi adapteru pod názvem "Device to also put in standby  mode" V Kodi análech jsem k tomu nic nenašel. Dokonce ani podle Googlu se o této funkci nemluví,vyjma jedné zmínky v OSMC.
Na rozdíl od tebe ovládám Kodi přes HDMI pomocí DO od TV a při aktivaci/deaktivaci té volby jsem  v chování boxu nebo TV nenašel rozdíl.
X96max plus 4/32 + CE 19.3 + Confluence / TV Samsung QE55Q6FNA
AVR Denon 1600H / Dali Spektor 5.1
Win10pro + Kodi19.2 Matrix
NAS Synology 215j 3TB Raid1
Router Turris 1.1
 
Citovat
#4
@jkmh: Při nastavování CEC jsem o tom také přemýšlel a myslím si bez ověření (nemám další připojená HDMI zařízení jako AV receiver atd.), že by to mohlo znamenat:
Přepnout i ostatní zařízení (nejen TV) do Standby.
To má samozřejmě účel, jen pokud ovládáme Kodi vlastním D.O. (ne od TV a podobně).
Kodi 19/18.x -LibreELEC 10/9.x -BerryBoot -RPi4/3/0/w -LinuxMint/W10/Android 11. Router 1Gbit, 2.4+5GHz
 
Citovat
#5
@meda: Možné to je. Ale mě to chodí i bez toho. Mám zapojení Box-AVR-TV. AVR se mi tak jako tak přepne do Standby, pokud TV vypnu. A AVR je pak jen signálově průchozí z HDMI In do HDMI Out. Pro obojí mám v AVR možnost volby.
X96max plus 4/32 + CE 19.3 + Confluence / TV Samsung QE55Q6FNA
AVR Denon 1600H / Dali Spektor 5.1
Win10pro + Kodi19.2 Matrix
NAS Synology 215j 3TB Raid1
Router Turris 1.1
 
Citovat
#6
@jkmh: Mám tu představu funkce opačně. Vypneš Kodi pomocí jeho D.O. a Kodi/zařízení odešle povel do AVR (ostatní zařízení) a do TV k uspání.
Ale také ovládám vše z TV a jsem s funkcí spokojený, Kodi/RPi4/3 nevypínám - asi usne.
Kodi 19/18.x -LibreELEC 10/9.x -BerryBoot -RPi4/3/0/w -LinuxMint/W10/Android 11. Router 1Gbit, 2.4+5GHz
 
Citovat
#7
@meda: Jasně. Uvidíme, zda k tomu dá komentář @JiRo: Ten to má určitě zmapovaný.  1
X96max plus 4/32 + CE 19.3 + Confluence / TV Samsung QE55Q6FNA
AVR Denon 1600H / Dali Spektor 5.1
Win10pro + Kodi19.2 Matrix
NAS Synology 215j 3TB Raid1
Router Turris 1.1
 
Citovat
#8
Tak vidím, že jsem si s tímhle tématem pěkně naběhl...  1

S "Device to also put in standby  mode" nastavením se také trápím. Nemyslím, že je o tak, jak píšete, ale 100% to zatím nemohu prokázat. Potvrzuje se to, co jsem čekal, že HDMI-CEC pokaždé funguje trochu jinak. A nejen co se týče typů/výrobců zařízení. Ale i v rámci jednoho zařízení:
  • Vypnul jsem v nastavení Kodi automatické zapínání TV podle stavu boxu a přesto 4x z 10 pokusů, když zapnu box, se zapne i TV. *)
  • zjistil jsem, že když vypnu v nastavení Kodi automatické zapínání TV, tak nefunguje Kodi built in's příkaz CECActivateSource. Příkaz CECStandby ale funguji i při tomto nastavení. A poslední built in's týkající se HDMI-CEC v Kodi, CECToggleState, ten pro jistotu funguje pouze tak, že dokáže TV vypnout, ale ne už zapnout a to při jakémkoliv nastaveni automatického zapínání TV v nstavení Kodi.
Nejistota při použití built in's příkazů HDMI-CEC mě tedy rovnou vedla k použití aplikace cec-client. Ta funguje přeci jen spolehlivěji, ale zase omezuje použití pouze na ty systémy, které ji mají nebo kam se dá nainstalovat (což jsou právě jen *ELEC a obecně Linux). Výsledkem tedy byly dva sh scripty, které umí vypnout a zapnout TV, což je přesně to, co potřebuji pro další pokusy. První, co jsem s nimi udělal bylo jejich namapování na dvě tlačítka DO. Prakticky to takhle používat určitě nebudu, slouží mi to jen pro ověření spolehlivé funcke zapínání a vypínání TV.

Aplikace cec-client přidává další bonus, dokáže on-line monitorovat to, co se na HDMI-CEC komunikaci děje. Až budu mít nějaká reprodukovatelné výsledky vedoucí k jasnějším závěrům, popíši to detailně. Předpokládám, že mi to snad umožní zjistit i to, co se děje při zapnutí nastavení "Device to also put in standby  mode". Zatím tedy trpělivost.

*) Moje hloupost, zapomněl jsem, že jsem měl aktivní probouzení TV pře WOL, po jeho zrušení už to funguje správně.
 
Citovat
#9
@JiRo: V pohodě. Rád jsem ti nasadil brouka do hlavy. Když už máš tak zmáknutý skinning, zmákneš i tohle. Mimochodem, ten český překlad té fce je asi dost nešťastný.
3
X96max plus 4/32 + CE 19.3 + Confluence / TV Samsung QE55Q6FNA
AVR Denon 1600H / Dali Spektor 5.1
Win10pro + Kodi19.2 Matrix
NAS Synology 215j 3TB Raid1
Router Turris 1.1
 
Citovat
#10
@jkmh Ano, některé překlady v Kodi jsou opravdu šílené.
 
Citovat
#11
Cec-client aplikace

Tak jak jsme slíbil, pár úvodních slov k této aplikaci. Do řady systémů se dá nainstalovat, tady doporučuji obligátní https://command-not-found.com/cec-client. Pro ty, kdo své Kodi provozuje na *ELEC aplikacích dobrá zpráva, aplikace už je součástí běžné instalace.

Cec-client umožňuje poměrně zásadně pracovat se zařízeními, které spolu v rámci dané konfigurace komunikují po HDMI-CEC sběrnici (propojení). Typicky jde tedy o dvě (tři) zařízení:
  • vlastní HW na které je instalováno Kodi
  • TV
  • zesilovač/receiver
Aplikace se jmenuje cec-client, v *ELEC je instalována do /usr/bin/, je tedy ze systému spustitelná jako cec-client. V jiných systémech to bude podobné. Samozřejmě se doporučuje, pokud bude aplikace spouštěná v rámci nějakých scriptů, spouštět ji raději s celou cestou, tedy /usr/bin/cec-client. Rozhodně tím nic nepokazíte a vyhnete se případným problémům.

Cec-client má samozřejmě svůj help,
Kód:
cec-client -h
má ale také seznam vnitřních příkazů a jejich parametrů, ke kterému se dostanete zadáním sekvence:
Kód:
 
 echo h | cec-client -s -d 1
Z uvedeného je zřejné, že se vnitřní příkazy aplikaci cec-client předávají na stdio ve formě textového řetězce.

Aktuální seznam vnitřních příkazů aplikace, které je instalována na CoreELEC 9.2.5, vypadá následovně:
Kód:
[tx] {bytes}              transfer bytes over the CEC line.
[txn] {bytes}             transfer bytes but don't wait for transmission ACK.
[on] {address}            power on the device with the given logical address.
[standby] {address}       put the device with the given address in standby mode.
[la] {logical address}    change the logical address of the CEC adapter.
[p] {device} {port}       change the HDMI port number of the CEC adapter.
[pa] {physical address}   change the physical address of the CEC adapter.
[as]                      make the CEC adapter the active source.
[is]                      mark the CEC adapter as inactive source.
[osd] {addr} {string}     set OSD message on the specified device.
[ver] {addr}              get the CEC version of the specified device.
[ven] {addr}              get the vendor ID of the specified device.
[lang] {addr}             get the menu language of the specified device.
[pow] {addr}              get the power status of the specified device.
[name] {addr}             get the OSD name of the specified device.
[poll] {addr}             poll the specified device.
[lad]                     lists active devices on the bus
[ad] {addr}               checks whether the specified device is active.
[at] {type}               checks whether the specified device type is active.
[sp] {addr}               makes the specified physical address active.
[spl] {addr}              makes the specified logical address active.
[volup]                   send a volume up command to the amp if present
[voldown]                 send a volume down command to the amp if present
[mute]                    send a mute/unmute command to the amp if present
[self]                    show the list of addresses controlled by libCEC
[scan]                    scan the CEC bus and display device info
[mon] {1|0}               enable or disable CEC bus monitoring.
[log] {1 - 31}            change the log level. see cectypes.h for values.
[ping]                    send a ping command to the CEC adapter.
[bl]                      to let the adapter enter the bootloader, to upgrade
                          the flash rom.
[r]                       reconnect to the CEC adapter.
[h] or [help]             show this help.
[q] or [quit]             to quit the CEC test client and switch off all
                          connected CEC devices.

V dané chvíli jsou pro nás klíčové příkazy:

scan - vypíší co na HDMI-CEC sběrnici spolu komunikuje a klíčové parametry všech zjištěných zařízení

Já například ve své testovací konfiguraci po zadání tohoto příkazu dostanu:
Kód:
STREAM:~ # echo "scan" | cec-client -s -d 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #0: TV
address:       0.0.0.0
active source: no
vendor:        Samsung
osd string:    TV
CEC version:   unknown
power status:  on
language:      ???


device #1: Recorder 1
address:       1.0.0.0
active source: no
vendor:        Pulse Eight
osd string:    CECTester
CEC version:   1.4
power status:  on
language:      eng


currently active source: unknown (-1)

standby, on - chci-li tedy z prostředí CE vypínat (uspávat) a zapínat TV, používám dvojici příkazů:
Kód:
echo 'standby 0' | cec-client -s -d 1
echo 'on 0' | /usr/bin/cec-client -s -d 1

Tohle se zdá být celkem jednoduché. Pravá alchymie ale přijde v případě, chcete-li jít ve strukturře příkazů ještě dále. Cec-client umožnuje nejen posílat na definované adresy výše uvedené příkazy, které jsou více či méně standardní pro všechny zařízení (pozor ale, ne všechny typy akceptují všechny příkazy), ale také řetězce byte, které pak jednotlivá zařízení interpretují různě. V tomto ohledu jsem zatím na začátku, ani ne tak pokusů, jako spíše hledání po internetu, kde se dá většina informací najít. Vždy je ale třeba ověřovat, protože (a to asi není v oblasti HDMI-CEC nic nového), každý výrobce se k uvedené problematice staví po svém. Tohle si ale nechám zase napříště.
 
Citovat
#12
Tak ja bych si dovolil taky prispet k HDMI-CEC, treba to nekdo vyuzitjete 
1] https://github.com/beam-kodi-addons-repo...er.control
Zapina nebo vypina TV podle screensaveru Kodi, mel jsem problem s tim, ze mi deti prehravani pauznuli nebo stopli, ale uz nevypnuli TV. Tak tohle po X minutach co se pustil sporic vypne TV.

2] po pouziti cec-clienta prestane fungovat ovladani pres HDMI-CEC v Kodi, je treba Kodi restartovat. Mozna by slo povolit a zakazat v periferiich HDMI-CEC ale to jsem zatim nezkousel protoze nevim jestli bych byl schopnej to zavolat pres JSON-RPC
 
Citovat
#13
@Beam ad. 1 Tuto funkce ale HDMI-CEC implementce v Kodi (tedy alespoň v CE 9.2.5) standardně má. Co tvůj addon přináší navíc?
 
Citovat
#14
@JiRo: Já tedy nevím o takové funkci ve standardním nastavení CEC adaptéru v Kodi. Kde tam je?
X96 Max+ (CE 19.3), Tanix TX92 (CE 9.2.8) | Yamaha RX-V475 | LG OLED65C8
 
Citovat
#15
@Saxel V nastavení CEC adapter, tedy Nastavení > System > Vstup > Periferie. U mě v CE 9.2.5, kde CEC adapter je verze libCEC 4.0.4 - firmware v5 jsou na to následující položky:
       
Já to tedy nepoužívám, teď jsme si to jenom na mém CE ověřil, že to funguje. Ale nedávno mě o to požádal jeden známý, přesně z těch samých důvodů o kterých psal @Beam. Proto jsem také na jeho popis addon-u reagoval.
 
Citovat
#16
@JiRo: Máš pravdu, je to tam. Té volby nastavení zpoždění jsem si nikdy nevšiml. Díky za tip a palec nahoru.
X96 Max+ (CE 19.3), Tanix TX92 (CE 9.2.8) | Yamaha RX-V475 | LG OLED65C8
 
Citovat
#17
@Saxel Teď jsem aktualizoval na poslední verzi CE 9.2.7 a tam už je to nastavení zpoždění přesunuto do houfu s ostatními nastaveními této skupiny.
 
Citovat
#18
@JiRo: tak musim se priznat, ze mi taky tohle nastaveni uniklo, mozna jeste nebylo tak jsem si udelal svoje.

A pak jsem mel problem, ze pres CECStandby() mi TV vypnout nesla a pres jo cec-clienta jo, ted ji vypinam pres API televize ale zas jen kdyz na TV nebezi treba Netflix/HBO/Youtube..

Ale ano, s timhle nastavenim v Kodi uz tak moc potreba neni.
 
Citovat
#19
@Beam Jo, je to možné, tedy skoro jisté. Už jen to, že tam např. to zpoždění vypnutí TV evidentně dodělávali později, když bylo ve starších verzích nastavení úplně jinde, než ostatní parametry.
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)