XBMC-Kodi.cz

Úplná verze: Trvale běžící *ELEC a ukončení Kodi
Prohlížíte si holou variantu vašeho obsahu. Prohlédněte si plnou verzi s příslušným formátováním.
Stran: 1 2
Často potřebujeme, aby systém s Kodi postavený na *ELEC instalaci běžel trvale. Můžeme k tomu mít dva důvody:
  • na pozadí běží aplikace (např. v docker), které vypínat nechceme (Home automation apod.),
  • systém bychom vypnout/uspat mohli, ale potřebujeme, aby se v nastaveném čase sám zapnul/probudil a HW, na kterém *ELEC běží, to neumí (častý případ značné části HW, které nemají RTC).
Což o to, HW o kterém je řeč většinou nemá nijak zásadní spotřebu, použitý HW a komponenty také nejsou náchylné k opotřebení provozem 24/7, takže vlastě o nic nejde. Sám jsem ale takovou potřebu měl několikrát, z jednoho či druhého (či obou) výše uvedených důvodů. To, proč jsem to řešil bylo nakonec hlavně proto, že mi nepřipadalo úplně ideální, když v okamžiku, když jsem Kodi nepotřeboval, obrazovka TV byla vypnutá, byla teplota procesoru (a úplně zbytečně) vysoká, zejména v mém "staromládeneckém" 2+1 orienetovaném na jih. Ze zkušenosti jsem věděl, že když Kodi úplně vypnu, klesne teplota CPU o cca 10 °C, a to i tehdy, když v *ELEC dál poběží Tvheadend, WebgrabPlus, případně pár dalších aplikací v docker. Postupně jsem vyzkoušel různé varianty a kombinace, od prostého vypínání TV (namapoval jsem TV Power tlačítko na DO kterým ovládám Kodi) až po to, co jem popsal ve Vypnutí Skinu. Nakonec jsem ale skončil u řešení, které v uvedeném odkazu zmiňuji také.

Vypínání celého Kodi.

Předesílám, že to, co tu popisuji, není nijak dokonalé. A také, že není určené pro úplné laiky. Zvolil jsem nástroje a prostředky, které mi to řešení umožnily navrhnout a dostat do funkční podoby za minimálních časových nákladů. V první řadě jsem vytvořil dva sh scripty. Prvním se Kodi (a TV) vypne, to je kodioff.sh, a druhým zase zapne, tedy kodion.sh. Zatímco vypnutí Kodi je celkem jasné a jednoduché, při zapnutí jsem musel počítat s tím, že vše ovládám jen jedním tlačítkem a proto musím respektovat kontext. Pro zapnutí je tedy nutný test, zda už Kodi neběží. Pokud běží, tak script skončí bez jakékoliv akce. Je to nutné také proto, že pokud Kodi vypínáme, trvá to řádově několik vteřin, než se aplikace skutečně ukončí. Pro interakci s Kodi používám v uvedených scriptech standardní *ELEC aplikaci kodi-send. Není to úplně ideální, ale funguje to, a to je důležité.

Kodioff.sh  
 
Kód:
#! /bin/sh
kodi-send -a "PlayerControl(Stop)" -a "ReplaceWindow(1190)" -d 5000 -a "UnloadSkin()"
echo 'standby 0' | cec-client -s -d 1
systemctl stop kodi
Součástí scriptu je vypnutí eventuálního přehrávání, zobrazení splash screen a nakonc zastavení skinu. Zobrazení splash screen je spíše jen pro efekt, u mého Kodi je tak jeho spuštění i zastavení doprovázeno vždy stejnou obrazovkou (zapnu Kodi, zapne se TV a téměř okamžitě se zobrazí splash screen, vypnu Kodi, zobrazí se na pár vteřin splash screen a vypne se TV). Zastavení skinu také nutné není, ale vyhnete se tak při následném spuštěním poblikávání obrazovky. Ono vlastně ani není třeba zastavovat přehrávání, ale dává to čas k tomu, aby se Kodi a případně i addon, které přehrávání spustil, před tím, než Kodi začneme "odstavovat", snadněji konsolidovaly.

Kodion.sh
 
Kód:
#! /bin/sh
if [ "$*" == "-c" ] ; then
    if [ $(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs') == 1 ] ; then
        echo 'on 0' | cec-client -s -d 1
        systemctl restart kodi &
    fi
else
    echo 'on 0' | cec-client -s -d 1
    systemctl restart kodi &
fi
Tady je to o krapet složitější, protože je třeba kontrolovat, zda Kodi, které chceme spustit, neběží. Na kontrolu má script parametr spuštění -c, který je-li zadán, test provede a pokud je vyhonoceno, že Kodi běží, nestane se nic. Pokud se script spustí bez testu, Kodi se spustí resp. restartuje bez ohledu na to, zda běží nebo ne. Využít se dá pak ten příkaz i jinak, nejen ve zde uvedeném příkladu.

Jak scripty spouštět?

Pro start obou scriptů používám tlačítko POWER na ovladači. Používám zásadne taková DO, která umožňují POWER tlačítko naučit libovolný IR povel.

Spuštění scriptu kodioff.sh je celkem jednoduché, mapuji ho v Kodi. Například takto:
 
Kód:
<?xml version="1.0" encoding="UTF-8"?>
<keymap> <!-- 99-power.xml for Remote control keyboard style with IR POWER key - 2022-07-22 by JiRo -->
    <global>
        <remote>
            <power>System.Exec("/storage/.config/scripts/system/kodioff.sh")</power>
        </remote>
    </global>
</keymap>
Se scriptem kodion.sh je to o něco složitější. Potřebujeme, aby se spustil i když Kodi neběží. Pro to tedy používám zachycení stisku tlačítka v systému. Pro to v *ELEC existuje celkem dobře známý postup.

Pro přemapování tlačítka v systému musíme jeho stisk zachytit. To se dosáhne vytvořením souboru mapování, např. keymaps.cfg. Ten pro naše účely může vypadat takto:
 
Kód:
begin
  prog = irexec
  button = KEY_POWER
  config = /storage/.config/scripts/system/kodion.sh -c
end
Je vidět, že stiskem tlačítka KEY_POWER (což je metakód tlačítka POWER na DO) se spustí výše uvedený script kodion.sh s parametrem, -c.

Abychom zachycení stisku a definovanou akci provedli, musíme ještě soubor s mapováním zaregistrovat. Toho dosáhneme tím, že do soubru autoexec.sh vložíme řádky:
 
Kód:
killall irexec
irexec -d /storage/.config/keymaps.cfg
Že je třeba po tom všem dát restart *ELEC, nemusím zdůrazňovat.

Se startem záznamu stisknuto POWER na DO, start Kodi, v 23 vteřině opět stisknuto tlačítko POWER, zahájeno ukončování Kodi. Záznam aplikace VNC Viewer na W10.


Případné nejasnosti vysvětlím v diskusi. Nechci popis příliš nafukovat, přeci jen je to už dost speciální, takže se o to asi nebudou snažit úplní laici. Pro ostatní snad prostý výčet jednotlivých kroků a stručné ukázky postačí.
: Výborný námět, určitě to vyzkouším.
Ono to tím, co je v uvedeno úvodu tématu, skončit nutně nemusí. V okamžiku, jakmile máme možnost jednoduše Kodi spouštět a ukončovat, nabízí se další možnosti. Napadla mě hned jedna.

Vložit funkci zastavení Kodi do Power menu Kodi. Je to vlastně analogie funkce Ukončit, kterou mají jiné systémy než *ELEC, tedy systémy, které mají vlastní GUI. Tady se ale do GUI systému uživatel nedostane, prostě se mu Kodi vypne spolu s TV. Edituje se soubor DialogButtonMenu.xml, do kterého se přidá další item. V Estuary to může vypadat nějak takto?
 
Kód:
                    <item> <!--EASY+ -->
                        <label>$LOCALIZE[13012] s vypnutím TV</label>
                        <onclick>dialog.close(all,true)</onclick>
                        <onclick>System.Exec("/storage/.config/scripts/system/kodioff.sh")</onclick>
                        <visible>System.HasAddon(service.coreelec.settings) + !System.ShowExitButton</visible>
                    </item>
Dal jsme tam podmínku na Coreelec a negaci podmínky, kterou se funkce Ukončit zobrazuje právě v jiných systémech než *ELEC. Pro Libre* a Open* to bude analogické.
[attachment=8048]
Pro ty, kteří používají skin Confluence jako já, bude ve stejném souboru kód trochu jiný:
 
Kód:
            <control type="button" id="22">
                <description>Exit button + TV</description>
                <width>340</width>
                <height>40</height>
                <textcolor>red</textcolor>
                <focusedcolor>white</focusedcolor>
                <align>center</align>
                <textwidth>290</textwidth>
                <texturefocus border="25,5,25,5">ShutdownButtonFocus.png</texturefocus>
                <texturenofocus border="25,5,25,5">ShutdownButtonNoFocus.png</texturenofocus>
                <onclick>dialog.close(all,true)</onclick>
                <onclick>System.Exec("/storage/.config/scripts/system/kodioff.sh")</onclick>
                <pulseonselect>no</pulseonselect>
                <font>font13</font>
                <label>$LOCALIZE[13012] Kodi + TV</label>
                <visible>System.HasAddon(service.coreelec.settings) + !System.ShowExitButton</visible>
            </control>

Pokud byste měli problém, zkontrolujte si, že id="22" je ve vašem souboru jedinečné. Případně ho na jedinečné změňte.
Splash screen

A ještě bych asi měl popsat, jak vypadá zobrazení splash screen. Používám jeden obrázek na všechno, momentálně tedy Kodi 19 - Matrix.
[attachment=8051]
Nahradil jsem splash screen *ELEC systémů, protože to uživatele mátlo. Teď tedy, ať si pustí Kodi na čemkoliv, uvidí stále stejnou obrazovku. Tzn., když sputím box s CoreELEC z vypnutého stavu, po úvodním logu výrobce se zobrazí uvedená stránka, a ta je nahrazena až Home stránkou Kodi. Všechny stránky, a u CoreELEC se postupně zobrazují tři, mají stejný obrázek. Já k nim přidávám ještě čtvrtou (při startu skinu) a pátou, před ukončením Kodi.

Start skinu řeším úpravou definičního souboru Startup.xml, např. takto. Je tam navíc nastaveno zpožděné spuštění skinu o 5 s, které umožní náběh PVR ještě před spuštěním addons od widgetů a vyřeší se tím občasné potíže způsobené startem service částí některých addons:
 
Kód:
<?xml version="1.0" encoding="UTF-8"?>
<window> <!-- EASY* -->
    <!-- <onload>ReplaceWindow($INFO[System.StartupWindow])</onload> -->
    <!-- EASY+ -->
    <onload>AlarmClock(Skin,ReplaceWindow($INFO[System.StartupWindow]),00:05,silent)</onload>
    <controls>
        <control type="image">
            <left>0</left>
            <top>0</top>
            <right>0</right>
            <bottom>0</bottom>
            <texture>special://home/media/startup/splash.jpg</texture>    
        </control>
    </controls>
</window>

Ukončení Kodi jsem popsal výše, splash screen před ukončením zobrazuji přes uživatelsky definované okno id=1190:
 
Kód:
<?xml version="1.0" encoding="utf-8"?>
<window type="dialog" id="1190"> <!-- EASY+ -->
    <animation effect="fade" time="1000">WindowOpen</animation>
    <controls>
        <control type="image">
            <left>0</left>
            <top>0</top>
            <right>0</right>
            <bottom>0</bottom>
            <texture>special://home/media/startup/splash.jpg</texture>    
        </control>
    </controls>
</window>
Ještě bych měl dodat, že při startu Kodi se mi přehraje krátký, asi 12 sec motiv z Matrix. Ale to už je jen taková třešinka na dortu, spuštění je definované standardně, přes service.autoexec, to asi popisovat nemusím.
Trochu mě štvalo, že když při spuštění Kodi nechám přehrát hodební motiv skinu (nyní tedy Matrix-u), objeví se v záhlaví Home stránky jméno přehrávaného souboru. V první kroku jsme to potlačil úpravou ve skinu, která v případě, že se přehrává soubor startup.mp3, jeho zobrazení zablokovala. Ale nelíbilo se mi to a protože jsem už dlouho chtěl mít v Kodi vlastní uisound, orientoval jsme se tímto směrem. Výsledkem je vlasní addon souborů uisound. Zatím jsme ho odvodil od už dlouhodobě používaného zvukového schématu titan.modern a vytvořil analogické schéma easy, tedy adddon resource.uisounds.easy. V něm jsme vyměnil stávající startup.wav (pro uisound musí být soubory wav, mp3 je tedy třba překonvertovat) za nový, který obsahuje jingle z Matrix-u, který se přehrává při startu Kodi. Přidal jsme také shutdown.wav, který obsahuje jiný jingle Matrix-u, který se naopak přehrává při ukončení Kodi.

Upravil jsme příslušně i konfigurační sooubor uisound addon, kde jsem přidal přehrání při otevření okna Id 1190, které se zobrazuje při ukončení Kodi:
 
Kód:
    <window>
      <name>startup</name>
      <activate>startup.wav</activate>
    </window>
    <window>
      <name>1190</name>
      <activate>shutdown.wav</activate>
    </window>
Oba wav soubory musí být nakopírovány do adresáře v addon. Zkoušel jsem do konfiguračního souboru dát explicitní cestu do adresáře, kde mám soubory uloženy, a to i pomocí special protokolu Kodi, ale ani v jednom případě to nefungovalo.

Při spuštění Kodi se tedy zobrazí tento obrázek:
[attachment=8097]
a naopak při ukončení tento:
[attachment=8098]
Analogicky k tomu se pak při spuštění a ukončení Kodi přehrávají dva různé jingly.
[attachment=8099]

Samozřejmě už mám připraveny jak obrázky, tak jingl (zatím jen jeden) pro Nexus. U těch jinglů je to trochu problém, codename Nexus odkazuje na několik východisek a zdrojů, takže je těžké vybrat ten, který je pro něj jednoznačně charakteristický. U Matrix s tímhle samozřejmě problém nebyl. Momentálně mám tedy zatím toto:
[attachment=8100]
*ELEC RMD
Pozn. RMD je reminiscence na OS RSX pro počítače firmy Digital, se kterými jsem před více než 30 lety (tedy ještě před érou PC) začínal vážnou prací s počítači a řídicími systémy.

Trvale běžící *ELEC mě inspiroval k napsání jednoduchého scriptu rmd.sh, který mi rychle zobrazí stav běžícího systému, ve kterém vidím jen mnou vybrané a zajímavé hodnoty.
 
Kód:
#! /bin/sh
echo Instance of Kodi: $(($(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs')-1))
echo Tvheadend recordings: $(curl -s "http://localhost:9981/api/dvr/entry/grid_upcoming?limit=99999" | grep -c '"sched_status":"recording",')
echo HTSP Clients: $(curl -s "http://localhost:9981/api/status/connections" | jq -r '.entries | to_entries[] | (.value.peer)  ')
echo CPU temperature: $(cputemp)
echo GPU temperature: $(gputemp)
free -h | head -n 2
echo Processor cores frequencies:
lshw | grep -E 'size.*MHz' | sed -re "s/.*size: ([0-9]*).*/\\1 MHz/"

Spuštění a zobrazení řeším přes PuTTY, kde mám vytvořen profil, který script spustí s pomocí watch v okně přizpůsobeném jeho velikosti.
 
Kód:
watch -n 5 /storage/.config/script/system/rmd.sh

Výsledek pak vypadá takto:
[attachment=8104]
*ELEC RMD a drobné vylepšení

V předchozí verzi RMD.sh jsem chtěl indikovat počet existující nahrávání v Tvheadend, ale dopadlo to tak, že indikace probíhala následovně: 0 =není žádné, =1 běží alespoň jedno. Tak je tady oprava, po které se už zobrazuje počet aktuálně probíhajících nahrávání (3. řádek):
 
Kód:
#! /bin/sh
echo Instance of Kodi: $(($(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs')-1))
echo Tvheadend recordings: $(curl -s "http://localhost:9981/api/dvr/entry/grid_upcoming?limit=99999" | jq '.entries | .[] | select( .sched_status == "recording" ) | length' | wc -l)
echo HTSP Clients: $(curl -s "http://localhost:9981/api/status/connections" | jq -r '.entries | to_entries[] | (.value.peer) ')
echo CPU temperature: $(cputemp)
echo GPU temperature: $(gputemp)
free -h | head -n 2
echo Processor cores frequencies:
lshw | grep -E 'size.*MHz' | sed -re "s/.*size: ([0-9]*).*/\\1 MHz/"
Trochu bojuji s jq. Nedostal jsme z něj počet odfiltrovaných položek, tak jsme si pomohl možná trochu špinavým trikem. Ale důležité je, že to funguje.

To že RMD.sh lze spustit i na mobilu asi připomínat nemusím. Na Androidu používám free Putty SSH. Reklamy skoro neobtěžují, základní funkce jsou víceméně shodné s PuTTY, kterou používám na Windows. Včetně možnosti přímého spuštění scriptu po přihlášení.
: Se zpožděním mám ke kódu v prvním příspěvku dotaz. Pokud posílám do LE příkazy z PuttySSH, lze použít i příkaz systemctl start kodi ke spuštění. Ty používáš pro spuštění ve scriptu restart, je to zvoleno účelově?
Je to v jiných systémech (Android, CoreElec) jinak než v LE?
Jo, pokud Kodi neběží, vede start i restart v konečném důsledku ke stejnému výsledku. Spuštění Kodi. Já ho používám proto, že kdyby náhodou Kodi běželo (on se někdy ten stop nemusí povést), tak to restart dostane do nějakého jasně definovaného stavu.

V android nevím, spíše ale ne. Ten příkaz systemctl restart/stop/start je linuxový. CE a LE jsou v tomto úplně stejné.
*ELEC RMD a další drobné vylepšení

Nyní jsem ještě přidal žádanou informaci o celkovém počtu streamů (Tvheadend subscriptions). Výsledkem je tedy počet všech streamů, tedy jak právě přehrávaných, a to za každého klienta zvlášť, tak i nahrávaných.
 
Kód:
#! /bin/sh
echo Instance of Kodi: $(($(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs')-1))
echo Tvheadend subscriptions: $(curl -s "http://localhost:9981/api/status/subscriptions" | jq '.totalCount')
echo Tvheadend recordings: $(curl -s "http://localhost:9981/api/dvr/entry/grid_upcoming?limit=99999" | jq '.entries | .[] | select( .sched_status == "recording" ) | length' | wc -l)
echo HTSP Clients: $(curl -s "http://localhost:9981/api/status/connections" | jq -r '.entries | to_entries[] | (.value.peer) ')
echo CPU temperature: $(cputemp)
echo GPU temperature: $(gputemp)
free -h | head -n 2
echo Processor cores frequencies:
lshw | grep -E 'size.*MHz' | sed -re "s/.*size: ([0-9]*).*/\\1 MHz/"
Hrátky s led

Pro výše popsaná řešení trvale běžícího systému (CoreELEC) na HW Beelink GT King instalace, která kromě Kodi zajišťuje i funkce TVServeru pro celou domácnost jsem chtěl nějak uživatelsky využít led diody boxu
[attachment=8572]
Pozn. Ve skutečnosti rozvěcují tyto diody oči lebky, která je vyobrazené na horní straně box-u.

Oči svítí jednu ze dvou barev. Červenou, která se rozsvěcí při zapnutí napájení a zelenou, jejíž rozvícení se dá definovat v nastavení CoreELEC. Já jim mám nastavenou jako reakci na přijetí IR povelu z DO. V mém případe IR povel vysílá pouze tlačítku POWER, což je přesně to, co potřebuji vědět. Tedy že jsem DO správně namířil a povel byl přijatý.

Dlouho jsem se snažil zjistit, jak by se v CoreELEC dala led rozvěcet z prostředí pythonu, ale nikdo mi nebyl schopen poradit, až jsem v jednom článku narazil na to, jak jsou tyto věci řešeny obecně v Linux-u. Pak už to bylo celkem jednoduché.

Přirazení akce, která rozvítí led, je v tomto případě definováno v /sys/class/leds/sys_led/trigger. Po zadání
 
Kód:
cat /sys/class/leds/sys_led/trigger
pak dostaneme seznam všech aktivit, které mohou stav led ovlivnit:
 
Kód:
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 default-on transient panic emmc sd sdio rfkill0 rfkill1 rfkill2 [rc-feedback] rfkill3
Aktuálně nastavená hodnota je v tomto případě [rc-feedback], což je právě ona v CoreELEC nastavená reakce na přijetí IR povelu z DO. Rychlý test způsob využití potvrdil. Změnu režimu lze provést zapsáním požadovaného kódu. Trvalého rozsvícení led tedy např. dosáhneme příkazem:
 
Kód:
echo default-on > /sys/class/leds/sys_led/trigger
Mně v Kodi běží trvale service, která provádí rychlé periodické dopočty některých proměnných, takže jsem ji využil k tomu, že mi periodicky a střídavě (po 1s) zapisují dva režimy:
 
Kód:
echo default-on > /sys/class/leds/sys_led/trigger
echo rc-feedback > /sys/class/leds/sys_led/trigger
Kromě toho mám ještě doplněný další script, který mi led rozsvěcí v jiné periodě, pokud Kodi neběží, ale v Tvheadend probíhá nějaké nahrávání a nebo je k němu připojen nějaký jiný Kodi klient. V tomto případě s pauzou 5 sekund led rychle po sobě zabliká (s periodou 0.4 sekundy) a počet těchto rychlých zabliknutí je dán součtem počtu právě probíhajících nahrávek plus počet aktivních klientů připojených k Tvheadend. To už je ale zase záležitost sh scriptu běžícího v systému mimo Kodi, který je aktivní pouze v okamžiku, kdy Kodi neběží.

Nejde o žádnou důležitou funkci, spíše jsem si jen v době delší nemoci pohrál, ale možná to pro podobné hračičky bude zajímavá inspirace. Použít to lze u všech *ELEC a Linux instalací. Je ale třeba počítat, že konečné adresy /sys/class/leds/... se mohou v jiných systémech nebo verzích lišit, a že i HW může být různý (tzn. nemusí to nutně být Beelink GT King).
Hrátky s led

V minulém postu jsem, kromě jiného, napsal:
(03.1.2023, 23:07)JiRo Napsal(a): [ -> ]Kromě toho mám ještě doplněný další script, který mi led rozsvěcí v jiné periodě, pokud Kodi neběží, ale v Tvheadend probíhá nějaké nahrávání a nebo je k němu připojen nějaký jiný Kodi klient. V tomto případě s pauzou 5 sekund led rychle po sobě zabliká (s periodou 0.4 sekundy) a počet těchto rychlých zabliknutí je dán součtem počtu právě probíhajících nahrávek plus počet aktivních klientů připojených k Tvheadend. To už je ale zase záležitost sh scriptu běžícího v systému mimo Kodi, který je aktivní pouze v okamžiku, kdy Kodi neběží.
Takže pro případné zájemce i tento script.
 
Kód:
#! /bin/sh

i=30
while [ ${i} -lt ${count} ] ; do
    echo default-on > /sys/class/leds/sys_led/trigger
    sleep 0.8
    echo rc-feedback > /sys/class/leds/sys_led/trigger
    sleep 0.2
    i=$((i + 1))
    kodi=$(($(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs')-1))
    if [ ${kodi} == 1 ] ; then
        break
    fi
done
while [ true ] ; do
    kodi=$(($(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs')-1))
    if [ ${kodi} == 0 ] ; then
        rec=$(curl -s "http://localhost:9981/api/dvr/entry/grid_upcoming?limit=99999" | jq '.entries | .[] | select( .sched_status == "recording" ) | length' | wc -l)
        cli=$(curl -s "http://localhost:9981/api/status/connections" | jq -r '.totalCount')
        count=$((${rec} + ${cli}))
        if [ ${count} -gt 0 ] ; then
            i=0
            while [ ${i} -lt ${count} ] ; do
                echo default-on > /sys/class/leds/sys_led/trigger
                sleep 0.2
                echo rc-feedback > /sys/class/leds/sys_led/trigger
                sleep 0.2
                i=$((i + 1))
            done
        else
            echo default-on > /sys/class/leds/sys_led/trigger
            sleep 2
            echo rc-feedback > /sys/class/leds/sys_led/trigger
        fi
    else
        echo rc-feedback > /sys/class/leds/sys_led/trigger
    fi
    sleep 2
done

exit 0
Proti výše citovanému popisu je ještě poněkud upravený. Script běží trvale, spouští se po spuštěním CE a začne být aktivní po prodlevě 30 sec od spuštění nebo po spuštění Kodi. Ovládání led je podmíněno tím, že neběží lokální Kodi. Led se ovládají ve dvou základních stavech, prodleva je vždy 3 sec.

Pokud je aktivní alespoň jedno nahrávání nebo alespoň jeden klient Kodi, který je připojený k Tvheadend serveru, tak počet rychlých bliknutí led (0.2/0.2 sec) odpovídá sumě počtu aktivních klientů a probíhajících nahrávání.

V případě pokud není aktivní žádný klienta ani neprobíhá nahrávání, rozsvítí se led na 3 sec, tzn. že led v tomto případě bliká v periodě 3/3 sec. To je výrazně a na první pohled odlišné od periody 1/1 sec, kdy led bliká, pokud je aktivní Kodi i od série krátkých bliknutí, jejichž počet udává sumu počtu připojených klientů a probíhajících nahrávání.

Pokud to rekapituluji, tak všechny identifikované stavy běžícího boxu zelenou led jsou:
  • série rychlých probliknutí 0.2/0.2 sec s prodlevou 3 sec - Kodi neběží a led je ovládána scriptem, k Tvheadend jsou připojeni klienti a/nebo probíhá nahrávání. Počet probliknutí je suma počtu připojených klientů a probíhajících nahrávání.
  • blikání 3/3 sec - Kodi neběží a led je ovládána scriptem, k Tvheadend nejsou připojeni žádní klienti ani neprobíhá žádné nahrávání
  • blikání 1/1 sec - Kodi běží, led je ovládáno service addon Kodi. Tento stav se možná zdá zbytečné identifikovat, protože Kodi běží, což by mělo být jasné vidět na obrazovce TV. Ale já mám nastaveno vypnutí TV po určité době nečinnosti v gui Kodi, takže často se může stát, že Kodi běží a TV je přitom vypnutá. Typicky tento stav trvá delší dobu, když např. běží download v SCC a Kodi se jinak nepoužívá nebo je TV přepnutá na jiný vstup bez vypnutí Kodi.
Jak jsem napsal, je to spíše jen takový rozmar, funkce na efekt, ale má i svou praktičtější stránku věci. Stačí pouze zběžný pohled na box, i když je TV vypnutá nebo je přepnutá na jiný zdroj než box s Kodi, aby bylo zřejmé, co se v něm děje (nebo případně "neděje").
Splash & jingle pro Nexus

Čas oponou trhnul a u nás doma, až na testovací instalace, nenajdete jiné Kodi než Nexus. A tak jsem zároveň aktulizoval sadu obrázků a jeden jingle. Zatím se mi nepodařilo ze zdrojů, které jsem nasbíral, najít či vyeditovat vhodný jingle pro shutdown, a tak pro něj používám ten stejný, jako pro startup.

Kdyby měl někdo zájem, tak přikládám.
Prosím tě, použil jsem na splash gif soubor. Zatěžuju tím nadbytečně náběh skinu? Vizuálně mi to tak nepřipadá.
To by na to nemělo mít vliv. Náběh skinu zpomalí, když nedostane nějaká data, ale pokud je dostane, tak jejich zobrazení již není jeho věcí (tím myslím thready, které ty jednodlivé dílčí úkoly řeší).
Tak v to jsem doufal. Dík
(21.1.2023, 0:04)jkmh Napsal(a): [ -> ]Prosím tě, použil jsem na splash gif soubor.
Nemáš to náhodou ten gif, co se zobrazuje při startu CE 20? Já ho nikde nemohu nalézt. Už jsem dal prohledávat úplně všechno, ale stále nic...
Bohužel nemám.
Tak jse ho ani já nenašel. Možná je v binárkách. Jedině, že by sis ho udělalz podkladů sám. sám CoreELEC/distributions/CoreELEC/splash/Amlogic-ng at coreelec-20 · CoreELEC/CoreELEC · GitHub
Stran: 1 2