Controlar os canais na Vbox via Script (e Google Assistant)

DamnDaniel7

Membro
Boas,

Após algum tempo à volta do vbox consegui perceber como é que app Vodafone TV muda o canal na Vbox. Basicamente a App no tlm verifica se existe alguma vbox na rede local e se encontrar faz um POST REQUEST para o ip_da_vbox na porta 3030 com um json composto por estes campos:

{"code": string,"command":"pair","domainid": string,"server_port":"8080","server_url":"ws://192.168.1.67","userid":string}

os campos que estão como string ou são campos que variavam ou são campos que suponho serem ids únicos associados a cada box/utilizador. A forma como obtive estes valores foi através do wireshark e mitm.

Este pedido serve para a vbox iniciar uma conexão através de websockets, onde o servidor é no dispositivo com a app e o cliente é a vbox.
Sempre que muda-se de canal na vbox (via comando ou app) o seguinte json é enviado (da vbox para o servidor):

{"playback_state":"playing","content_type":"trickmode","content_id":"636512","content_fileid":"","position":852,"audiotrack":{"eng":true}}

Pelo que percebi o "playback_state" pede ter 2 estados: playing ou pause, o "content_type" pode ser "live" ou "trickmode", o "content_id" é id único que indica o canal, o "content_fileid" por norma é vazio a não ser nos canais com banner de publicidade no zapping onde nesse caso tem um valor (e o content_id é undefinied), o campo position acho que é a posição na duração do programa, o "audiotrack" indica quais as opções de audio e subtitles para o canal e programa. Isto permite facilmente dar track do canal atual na vbox.

Para mudar de canal basta enviar este json do servidor para a vbox:

{
"command": "playback_play",
"content_fileid": "",
"content_type": "live",
"content_id": "636331",
"domain_id": string,
"position": 0,
"userid": string
}

Após descobrir isto criei um simples websocket server em nodejs e meti a correr na minha raspberry pi 4. Também criei uma api que recebe GET requests com o nome do canal e converte para o id correspondente. Em seguida criei um comando para o google assistant no ifttt que quando alguém diz "change channel to ..." faz um pedido à api que tenta perceber se existe algum canal com esse nome e converte para o id e posteriormente informa o servidor para avisar a vbox para mudar de canal.

Isto apesar de ter funcionado tem alguns problemas:
1- depende do ficheiro json que criei com o nome do canal e o id. No ficheiro que criei não incluí os canais sd e só fui até ao Discovery channel. Também não consegui obter o id dos canais premium pk não os tenho subscrito.
2- uma vez que o google assistant nas colunas (nest mini, google home, ...) não suporta pt-pt, só consegui testar em ingles e pt-br, em ingles funciona bem para canais como o hollywood e fox comedy mas péssimo para canais portugueses, com o pt-br já é possível dizer os canais portugueses mas o ifttt não suporta portugues tanto quanto sei.
3- também para tentar ao máximo obter uma match do canal e diminuir erros que podem ocorrer no text-to-speech da google, calculo a similaridade entre o nome do canal dito e a lista de nomes de todos os canais, e retorno o canal com similaridade máxima obtida e o valor dessa similaridade (entre 0 e 1). Se o valor da similaridade for superior a 0.8 é feito a alteração do canal.

P.S: Apesar de ser possível mudar de canal, não vi nenhuma opção que permita alterar o volume da vbox.
 
Back
Topo