• 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
Reboot boxu z DO
#1
Měl jsme tuto funkci vyřešenou u všech mých boxů, pokud jsme je ovládal přes Logitech Harmony One. Tam jsem si na to prostě vyhradil nepouživané kódy tlačítek v příslušném "Device". Poté, co jsem přešel na trochu jiný typ DO, tak mi ta funkce chybí. Zejména v době, kdy zkouším a testuji nové verze Kodi a binárních addon, kde k "zamrznutí" Kodi není daleko. Čekat až se Kodi při neopatrné práci vzpamatuje nebo dokonce box odpojovat od napájení není jednak pohodlné, není to ani ohleduplné k HW a navíc, protože některé funkce testuji na hlavním Kodi v domácnosti, protože tak nejlépe některé funkce dlouhoodobě prověřím, nemohu čekat, že některé postupy budou provádět ostaní uživatelé.

Dále popisované řešení je jen jakési "udělátko" a pro ostré nasazení pro širší veřejnost by bylo třeba, aby se ho ujal někdo zkušený a učesal to, případně využil lépe dostupné funkce a nástroje/aplikace systému. Já jsem například laboroval se systemd, ale zjistil jsem že pro tak krátké časy, které potřebuji sledovat a vyhodnocovat, je lepší to vytvořit celé na bázi sh scriptů. Proto to publikuji tak, jak to je, a přidávám stručný popis. Můžete si hrát, případně tomu dodat nějakou lepší fazónu. Přivítám i nějaké nápady...

Předpoklady:
  • Kodi běží na *ELEC. Nebyl by asi problém ani s Linuxem, možná už trochu s Windows, ale tohle teď řešit nebudu. A i proto, abych to zjednodušil, budu to celé popisovat tak, jak to mám já implementované na mém CoreELEC.
  • DO je IR nebo kombinace IR a RF/BT, kde IR povel je používán k zapnutí(probuzení) a vypnutí/uspání, tedy je generován stiskem tlačíka POWER.
  • Využívá se doplnění na úrovni systému, kde se v *ELEC doplní vlastní předpis pro zpracování příslušného kódu tlačítka. V Linuxu by to mělo jít analogicky, ve Windows se musí použít nějaký obdobný postup.
  • Předpokladem je samozřejmě to, že Kodi sice může být "mrtvé", nereaguje, ale zbytek OS víceméně běží a jeho základní funkce a další aplikace fungují. V této chvíli si já většinou buď Kodi shodím přes ssh terminál (to se ne vždy podaří, resp. to může trvat hodně dlouho) nebo přes něj provedu reboot  celého systému. Teď tedy chci mít možnost reboot provést přes DO.
Idea řešení:
  • zmrtví-li Kodi, nereaguje zpravidla ani na DO povel pro vypnutí. Myšlenka je taková, že protože v této chvíli povel z DO do Kodi nedorazí, resp. Kodi s ním nic neprovede, využít ho pro zadání příkazu reboot přes zpracování povelu z DO na úrovni systému, na jehož základě se na úrovni systému zadá potřebný příkaz (např. reboot).
A řešení:

V první řadě je třeba umět odchytit povel z DO. Tedy definovat tabulku pro aplikaci ireexec. Ta může vypadat třeba takto (jde o textový soubor):
Kód:
begin
  prog = irexec
  button = KEY_POWER
  config = /storage/.config/scripts/rescue/catch.sh
end
Pojmenování souboru je zcela libovolné (já jsem použil název keymaps.cfg a uložil ho do .config adresáře), musí se jen stejné jméno použít v příkazu, který by měl být vložen do autostart.sh. Jde o sekvenci dvou řádků pod komentářem:
Kód:
...
# Rescue reboot initial
killall irexec
irexec -d /storage/.config/keymaps.cfg
rm -f /storage/.config/scripts/rescue/rescue.cnt
...
Ten třetí řádek, to je iniciální sekvence, kterou se po spuštění Kodi maže (pro jistotu) soubor rescue.cnt, do kterého si dále uvedený script ukládá počet stisknutí příslušného tlačítka.

Vlastní řešení je postavené na dvou sh scriptech, které jsem umístil do podadresáře rescsue mého oblíbeného adresáře /storage/.config/scripts, ve kterém si takováto "udělátka" ukládám. Mám to tak už léta a všechny mé *ELEC implementace to mají stejné.

První script, catch.sh je spouštěn stisky tlačíka POWER na DO a počet jejich stisknutí ukládá do souboru rescue.cnt. Zároveň spouští postupně jednotlivé instance scriptu clear.sh. První instance spustí čekání v daném časovém okně (zde je nastaveno 5 sekund). Pokud v tomto čase první script nenačítá nastavený počet tisknutí POWER tlačíka, tak se soubor smaže a nestane se nic. Pokud ale počet stisknutí překročí nastavený limit (zde je nastaveno také 5, ale počet stisknutí), spustí se příkaz reboot.

Zde jsou oba scripty:

Catch.sh
Kód:
#! /bin/sh

presstoreboot=5

debug=1
notify=1
reboot=1

dir=/storage/.config/scripts/rescue/

log=${dir}rescue.log
cnt=${dir}rescue.cnt
clr=${dir}clear.sh

[ ${debug} ] && echo $(date +"%Y-%m-%d %H:%M:%S.%N") CATCH Start >> ${log}

[ ! -f ${cnt} ] && ${clr} &
while [ ! -f ${cnt} ] ; do
    [ ${debug} ] && echo $(date +"%Y-%m-%d %H:%M:%S.%N") CATCH Waiting for timer... >> ${log}
done

press=$(cat ${cnt})
press=$((press+1))
if [ ${press} -gt ${presstoreboot} ] ; then
    [ ${notify} ] && kodi-send --action="Notification(Rescue,Reboot,2000)"
    rm -f ${cnt}
    [ ${reboot} ] && reboot
    exit
fi
[ ${debug} ] && echo $(date +"%Y-%m-%d %H:%M:%S.%N") CATCH Press [${press}] >> ${log}
echo ${press} > ${cnt}

exit

Clear.sh
Kód:
#! /bin/sh

timetowatch=5

debug=1
notify=1

dir=/storage/.config/scripts/rescue/

log=${dir}rescue.log
cnt=${dir}rescue.cnt

[ -f ${cnt} ] && exit
    
[ ${debug} ] && echo $(date +"%Y-%m-%d %H:%M:%S.%N") CLEAR Start waiting... >> ${log}

echo 1 > ${cnt}

sleep ${timetowatch}

rm -f ${cnt}

[ ${debug} ] && echo $(date +"%Y-%m-%d %H:%M:%S.%N") CLEAR Delete cnt >> ${log}

exit

Kód jsme poněkud nafoukl, je tam bohaté protokolování, včetně času, aby bylo vidět, jak to celé probíhá, log se ukládá do souboru rescue.log. Pro někoho možná nelogicky v okamžiku, než se zadá příkaz reboot, provede se o tom ještě notifikace v Kodi, i když na ni ve většině případů už nedojde. Ale to tam mám spíše pro ladění a efekt...

Závěrem:

Pro ty, kterým uvedené scripty nic neříkají nebo jim to není úplně jasné (popisu jsem nevěnoval moc velkou pozornost protože to celé je určeno spíše pro ty, kteří se vyznají v detailech a jistě princip pochopí), ještě jednou zběžné závěrečné shrnutí:
  • zamrzne Kodi, nereaguje na stisky tlačítka DO (ani klávesnice) a to ani na stisk tlačítka POWER
  • nechce se vám, nebo tomu kdo u Kodi právě sedí, přihlásit se k systému přes ssh terminál nebo to neumíte nebo nevíte, co a jak byste měli řešit
  • pokud máte to správné DO (s IR vysíláním kódu tlačítka POWER) a implementovali jste si výše popsané řešení, stačí v této chvíli stisknout tlačítko POWER 5x (a více) za sebou v čase < 5 sec a provede se reboot systému
  • pokud v čase do 5 sec stisknete tlačítko méně než 5x, nestane se nic, po uplynutí 5 sec po prvním stisknutím tlačítka se interní čítač vynuluje (coubor rescue.cnt se smaže) a vše je připraveno na dalších 5 "rychlých stisků".
A takto to může vypadat po 5. stisku tlačítka POWER (jde pouze o simulaci):
   

A ještě jedna poznámka:

Někdo možná namítne, že by úplně stačilo ovládat vypnutí Kodi tak, že by se výše uvedeným postupem vypínal celý systém. Tzn. natvrdo po odchycení stisku tlačítka POWER zadat příkaz shutdown. Ano, to by šlo, a bylo by to jednodušší, ale má to jeden háček, to vypínání (a následné zapínání) trvá dlouho (včetně náběhu všech funcí Kodi), zatímco většina uživatelů chce za normální situace box při "vypnutí" pouze uspat, a pak ho zase přes DO probudit. Ten rozdíl mezi vypínáním/zapínáním a uspáním/probuzením je zásadní. Tak proto...
 
Citovat
  


Příspěvků v tématu
Reboot boxu z DO - od JiRo - 04.9.2021, 17:36
RE: Reboot boxu z DO - od meda - 05.9.2021, 10:03
RE: Reboot boxu z DO - od Rossi D - 05.9.2021, 13:49
RE: Reboot boxu z DO - od JiRo - 08.9.2021, 7:12
RE: Reboot boxu z DO - od jojovrtak - 15.9.2021, 17:04
RE: Reboot boxu z DO - od JiRo - 15.9.2021, 20:54
RE: Reboot boxu z DO - od Rossi D - 08.9.2021, 10:24
RE: Reboot boxu z DO - od Tomik68 - 08.9.2021, 10:46
RE: Reboot boxu z DO - od meda - 08.9.2021, 16:33
RE: Reboot boxu z DO - od Onygzz - 08.9.2021, 17:05
RE: Reboot boxu z DO - od JiRo - 08.9.2021, 20:08
RE: Reboot boxu z DO - od Onygzz - 08.9.2021, 20:24
RE: Reboot boxu z DO - od meda - 08.9.2021, 21:54
RE: Reboot boxu z DO - od JiRo - 09.9.2021, 8:36
RE: Reboot boxu z DO - od meda - 09.9.2021, 12:17
RE: Reboot boxu z DO - od JiRo - 09.9.2021, 16:15
RE: Reboot boxu z DO - od meda - 15.9.2021, 18:16
RE: Reboot boxu z DO - od JiRo - 21.9.2021, 9:38
RE: Reboot boxu z DO - od JiRo - 24.10.2021, 23:00

Přejít na fórum:


Prochází: 1 host(ů)