XBMC-Kodi.cz

Úplná verze: Vlastní nastavení "barevných" tlačítek a konfigurace JSON příkazů
Prohlížíte si holou variantu vašeho obsahu. Prohlédněte si plnou verzi s příslušným formátováním.
Ahoj,

už několik dní řeším jeden „jednoduchý“ problém, chtěl bych použít barevná tlačítka (modrá, červená, zelená, žlutá v nastavení->… více->… -> provést a nastavit konkrétní akci-> modrá) uvnitř oficiálního dálkového ovladače Kodi pro iOS, spouštět jednoduché příkazy v rozhraní Kodi (přesněji příkaz „runscript (script.audio.profiles, 1)“ atd.). Našel jsem jednu diskusi na internetu na stejné téma (https://discourse.osmc.tv ... ... a https://forum.kodi.tv/ ...), pokusil jsem se upravit konfiguraci v

\ userdata \ keymaps \ ...
\ system \ keymaps \ remote.xml => bez úspěchu

Nastavení s doplňkem Keymap je také bez úspěchu.
Nevím, jak správně a kde nastavit příkazy JSON, aby byl signál přiřazen nastavené akci ...
V protokolu ladění Kodi získávám tyto informace o registraci signálu tlačítka, ale nemohu k signálu přidat akci.

Zde je výpis z logu aplikace Kodi - https://paste.kodi.tv ...

Každý problém nebo nápad byl vyřešen dosud přes google ... Tento problém vyřešit sám nezvládnu. Budu rád za každý nápad :)

Také jsem našel konfigurační soubory ve složce „Kodi \ system \ keymaps“

remote.xml
appcommand.xml

Bohužel ani jeden neumožňuje nastavení signálu z aplikace Remote Kodi pro iOS na konkrétní akci v rozhraní.

... A bohužel došlo k dalšímu problému, určitě to je spolu související, dříve během přehrávání videa bylo možné pomocí aplikace pro iOS provádět malé kroky ve videu (šipka vlevo, vpravo) nyní v nabídce funguje normálně, během přehrávání, žádná odezva. Při přehrávání hudby šipky přeskočí na další skladbu ... Také bych chtěl udělat změnu v keymaps a udělat malý krok v přehrávané skladbě.


Kodi Matrix 19.0-Beta1 (18.9.801)
Windows 10 1809 - 64bit
To co chceš udělat, tzn. spustit script stiskem tlačítka DO je celkem jednoduchá operace. Máš-li ten script a víš, jak a s jakými parametry ho pomocí příkazu Kodi spustit, pak patrně tápeš nad tím, jak definovat mapování tlačítek pro spuštění tohot scrptu. Tak několik základních rad:
  1. Tohle jen s doplňkem Keymap Editor neuděláš, budeš muset editovat mapovací soubor. Keymap editor budeš moci použít alespoň na to, aby sis s jeho pomocí odchytil kódy tlačítek, které chceš mapovat.
  2. Měl by správně použít mapovací soubor v ...\userdata\keymaps\. Editovat mapovací soubory v ...\system\keymaps\ se nedoporučuje z několika důvodů. Jedním z nich je, že při update Kodi by se ti ty změny přepsaly, ale hlavně, je to proti zásadám, zasahovat do části patřící do instalované části aplikace, kvůli tomu je právě možnost uživatelské definice ve vyhrazeném části ...\userdata\keymaps\.
  3. Netuším, o jakém json píšeš, tos to asi špatně pochopil. V této části Kodi se žádný json nepoužívá.
  4. Je s podivem, když jsi začátečník, že používáš beta verzi mové major verze. Proč? Pokud k tomu nemáš žádný zásadní důvod, používej raději aktuální stable verzi, tedy  Kodi 18. V beta verzi Kodi 19 může být stále ještě plno bugů a může se stát, že se budeš prát s nějakým problémem a přitom to bude problém Kodi.
  5. Pokud chceš editovat mapovací soubor, musíš o té problematice něco vědět. Nebo si myslíš, že ti to tady někdo vysvětlí tak, že i když o tom moc nevíš (z tvého popisu to tak vypadá), že tě to naučí?
  6. Ty problémy o kterých píšeš (nefunguje něco, co dříve fungovalo) mohou souviset s tím, že jsi mohl do mapovacího souboru vnést nějakou chybu. Pokud jsi si poškodil ten systémový mapovací soubor, stačí znova přeinstalovat Kodi. Přeinstaluj tu verzi, kterou tam máš tou samou verzí. Pokud sis poškodil uživatelský soubor, tak záleží, kolik jsi tam toho měl. Pokud nic důležitého, tak ho jenom smaž. Pokud o něj nechceš přijít, musíš se do něj podívat a najít chybu. Je to xml, takže se to dá najít celkem snadno.
A abych byl trochu produktivní, tak ještě pár dalších bodů:
  • pokud už nějaký mapovací soubor (uživatelský) máš je možné ho editovat, případně vytvořit další, do kterého si dáš to požadované mapování. Pokud budeš mít ve finále více souborů, musíš si uvědomit, že je Kodi načítá postupně podle toho, jak jsou abecedně seřazeny v daném systému
  • před tím, než začneš editovat si musíš uvědomit, jaké tlačítko (buď číslený kód nebo meta kód, jakého zařízení a v jakém kontextu chceš definovat. Zda globálně nebo jen v nějaké konkrétní situaci.
  • také musíš vědět, jakého typu tvůj dálkový ovladač je, jestli ho Kodi identifikuje jako remote nebo keyboard, případně něco dalšího
  • no a pak stačí nadefinovat do správného místa, na správné tlčítko, správnou akci. No a tady je samozřejmě ten problém, že pokud tom nerozumíš a není ti to jasné z popisu v Kodi Wiki jasné, tak se tii radit bude si velmi těžko
Ideální postup (a nejjednodušší) bez složitého vysvěltování, jak takový mapovací soubor má vypadat a jako to celé funguje je ale jednodušší:
  1. Přes addon Keymap Editor si nadefinuj jakoukoliv akci (tu akci si zapamatuj) na tebou zvolené tlačítko. Tu akci si ideálně nadefinuj pro to místo, kde ten script budeš chtít používat.
  2. Tento addon ti stávající mapovací soubor přejmenuje a založí nový, pak záleží jen na tobě, jak chceš pokračovat. Můžeš si tam nechat oba, ten původní přejmenovat zpátky a ten nově vytořený přejmenovat tak, aby se ti načetl v takovém pořadí, jak potřebuješ.
  3. Otevřít ten nově vytvořený soubor vhodným editorem (Notepad++), najdi tu nadefinovanou akci a přepiš ji tím voláním tvého scriptu.
  4. Ulož soubor a restartuj Kodi.
Script mám připraven a z části se v problematice orientuji.
1. Postup s Keymap editorem jsem to zkoušel ze začátku, bohužel ten neodchytí žádný kód tlačítka, nezobrazí se v GUI a ani se nezapíše do keymaps .xml souboru.
2. Moc dobře si uvědomuji tento problém, zkoušel jsem to především z důvodu, že v systémové složce existují keymap soubory, které nelze najít v uživatelské části, netušil jsem jestli Kodi reaguje na mnou vytvořené .xml soubory (dle mého to není možné) 
3. Možná se pletu, přeci jen jsem začátečníkem. Ale měl jsem za to, že při ovládání přes HTTP se využívá právě JSON příkazů. To je dle mého důvod proč Keymap Editor nic neodchytí ... neodchytí, nezapíše, ale rozhodně signál z aplikace pod iOS registruje, 5s odpočítávaných ke stisku nové klávesy okamžitě zmizí.
4. Betu jsem začal používat z několika důvodů, jednak jsem myslel, že se přechodem na python 3 změnilo registrování příkazů z aplikace pod iOS. Dále jsem měl chuť vyzkoušet jak je na tom podpora HDR, dále řeším problém s doplňkem AudioProfiles, který byl již pro v19 vydán, aktualizován a myslel jsem že bude změna k lepšímu. A vše nejdříve jsem zkoušel řešit i ve stabilní verzi se stejným výsledkem. 
5. S editací .xml souborů si poradím bez problému, rozhodně se nemám za profi programátora, spíš jsem nadšenec (absence aktivity na fóru pramení z nedostatku času a z toho že drtivou většinu problému si řeším nejraději sám pomocí Google a komunity která už řešila všechno možné dvakrát), ale chápu syntaxe, tagy, umím se povrchově vyznat v mnoha jazycích. 
6. Dříve myšleno ve stejné verzi, samosebou. Jen mě přišlo že to bude mít souvislost mezi sebou, tak jsem doplnil problém, třeba někoho potkalo něco podobného. Jedná se vyloženě o špatné mapování signálů z oficiální aplikace pod iOS, kde chybí přiřazení levé a pravé šipky k akcím v přehrávači tak jako je to u fyzické klávesnice.         

Díky za produktivní část. Mapovací soubory chápu a vím jak fungují. Číselný kód, meta kód v tom vidím ten problém, jediný výstup kde je signál zaznamenán je přímo log Kodi (obsažen v odkazu výše). Zařízení používané na ovládání (vyslání signálu) je oficiální aplikace "Official Kodi Remote" pro iOS. Kontext ve kterém chci tlačítka definovat bude Global, pouze se jedná o změnu "tlačítka", nikoliv o definování nové akce v určitém prostředí, akce existuje a pokud se jednoduše namapuje klávesnice tak vše funguje jak má bez problému. Jak Kodi identifikuje aplikace jenž systém ovládají vzdáleně přes místní síť bohužel nevím, jen jsem na anglickém fóru dospěl k názoru, že aplikace používá JSON příkazy k ovládání rozhraní. Teoreticky by stačilo najít část systému kde jsou definovány JSON příkazy k určitým akcím a na tomto místě pozměnit co bude potřeba. 

Ideální postup funguje o tom žádná, ale pouze pokud se jedná o periferie připojené k systému přímo ať už drátem nebo bezdrátově ... klávesnice, myš, gamepad, dálkový ovladač. U zařízení, které ovládá Kodi přes místní síť (Aplikace, ovládání => Wi-Fi, router => LAN => Kodi) to nejspíš tak jednoduché nebude, nebo ano a dělám nějakou primitivní chybu ...
No jo, to je vždycky problém, že příjemce není s úrovní znalosti vysílajícího synchornizován. Já tady často bojuji s tím, že dotyčný neví skoro nic, a proto se snažím hned zkraje vzdělávat. Zmátlo mě ten "json", které s keymap nemá moc společného a indikovalo mi, že by mohlo jít o podobný případ. Vidím ale, že se orientuješ. Tak se omlouvám, že jsem tě podcenil. Ten rozbor jsem si tedy mohl ušetřit. Podstatné asi je, že jsem nějak nevzal na vědomí tvoji zmínku o iOS zařízení, kterým to ovládáš. A pak ano, pak má json-rpc smysl, ale ne s ohedem na keymap, ale na způsob ovládání přes toto z dalších Kodi api. Upřímně, nedokáži si představit, že by api json-rpc mělo nějakou spojitost s mapováním - to jsou dvě naprosto odlišné věci. Ale člověk by neměl odmítat jakoukoliv možnost, a tak je možné, že mi něco uniká. Ale vidím to, za daného stavu mých znalostí, jako hodně nepravděpodobné.

Ještě je možné, že je to něco, co se objevilo s json-rpc verze 12 (pro Matrix) nebo, že jde o nějaké neoficiální nebo speciální rozšíření pro Apple. S tím ti asi nepomohu už tuplem. Vím že v default mapování existuje speciální soubor pro Apple (stejně jako existuje např. pro Harmony), ale to se snad týká jen Apple dálkového ovladače, ne json-rpc rozhraní. A možnost, že jde o nějakou novinku pro Matrix? Všiml jsme si, že Matrix má novou verzi json-rpc api (12), ale to je celkem obvyklé. Takhle to měly i předchozí major verze. V changelogu Matrixu jsme nic o takové možnosti nečetl. A pravděpdobně bych si toho všiml, protože jak jsem už napsal, takovou vazbu mezi json-rpc a mapování tlačítek si (zatím) nedokáži představit a pokud by existovala, bylo by to pro mne bylo minimálně zajímavé.
V pořádku, vidím jak to na fórech často vypadá, takže mám pochopení. 

Ano, jedná se o ovládání přes mobilní aplikaci pro iOS. Také si myslím že Keymap s tím nic nezmůže, proto hledám soubor-kód-xml-část kodi ... kde je definováno co má jaký JSON příkaz provést, když dorazí do Kodi přes místní síť (ovládání přes webový server). JSON příkazy, JSON-RPC, JSON API a ovládání přes mobilní aplikaci v iOS je součástí Kodi už od verze 11.0 Eden, takže mě přijde zvláštní že možnost upravit si reakce příkazů poslaných přes místní síť díky JSON není nikde uvedená či možná, já bych uvítal i kdyby šlo o složitou cestu. 

Moje pokusy v betě Matrixu byli spíš experimentem, jestli se nepovede nějaký krok dopředu, nic víc. Beta vypadá celkem použitelná a proto jsem se rozhodl ji "ponechat v obýváku". Apple dálkový ovladač lze mapovat bez problému, o tom žádná. 

No uvidíme, třeba někdo přijde s nápadem.
OK. Asi úplně nechápu, co myslíš tím "možnost upravit si reakce příkazů poslaných přes místní síť". To bych jako běžný požadavek neviděl. Přes json-rpc se posílají (kromě jiného) interní příkazy Kodi, které mají jasnou stukturu, syntaxi a význam. Myslíš to tak, že by sis třeba definoval v json-rpc nějakou zprávu a pak si ještě, někde jinde, definoval, co za akci se na základě té zprávy a jejího obsahu provede? To bych neřekl, že je to to, co by takové api mělo umět. Api je to přeci od toho, aby jasně definovalo co za funkce se jeho použitím a jak dá využít. To, jak ho použiješ v nějaké aplikaci, je věcí té aplikace, notabene, v tomto konlrétním případě, napsané právě a jen pro to, aby takové api využivala. Vkládat nezi to ještě nějaký další mezičlánek, to už se mi zdá příliš. V Kodi ostatně takový žádný není. Hledáš-li místo, kde jsou zprávy json-rpc dekódované a jsou na jejich základě volané vnitřní funkce, tak to nebude v žádném xml, to musíš případně do knihoven a modulů Kodi. A to jdeš na vrabce tedy s pořádným kanónem.

BTW Hodně o json-rpc api najdeš v Kodi wiki, ale to asi víš. Pokud chceš znát způsob používání tohoto rozhraní na straně klienů, tak je ke studiu ideální např. Github a xbmc/chorus2 nebo xbmc/Kore, ale tohle asi ty zřejmě dělat nechceš. Tak pak jedině xbmc/xbmc.
Nejspíš se navzájem nechápeme příliš. Tak to zkusím ještě co nejjednodušeji. 

Systém Kodi na Windows 10 - v mapovacích souborech .xml je definováno tlačítko "modrá" "červená" "zelená" "žlutá", které jsou často fyzicky umístěné na hardware ovladačích a je jim přiřazena často akce ve spojitosti s PVR.

V aplikaci "Official Kodi Remote" pro iOS, která ovládá Kodi z mobilního telefonu jenž je ve stejné místní síti na Wi-FI lze přidat "modré" "červené" "zelené" "žluté" tlačítko pomocí nabídky "Upravit => Více => Execute a specific action => blue (red, green, yellow) => Add action button" a používat tyto tlačítka vedle běžně využívaných co fungují bez problému.

A teď co vlastně se snažím vymyslet ... Jednoduše řečeno mít možnost nastavit, aby modré tlačítko v aplikaci na iOS udělalo mnou definovanou akci, třeba jen pozastavení přehrávání pro začátek, pak si to nahradím čím budu chtít.

Úprava klienta (ovládací aplikace) není možná jedná se o používání na iOS bez Jailbreaku, takže nemám absolutně možnost jakkoliv zasahovat do aplikací bohužel. Github jsem už procházel, ale ještě kouknu jestli něco nevyhrabu + čekám na pár reakcí od lidí právě na Githubu, tak uvidíme.
OK, házím to do koše. Zřejmě se v tomhle případě nedomluvíme, a já na to, abych to studoval, moc prostoru (a upřímně ani chuti) nemám. Snad poradí někdo, kdo zná onu iOS aplikaci.
V pořádku, nikdo neví všechno. To že píši o aplikaci běžící pod iOS je pouze konkrétní příklad, jednat se může o jakoukoliv aplikaci jenž používá webový server HTTP a příkazy JSON k ovládání Kodi, příkazy budou stejné ať už to je aplikace pro Win10, Android, iOS, Linux, Debian ...
No vidíš, a já z tvého popisu pochopil, že problém je v tom konrétním použití json-rpc v iOS a teď to najednou zobecňuješ. To je snad jasné, že json příkazy jsou nezávislé na aplikaci, která je používá, o tom se snad nemusíme bavit. Možná kdybys jasně napsal, co tedy potřebuješ, tak jsme se posunuli dál...
Mám takový pocit že jsem v prvním příspěvku dostatečně jasně shrnul co vlastně požaduji vyřešit. Konkrétně ve větě 
(05.12.2020, 22:49)Ckoro Napsal(a): [ -> ]jak správně a kde nastavit příkazy JSON, aby byl signál přiřazen nastavené akci ...

ale jsme jen lidé, nikdy se nemusí dva pochopit na 100% v prvním odstavci, od toho se vede diskuze a tvoří se fórum.
No, já to z toho tak jednozančně nepochopil. Tak zkusím odhadnout tvoji potřebu a celou diskusi shrnout:

Chceš tedy poradit v tom, jak má vypadat json zpráva, která v Kodi provede tebou požadovanou akci po stisku vybraného tlačítka v iOS aplikaci, a kterou zadáš do této aplikace pod toto tlačítko?

Pokud ano, tak pak je mou odpovědí toto https://kodi.wiki/view/JSON-RPC_API. Tam si vyber JSON-RPC Pages pro tvoji verzi Kodi, tedy v12 (Matrix) a podívej se, co máš k dispozici. Já bych začal hledat v metodách a typech Input.
Ano, už se chápeme. Teď už zbývá jen maličkost, JSON zprávy jsou jasně definované a nedají se měnit, ani upravovat v aplikaci, to mohou pouze vývojáři => takže je potřeba změnu udělat na straně systému samotného v Kodi, upravit jak má být určitá JSON zpráva vyložena a co má provést.
OK, takže v tom případě se vracím k jednomu z mých předchozích postů https://www.xbmc-kodi.cz/prispevek-vlast...9#pid96149 a platí to, co jsem tam, napsal. I když tys na to odpověděl "Nejspíš se navzájem nechápeme příliš. Tak to zkusím ještě co nejjednodušeji."

Mimochodem, pokládám to, ve světle tohoto závěru, za zbytečnou debatu a ztracený čas... 10
Bezva. Tady o sebe třeskly dva rozdílné přístupy programové analýzy s polštářem dvou nekompatibilních literárně-technických vyjadřování.

Pomohl by jeden přesný konkrétní (složitější) příklad, co se má po povelu "barevné_tlačítko" přihodi v Kodi.
(Nemyslím tím "třeba Pause a pak si to nahradím".)

Následující, pokud je mimo mísu, ignorujte:
Zřejmě jde o to, jak donutit v systému Kodi "poskytnout číselný kód" příchozího povelu od official remote.
Známé odkazy, ale... Co z následujícího bude hrát roli?
https://kodi.wiki/view/Keymap #...ano, XML, ale je tam požadovaný příkaz?
-> https://kodi.wiki/view/Smartphone/tablet_remotes
->-> https://kodi.wiki/view/Official_Kodi_Remote
->->-> https://kodi.wiki/view/Official_Kodi_Remote/iOS #...nemám a zde ani nevidím barevná tlačítka..?
Celkem jsi to vystihl  1

Beru za slovo a pokusím se co nejvíce názorně nyní. 
Takže v aplikaci pro iOS (Offical Remote Kodi) postupuji následovně
[Obrázek: 1.png] [Obrázek: 2.png] [Obrázek: 3.png] [Obrázek: 4.png] [Obrázek: 5.png] [Obrázek: 6.png] [Obrázek: 7.png] [Obrázek: 8.png] [Obrázek: 9.png]

Po "stisknutí" tlačítka se provede příkaz, ten je zaznamenán v Logu Kodi takto
 
Kód:
 
2020-12-10 17:34:20.096 T:8260    DEBUG <CWebserver[2020]>: request received for /jsonrpc
2020-12-10 17:34:20.097 T:8260    DEBUG <general>: JSONRPC: Incoming request: {"jsonrpc":"2.0","method":"Input.ExecuteAction","id":-1955814432,"params":{"action":"blue"}}
2020-12-10 17:34:21.709 T:8260    DEBUG <CWebserver[2020]>: request received for /jsonrpc
2020-12-10 17:34:21.709 T:8260    DEBUG <general>: JSONRPC: Incoming request: {"jsonrpc":"2.0","method":"Input.ExecuteAction","id":-931608937,"params":{"action":"blue"}}
2020-12-10 17:34:23.393 T:8260    DEBUG <CWebserver[2020]>: request received for /jsonrpc
2020-12-10 17:34:23.393 T:8260    DEBUG <general>: JSONRPC: Incoming request: {"jsonrpc":"2.0","method":"Input.ExecuteAction","id":367021635,"params":{"action":"blue"}}
2020-12-10 17:39:26.986 T:10956   DEBUG <CWebserver[2020]>: request received for /jsonrpc
2020-12-10 17:39:26.986 T:10956   DEBUG <general>: JSONRPC: Incoming request: {"jsonrpc":"2.0","method":"Player.PlayPause","id":-1141605563,"params":{"playerid":1}}

Přesněji jsem 3x stiskl tlačítko "blue" to neudělá v rozhraní zcela nic a 1x tlačítko "PlayPause" které samosebou reaguje přesně tak jak má. Keymap žádné ID tlačítka neodchytí, ale stisk registruje.

A konkrétní příkaz co se má provést po stisku tlačítka "blue" - Jedná se o script pro doplněk AudioProfiles, který změní profil zvukového výstupu na následující. 
Kód:
 
RunScript(script.audio.profiles,0)
Programátor kódu nejsem, jen se chápu připravených řešení ...a ještě ne těch složitých. To jen k tomu, co zvládám.

Problém se tedy, jak chápu, dělí na dvě části.
1. Pokud pošleš z aplikace iOS povel tlačítka, který má v Kodi "viditelný" ID kód, jsi už teď schopen k němu navázat spuštění uvedeného scriptu pro AudioProfiles a ono to zafunguje. Správně?
2. Co je potřeba, vymyslet, jak z "programového modulu Kodi", který se stará o detekci příchozích ovládacích povelů, vydolovat nějaký ID kód (nějak definovanou odezvu), kterou navážeš podobným mechanismem, jako v bodu jedna.
Takže jde o to, jak k tomu přidělit i třeba vymyšlené ID a dostat ho do Keymap (nebo tam, kde spouštíš script). Asi tak?

Otázka navíc - lze definovat v aplikaci iOS jiná vlastní tlačítka, která ID kód v Kodi mají (ukážou)?.
A ještě fabulace - možná je ID z některých tlačítek mimo definovany obor toho "detekčního modulu Kodi", a on tato ID zahodí. Pak by nebylo jak je rozlišit.

Tak jsem jen napsal úvahy kolem problému, lépe asi k řešení přispět neumím.