Transforme o gateway doméstico inteligente da Xiaomi em uma coluna

Olá, leitor do Habra Giktayms! Hoje vou ensiná-lo a se beneficiar de funcionalidades inúteis. Receberemos o exemplo de uma casa inteligente da notória empresa Xiaomi e seu produto na forma de um gateway ZigBee.

Os proprietários dos componentes domésticos inteligentes da Xiaomi sabem que a maioria deles é dividida em quem pode se comunicar via zigbee ou bluetooth. Estaremos interessados ​​no gateway para dispositivos zigbee versão 2, porque foi lá que apareceu a funcionalidade de rádio, que por padrão só pode reproduzir estações de rádio da Internet chinesas.


Obviamente, existe um projeto na Internet com o qual você não pode adicionar várias outras estações de rádio, mas seguiremos o outro caminho e criaremos um alto-falante sem fio a partir do gateway.

Do que você precisa?


Para a implementação bem-sucedida da operação, você precisa:

  • Na verdade, a versão do gateway ZigBee é pelo menos 2 (um rádio apareceu nele)
  • Qualquer servidor web
  • Um smartphone no qual existe um software raiz e instalado MiHome com o país selecionado China Mainland

O que vamos fazer?


Para tornar um alto-falante sem fio fora do nosso gateway, você precisa fingir ser um fluxo de rádio da Internet e treinar o gateway que precisa bater na lista de estações para nós, e não para a API chinesa.

Para entender como o aplicativo no telefone se comunica com os servidores chineses, você pode cheirar o tráfego, mas eu evitarei essas hemorróidas :) Se você deseja expandir seus horizontes, pode fazer isso opcionalmente.

Portanto, estaremos interessados ​​em três solicitações e, consequentemente, na resposta à API chinesa, que fica em api.ximalaya.com:

  • / openapi-gateway-app / ao vivo / rádios
  • / openapi-gateway-app / live / get_radios_by_ids
  • / openapi-gateway-app / pesquisa / rádios

A palavra openapi no caminho sugere algo aberto, mas não encontrei uma especificação pública. A solicitação vem com parâmetros que não são necessários para nossos propósitos, portanto os descartamos.

Eu usei o nginx como um servidor web, aqui está a configuração:

server { listen *:80; server_name api.io.mi.com ximalaya.com www.ximalaya.com api.ximalaya.com mobile.ximalaya.com open.ximalaya.com ximiraga.ru www.ximiraga.ru; root /opt/xiaomiradio/www; index index.php index.html index.htm; access_log /var/log/nginx/radio_access.log; error_log /var/log/nginx/radio_error.log; location @ximalaya { proxy_pass http://api.ximalaya.com; } } 

Crie a mesma hierarquia na raiz do seu servidor web. Além disso, crie as pastas radio e hls na raiz do servidor web. Todas as chamadas nesses caminhos devem produzir o mesmo JSON, portanto, faz sentido vinculá-las a um arquivo, que chamaremos de stations.json

Aqui está o seu conteúdo:

 { "total_page":1, "total_count":1, "current_page":0, "radios":[ { "id":527782023, "kind":"radio", "program_name":"AirSound1", "radio_name":"AirSound1", "radio_desc":"", "schedule_id":0, "support_bitrates":[ 64 ], "rate24_aac_url":"", "rate64_aac_url":"http://<    >/hls/live1.m3u8", "rate24_ts_url":"", "rate64_ts_url":"", "radio_play_count":1, "cover_url_small":"http://<    >/radio/527782023/cover_small.png", "cover_url_large":"http://<    >/radio/527782023/cover_big.png", "updated_at":0, "created_at":0 } ] } 

Como você pode ver, tudo é simples aqui - fornecemos uma série de rádios indicando onde procurar o fluxo. Se você tiver vários gateways - poderá criar vários canais. Uma observação importante - o endereço indicado aqui deve estar acessível a partir do gateway!

Para que o aplicativo veja suas alterações, você precisa editar os hosts no seu smartphone e registrar api.ximalaya.com para corresponder ao endereço do seu servidor web.

Agora, sobre como obter o fluxo. Decidi enviar tudo da minha placa de som a partir do PC no qual o servidor da web está implantado. Para isso, usaremos o ffmpeg:

 #!/bin/bash ffmpeg -f alsa -i hw:Loopback,1,0 -c:a libfdk_aac -b:a 64k -f ssegment -segment_list /opt/xiaomiradio/hls/live1.m3u8 -segment_list_flags +live -segment_time 1 -segment_list_size 1 -segment_wrap 5 -segment_list_entry_prefix http://<    >/hls/ /opt/xiaomiradio/hls/64%03d.aac 

Preste atenção aos caminhos e endereço do servidor da Web - substitua o seu.

Em princípio, isso é tudo para um trabalho bem-sucedido - execute o script ffmpeg, ele começará a criar segmentos com som da sua placa de som, inicie o aplicativo no telefone e selecione sua estação - depois de um ou dois segundos, o som do PC deve sair.

Source: https://habr.com/ru/post/pt411003/


All Articles