• 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:
  • 1 Hlas(ů) - 5 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Trvale běžící *ELEC a ukončení Kodi
#1
Č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čí.
 
Citovat
  


Příspěvků v tématu
Trvale běžící *ELEC a ukončení Kodi - od JiRo - 14.8.2022, 9:36
RE: Trvale běžící *ELEC - od jkmh - 14.8.2022, 11:25
RE: Trvale běžící *ELEC - od JiRo - 14.8.2022, 15:27
RE: Trvale běžící *ELEC - od jkmh - 14.8.2022, 19:15
RE: Trvale běžící *ELEC - od JiRo - 14.8.2022, 22:06

Přejít na fórum:


Prochází: 1 host(ů)