• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Zdravím hosta! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Vychytávky
#1
Téma pro ty, kteří si vytvořili nebo někde sehnali nějaká drobná vylepšení LibreELEC a chtějí se o ně podělit s ostatními. Téma je určeno především "hračičkům", kteří mají potřebu si svou instalaci neustále vylepšovat. Velmi pravděpodobně to, co bude uvedeno jako vychytávka pro LibreELEC, bude fungovat i pro OpenELEC a z větší či menší části i pro ostatní typy instalací Kodi. Použití toho, co zde bude dále uvedeno, je na vlastní odpovědnost. Předpokladem pro to je alespoň základní znalost a pochopení toho, co bude publikováno.

Notifikace v Kodi

Pokud si svou instalaci vylepšujete nějakými vlastními aplikacemi nebo scripty, určitě jste občas narazili na potřebu dát někdy vědět obyčejnému uživateli Kodi, co se právě ve vaší aplikaci nebo scriptu děje. Vychytávka umožňuje ze systému (a tedy i aplikace nebo scriptu), poslat do Kodi standardní notifikaci. Využívá k tomu dva základní principy:

Aplikaci kodi-send, která umožňuje poslat ze systému do Kodi příkaz
Vnitřní funkci Notification, která zobrazí standardní notifikaci Kodi

Formát systémového příkazu je následující:

kodi-send --action="Notification("Start","WebGrab+Plus",5000,/storage/.kodi/addons/service.webgrabplus/icon.png)"

Obecný tvar funkce Notification je následujcíí:

Notification(header,message[,time,image])

kde

header - první řádek textu v notifikaci (větší font)
message - druhý řádek textu v notifikaci (menší font)
time - doba po kterou se notifikace zobrazí [msec], nepovinný parametr
image - obrázek (icona), která se zobrazí v notifikaci, nepovinný parametr

Já uvedenou vychytávku používám v několika případech, např.:

Informace o zadání příkazu k restartu Kodi z DO (dálkového ovladače). Tlačítkem DO se spouští script (mimo Kodi, stisk tlačítka je zachycen přímo v systému), který restartuje Kodi. Ve scriptu je nejdříve odeslána notifikace a teprve pak je zadán příkaz k "tvrdému" restartu Kodi.
   

Oznámení o startu a ukončení grabování EPG aplikací WebGrab+Plus (WG++). Do scriptu, který je součástí této aplikace, jsou vloženy dvě notifikace, jedna na začátek, druhá na konec scriptu.
   

 
Citovat
#2
Přenos informace do Kodi

Je variantou Notifikace v Kodi, s tím rozdílem, že do Kodi předává trvalou informaci, která pak může být využita například k trvalému zobrazení stavu nějaké aplikace. Používá pro to proměnné skinu. Pravda, není to právě typické (a asi ani správné) použití, ale pro rychlé a efektní řešení je použitelné. Poprvé jsou ho použil pro to, abych si v Kodi indikoval běh aplikace WebGrab+Plus.

Řešení využívá možnost nastavení uživatelské proměnné skinu. Deklarace proměnné se provede jejím první použitím (nastavením její hodnoty). Existují různé typy porměnných, já pro tento účel využívám proměnou typu řetězec.¨

Edit 2017-08-05 Upozornění: Nastavení proměnné skinu vyhodnocuje Kodi jako aktivitu uživatele (stejně jako stisk klávesy na klávesnici, DO nebo pohyb myši), se všemi důeldky. Např. se nespustí screen saver nebo některé funkce, jejíž chování je závislé na "neaktivitě uživatele", nebudou při použití této vychytávky fungovat správně.

Nastavení (případně deklarace) hodnoty proměnné:

Skin.SetString(string[,value])

kde

string - identifikace proměnné
value - hodnota (řetězec znaků, může být i prázdný) proměnné.

Pozn. value je obecně nepovinný parametr, v tomto případě je ho ale třeba vždy zadat!

Pokud tedy chcete zadat hodnotu proměnné z nějakého scriptu nebo aplikace v systému, je třeba to vložit do známého příkazu kodi-send:

kodi-send --action="Skin.SetString(WebGrabPlus,EPG)" - tento příkaz zapíše do proměnné WebGrabPlus řetězec EPG
kodi-send --action="Skin.SetString(WebGrabPlus,)" - tento příkaz zapíše  do proměnné WebGrabPlus prázdný řetězec

Oba příklady jsem použil ve scriptu pro spuštění grabování EPG (aplikace WebGrab+Plus) - první na začátku scriptu, druhý na jeho konci. Proměnná WebGrabPlus se pak využívá ve skinu, pro zobrazení stavu grabování EPG. Do příslušného místa definice skinu (zde pro skin Eustary.Easy) je vložena sekvence:

Kód:
<control type="label">
    <height>50</height>
    <width>auto</width>
    <aligny>center</aligny>
    <font>font20_title</font>
    <label>  $INFO[Skin.String(WebGrabPlus)] </label>
    <visible>System.HasAddon(service.webgrabplus) + !String.IsEmpty(Skin.String(WebGrabPlus))</visible>
</control>

Příznak se zobrazuje v záhlaví titulní strany (v právém horním rohu, pod časem), běží-li WebGrab+plus, zobrazí se text EPG (resp. text, který obsahuje proměnná WebGrabPlus), neběží-li, nezobrazuje se nic.
   

Omezení
  • využití této vychytávky vyžaduje možnost a schopnost úpravy skinu. Bez toho je její použití k ničemu.
  • funkce využívá vlastnosti skin enginu Kodi, která je ale primárně určena pro jiné účely. Po každé změně hodnoty proměnné, je tato změna zapsána do souboru settings.xml aktuálního skinu. Dojde-li tedy například k netypickému způsobu ukončení scriptu nebo aplikace, kde jsou uvedené příkazy použity, a provede se tedy pouze ten první (zapsání řetězce) a ne ten druhý (zapsání prázdného řetězce) příkaz, zůstane v proměnné trvale zapsána hodnota řetězce, a to i po restartu Kodi.

 
Citovat
#3
Pokud se za vychytávku považuje i rozšíření v prohlížeči Chrome,kterým ovládám RPI,tak já používám Kassi
[Only registered and activated users can see links Click here to register]
Jde tím kompletně ovládat Kodi,tedy restart,vypnutí,je možnost používání dialogového okna-je tam komletní remote control.
Pokud uživatel pracuje v RPI pomocí DO a je potřeba zadat text,tak se v prohlížeči v PC rovnou otevře okno,kde se zapisuje text.To je velmi praktické.
RPI3,LibreELEC 8.0.2MR,Sandisk 32Gb
 
Citovat
#4
Rychlé přepnutí audio výstupu

Volba audio výstupu Kodi se provádí v Nastavení > Systém > Zvuk > Výstupní zvukové zařízení
   

Někdy je ale potřeba přepínat audio výstupy nějak jednodušeji a rychleji. Narazil jsem na to například při potřebě přepínat výstup mezi TV (HDMI) a Bluetooth sluchátky, která jsou připojena přímo k LibreELEC systému. Pátral jsme po možnosti jaké Kodi nabízí a pro současnou verzi (17.*) našel jen jednu možnost, a tou je využití příkazů rozhraní JSON-RPC, viz [Only registered and activated users can see links Click here to register].

Přepnutí se tedy dá provést pouze ze systému, což ale nemusí být žádné omezení. Po vytvoření sh scriptů pro přepnutí na vybrané výstupy je možné tyto scripty pak buď spouštět přímo z Kodi nebo je například přímo přiřadit tlačítkům DO.

Vlastní příkaz pro LibreELEC vypadá následovně:

curl -v -H "Content-type: application/json" -u "jméno:heslo" -X POST -d '{"jsonrpc":"2.0","method":"Settings.SetSettingValue", "params":{"setting":"audiooutput.audiodevice","value":"název_audio_výstupu"},"id":1}' http://localhost:port/jsonrpc

kde

port - Port pro ovládání (zadává se v Nastavení -> Služby)
jméno - Uživatelské jméno pro ovládání (zadává se v Nastavení -> Služby)
heslo - Heslo pro ovládání (zadává se v Nastavení -> Služby)
název_audio_výstupu - skutečné označení audio výstupu - nejlépe ho najdete tak, že si v Kodi příslušný výstup nastavíte, pak Kodi restartujete, nastavení se zapíše do guisettings.xml, kde pak přesný řetězec se skutečným označením audio výstupu najdete mezi tagy <audiodevice> a </audiodevice>

Ještě poznámka k názvu audio výstupu. To co Kodi ukazuje v Nastavení > Systém > Zvuk > Výstupní zvukové zařízení, nemusí být ten správný řetězec, na který správně zareaguje příkaz JSON-RPC. Např. v mém LibreELEC, který běží na Asrock Beebox, je v Kodi název zařízení ALSA: HDA Intel PCH, SAM T24E390 on HDMI #0, ale v guisettings.xml je uloženo ALSA:hdmi:CARD=PCH,DEV=0.

 
Citovat
#5
Funkce tlačítek DO mimo Kodi

Někdy se hodí mít možnost přiřadit tačítkům DO nějakou funkci, které se provádí mimo Kodi. Např. spuštění nějakého scriptu nebo systémového příkazu. Ano, je to možné provést i prostřednictvím Kodi příkazů. Je jich celá řada, které aktivují nějaké systémové funkce (Reset, Reboot, Powerdowm, Shutdown) nebo pomocí Kodi příkazu System.Exec, pomocí kterého je možné vykonat libovolný příkaz shellu. Všechny tyto funkce ale předpokládají jedno, že Kodi běží a funguje tak, jak má. Velmi často je ale třeba vykonat takový příkaz právě v situaci, kdy Kodi není úplně v pořádku. Platí to zejména v případech, kdy používáme neoficiální verze nebo night build-y nebo kdy se pokoušíme z Kodi vymámit i takové funkce, s kterými jeho autoři příliš nepočítali. Pak se například možnost, z DO restartovat Kodi nebo dokonce provést reboot celého systému, hodí velice často.

Uvedený postup popisuje, jak je možné zachytit stisk tlačítka DO komunikujícího přes IR port ještě na úrovni systému a na jeho základě vykonat příkaz.

Tlačítka, která chceme zachytit definujeme v souboru .lircrc:

Obsah souboru .lircrc, doporučuje se uložení v /storage/.config:
Kód:
begin
 prog = irexec
 button = KEY_ZOOM
 config = /storage/.config/restart.sh
end
begin
 prog = irexec
 button = KEY_LANGUAGE
 config = /storage/.config/reboot.sh
end

První sekvence zachytí stisk tlačítka s kódem KEY_ZOOM a spustí příkaz v řádku config =, v daném případě tedy script restart.sh. Druhá pak podobně, po stisku tlačítka s kódem KEY_LANGUAGE spustí script reboot.sh. Kódy tlačítek jsou dostupné v dokumentace k DO MCE, případně je možné je v systému zjistit pomocí úlohy irw, která vypisuje kódy stisknutých tlačítek. Pozn. jméno a umístěný souboru .lircrc může být samozřejmě libovolné, stejně jako jména scriptů. Místo scriptů může být samozřejmě přímo systémový příkaz.

Aby se zachycení tlačítek aktivovalo, je třeba při spuštění systému spustit úlohu irexec s parametrem jména a cesty souboru .lircrc. Nejlépe tak, že se příslušný příkaz pro spuštění umístí do autostart.sh. Úlohu irexec lze samozřejmě spustit opakovaně kdykoliv, vždy je ale třeba předchozí instanci ukončit. Pozor, pokud nezadáte cestu k souboru .lircrc, úĺoha ho pak defaultně hledá na dvou adresách /storage/.lircrc a /etc/lirc/lircrc. Úloha irexec se spouští jako démon (-d).

Obsah autostart.sh:
...
killall irexec
irexec -d /storage/.config/.lircrc
...

A jen pro doplnění, příkaz pro restart Kodi ze systému může vypadat takto: systemctl restart kodi, příkaz pro reboot celého systému pak takto: reboot.

 
Citovat
#6
Test dostupnosti serveru

Jednoduchá a rychlá kontrola dostupnosti serveru (počítače). Dostupnost se může testovat různými způsoby, já jsme si zvolil jednoduché a realizačně rychlé řešení, pomocí příkazu ping. Ping periodicky spouštím v trvale běžícím sh scriptu, který se spouští z autostart.sh.

Řešení využívá možnost nastavení uživatelské proměnné skinu. Deklarace proměnné se provede jejím první použitím (nastavením její hodnoty). V toto případě používám logickou (Booelan) proměnou.

Edit 2017-08-05 Upozornění: Nastavení proměnné skinu vyhodnocuje Kodi jako aktivitu uživatele (stejně jako stisk klávesy na klávesnici, DO nebo pohyb myši), se všemi důeldky. Např. se nespustí screen saver nebo některé funkce, jejíž chování je závislé na "neaktivitě uživatele", nebudou při použití této vychytávky fungovat správně.

Nastavení (případně deklarace) hodnoty proměnné [TRUE].

Skin.SetBool(string)

Nulování hodnoty proměnné [FALSE].

Skin.Reset(string)

kde

string - identifikace proměnné.

Pokud tedy chcete zadat hodnotu proměnné z nějakého scriptu nebo aplikace v systému, je třeba to vložit do známého příkazu kodi-send:
kodi-send --action="Skin.SetBool(Server0isalive)" - nastaví hodnotu proměnné Server0isalive na [TRUE]
kodi-send --action="Skin.Reset(Server0isalive)" -  - nastaví hodnotu proměnné Server0isalive na [FALSE]

Testování dostupnosti serveru se provádí ve scriptu testoflife.sh, který je spouštěn z autostart.sh:
...
/storage/.kodi/.config/testoflife.sh &
...

Kód testoflife.sh:

Kód:
#! /bin/sh
while [ TRUE ]; do
ping -c 1 10.0.0.10
if [ $? == 0 ];
then
    kodi-send --action="Skin.SetBool(Server#0isalive)"
else
    kodi-send --action="Skin.Reset(Server#0isalive)"
fi
sleep 15
done

Proměnná Server#0isalive se pak využívá ve skinu, pro zobrazení stavu dostupnosti serveru. Do příslušného místa definice skinu (zde pro skin Eustary.Easy) je vložena sekvence:

Kód:
<control type="image"> <!-- Easy+ Server is alive - icon -->
    <top>4</top>
    <width>45</width>
    <height>45</height>
    <fadetime>300</fadetime>
    <aspectratio aligny="center" align="left">keep</aspectratio>
    <texture>defaultnetwork.png</texture>
    <visible>Skin.HasSetting(Server#0isalive)</visible>
</control>
<control type="image"> <!-- Easy+ Server isn't alive - icon -->
    <top>4</top>
    <width>45</width>
    <height>45</height>
    <fadetime>300</fadetime>
    <aspectratio aligny="center" align="left">keep</aspectratio>
    <texture colordiffuse="red">defaultnetwork.png</texture>
    <visible>!Skin.HasSetting(Server#0isalive)</visible>
</control>

Příznak se zobrazuje v záhlaví titulní strany (v pravém horním rohu, vedle informace o počasí):
         

Omezení
  • využití této vychytávky vyžaduje možnost a schopnost úpravy skinu. Bez toho je její použití k ničemu.

 
Citovat
#7
muzes mne prozradit jak to ze ti kodi nahrava. Jak si to udelal je na to nejaky jiny PVR klient?
RaspberryPi 3B, OpenELEC 6.95 KODI 16.1 Javris 8Gb Class10 

 
Citovat
#8
@PaPe3

Na jeden ze strojů, kde provozuji LibreELEC, jsem si nainstaloval addon Tvheadend 4.2, který způsobí to, že se ti do systému nainstaluje Tvheadend backend. Tedy Tvheadend server, který umí zpracovávat televizní vysílání z různých přijímačů - USB, PCI - DVB-T, T2, C, S2 atp. On toho umí samozřejmě daleko víc (např. přijímat IPTV streamy, streamy internetových radií, nahrávat Tv i Radio programy, atp.).

Na každý Kodi klient v domácí síti jsem si pak nainstaloval PVR addon Tvheadend HTSP Client, což mi umožní využívat všechny služby Tvheadend serveru. Jako třeba:
  • sledovat živé tv vysílání, včetně funkce timeshift,
  • plánovat si a zadávat programy k nahrávání,
  • přehrávat nahrané programy,
  • ...
Více si můžeš přečíst v [Only registered and activated users can see links Click here to register]

 
Citovat
#9
Ve dvou předchozích příspěvcích "vychytávek" [Only registered and activated users can see links Click here to register] a [Only registered and activated users can see links Click here to register] jsem ukázal, jak je možné přenést do Kodi nějakou informaci například z sh scriptu s pomocí tzv. proměnných skinu. Už tehdy jsem uvedl, "to není to právě typické (a asi ani správné) použití" a jak se ukazuje, měl jsme bohužel pravdu. Před časem mi přestal správně fungovat addon pro automatického zapínání a vypínání Kodi pro nahrávání [Only registered and activated users can see links Click here to register] a po delším pátrání jsem našel příčinu v použitý dvou výše uvedených "vychytávek". Nastavení proměnné skinu vyhodnocuje totiž Kodi jako aktivitu uživatele (stejně jako stisk klávesy na klávesnici, DO nebo pohyb myši). V tom důsledku pak addon P&RM vyhodnotí některé situace a stavy "nesprávně".

Znamená to tedy, že pokud používáte addon P&RM, nemůžete ve chvíli, kdy addon vyhodnocuje stav "aktivity uživatele", nastavovat proměnné skinu. Ty totiž způsobí, že addon je vyhodnotí jako situaci, kdy je uživatel aktivní a přizpůsobí tomu svůj další postup (např. nevypne systém, který byl automaticky zapnut pro nahrávání).

 
Citovat
#10
Restart PVR

Občas se hodí, při různých nestandardních kouzlech, mít možnost restartovat PVR klienta v Kodi. Existuje pro to standardní příkaz StartPVRManager, který byl do Kodi přidán počínaje verzí 12 (Frodo). Poté byl někdy, nevím kdy, zase odstraněn, resp. je nefunkční. Potřeboval jsme nedávno pro jisté účely restartovat PVR klienta, a tak jsme hledal nějakou náhradní možnost. V první chvíli jsme to obešel restartem celého Kodi, což je ovšem dosti brutální. Nakonec jsem našel sice krkolomný, ale z hlediska konečného efektu celkem jednoduchý  způsob využívající JSON-RPC Api. Jeho použití ze systému je možné např. pomocí aplikace curl, která je v LibreELEC standardně instalována.

Princip spočívá v potupném zadání svou příkazů zablokování a odblokování příslušného doplňku. Oproti původnímu příkazu, který restartuje všechny PVR, je možné tímto způsobem restartovat každý PVR zvlášť.

Příkaz pro zablokování zadaný prostřednictvím aplikace curl ze systému, na kterém Kodi běží:
Kód:
curl -s -H "Content-Type: application/json" -u "USERNAME:PASSWORD" -v -X POST -o curl.txt -d '{"jsonrpc": "2.0", "method": "Addons.SetAddonEnabled", "params": { "addonid": "pvr.hts", "enabled": false }, "id": 1}' http://localhost:PORT/jsonrpc

Příkaz pro odblokování:
Kód:
curl -s -H "Content-Type: application/json" -u "USERNAME:PASSWORD" -v -X POST -o curl.txt -d '{"jsonrpc": "2.0", "method": "Addons.SetAddonEnabled", "params": { "addonid": "pvr.hts", "enabled": true }, "id": 2}' http://localhost:PORT/jsonrpc

Po postupném zadání obou příkazů dojde v restartu PVR Tvheadend klienta. příkazy by měly následovat hned za sebou, po zablokování není PVR addon pochopitelně aktivní  s ním všechny jeho funkce a zobrazení.

Samozřejmě, pokud budete chtít příkazy zadávat z jiného systému, je třeba změnit IP adresu. V uvedených příkladech je použita symbolická localhost adresa. Nezapomeňte rovněž zadat USERNAME, PASSWORD a PORT, parametry, které se jinak zadávají v Systém>Nastavení/Služby>Ovládání.

Problémy, bugy:
  • pokud v době blokování přehrává PVR nějaký obsah, dojde většinou k zamrznutí Kodi. Proto je vhodné před zablokováním ještě doplnit ještě příkaz, který zastaví přehrávání
  • čas od času, statisticky tak 1x z 20 případů, použití této dvojice příkazů vede k restartu Kodi 

 
Citovat
#11
JiRo:

Zdravím.
Nyní laboruji s IPTV v TVH.... při sledování kanálu mám navigační tlačítka DO (TV CEC):
šipka nahoru: přepnutí kanálu na další
šipka dolu: přepnutí kanálu na předchozí
šipka doprava: žádný příkaz
šipka doleva: žádný příkaz.....

Prosím šlo by udělat to takto:
šipka nahoru: příkaz kanály (viz. screen)
šipka dolu: příkaz televizní program (viz screen) 
šipka doprava: přepnutí kanálu na další
šipka doleva: přepnutí kanálu na předchozí
(jsem takto zvyklý z Dreamboxu  1 )

V případě že by mohla bý kolize tak příkaz kanály na šipku doprava a příkaz televizní program na šipku doleva....
Zatím mám nakonfigurované jen barevná tlačítka a to v /storage/.kodi/userdata/keymaps - remote.xml ...
Díky za radu


Přiložené soubory Miniatury
       
::: Raspberry 1B + Hifiberry DAC = piCorePlayer 3.21 (Logitech Media Server 7.90) / Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND :::
 
Citovat
#12
@otava5 Mělo by to vypadat takto:

Kód:
 <FullscreenLiveTV>
   <remote>
     <left>ChannelDown</left>
     <right>ChannelUp</right>
     <up>ActivateWindow(PVROSDChannels)</up>
     <down>ActivateWindow(PVROSDGuide)</down>
   </remote>
 </FullscreenLiveTV>
 <FullscreenRadio>
   <remote>
      <left>ChannelDown</left>
      <right>ChannelUp</right>
      <up>ActivateWindow(PVROSDChannels)</up>
      <down>ActivateWindow(PVROSDGuide)</down>
   </remote>
 </FullscreenRadio>

 
Citovat
#13
to zadám do remote.xml?
::: Raspberry 1B + Hifiberry DAC = piCorePlayer 3.21 (Logitech Media Server 7.90) / Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND :::
 
Citovat
#14
@otava5 Jo, to jsme nenapsal. Sorry. Při editaci mi tam vlítly nějaké formátovací znaky, ale už jsem to opravil. Tak si to raději načti znova.

 
Citovat
#15
JiRo: Koukni na screen.... standardně to funguje tak že najedu na kanál potvrdím OK rozjede se stream s touto obrazovkou, dalším klepnutím OK se objeví už jen samotný stream.

Šlo by udělat aby po jednom klepnutí se rovnou přeplo na stream bez této obrazovky, zkrátka vypustit to pro mě otravné potvrzování? Snad si mě pochopil....  4

Díky za odpověď....


Přiložené soubory Miniatury
   
::: Raspberry 1B + Hifiberry DAC = piCorePlayer 3.21 (Logitech Media Server 7.90) / Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND :::
 
Citovat
#16
@otava5 Máš nastaveno Spustit přehrávání minimalizovaně, vypni si to. Viz screenshot nastavení:
   

 
Citovat
#17
JiRo:
Mám teoretický dotaz.... Mám zájem o tento ovladač s mic:
[Obrázek: New-Mini-keyboard-with-Mic-voice-Backlit...ith-IR.jpg]
Bude tlačítko mic fungovat v hlas. hledaní ve Stream Cinema jako na Yatse ?
::: Raspberry 1B + Hifiberry DAC = piCorePlayer 3.21 (Logitech Media Server 7.90) / Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND :::
 
Citovat
#18
@otava5 Yatse umí hlasové příkazy proto, že je to aplikace napsaná pro Android a Adnroid poskytuje aplikacím systémovou službu umožňující využité zadávání hlasových příkazů. Jinak řečeno, abys mohl v nějaké aplikaci používat hlasové příkazy, měl by je podporovat operační systém a aplikace, ta by zase měla umět využívat jeho systémové služby.

 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)