¡Hola, lector de
Habra Giktayms! Hoy te enseñaré cómo ser útil a partir de funcionalidades inútiles. Recibiremos el ejemplo de un hogar inteligente de la famosa compañía Xiaomi y su producto en forma de una puerta de enlace ZigBee.
Los propietarios de componentes para el hogar inteligente de Xiaomi saben que la mayoría de ellos se dividen en aquellos que pueden comunicarse a través de zigbee o bluetooth. Estaremos interesados en la puerta de enlace para dispositivos zigbee versión 2, porque Fue allí donde apareció la funcionalidad de radio, que por defecto solo puede reproducir estaciones de radio de Internet chinas.

Por supuesto, hay un proyecto en Internet con la ayuda del cual no es difícil agregar otras estaciones de radio, pero haremos lo contrario y haremos un altavoz inalámbrico desde la puerta de enlace.
Que necesitas
Para completar con éxito la operación que necesita
- En realidad, la versión de la puerta de enlace ZigBee es al menos 2 (apareció una radio)
- Cualquier servidor web
- Un teléfono inteligente en el que hay un software raíz e instalado MiHome con el país seleccionado China continental
Que haremos
Para hacer un altavoz inalámbrico fuera de nuestra puerta de enlace, debe pretender ser una transmisión de radio por Internet y entrenar la puerta de enlace que debe incluir en la lista de estaciones para nosotros, y no para la API china.
Para comprender cómo se comunica la aplicación en el teléfono con los servidores chinos, puede detectar el tráfico, pero lo salvaré de estas hemorroides :) Si desea expandir sus horizontes, puede hacerlo opcionalmente.
Por lo tanto, nos interesarán tres solicitudes y, en consecuencia, la respuesta a la API china, que se encuentra en api.ximalaya.com:
- / openapi-gateway-app / live / radios
- / openapi-gateway-app / live / get_radios_by_ids
- / openapi-gateway-app / search / radios
La palabra openapi en el camino insinúa algo abierto, pero no encontré una especificación pública. La solicitud viene con parámetros que no son necesarios para nuestros propósitos, por lo que los descartamos.
Usé nginx como servidor web, aquí está la configuración:
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; } }
Cree la misma jerarquía en la raíz de su servidor web. Además, cree las carpetas radio y hls en la raíz del servidor web. Todas las llamadas en estas rutas deberían generar el mismo JSON, por lo que tiene sentido hacer que se vinculen a un archivo, al que llamaremos estaciones.json
Aquí están sus contenidos:
{ "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 puede ver, aquí todo es simple: regalamos una serie de radios que indican dónde buscar la transmisión. Si tiene varias puertas de enlace, puede hacer varios canales. Una nota importante: ¡la dirección indicada aquí debe ser accesible desde la puerta de enlace!
Para que la aplicación vea sus cambios, debe editar los hosts en su teléfono inteligente y registrarse en api.ximalaya.com para que coincida con la dirección de su servidor web.
Ahora sobre cómo obtener la transmisión. Decidí enviar todo desde mi tarjeta de sonido desde la PC en la que está implementado el servidor web. Para esto usaremos ffmpeg:
Preste atención a las rutas y la dirección del servidor web; sustituya la suya.
En principio, todo esto es para un trabajo exitoso: ejecute el script ffmpeg, comenzará a crear segmentos con sonido de su tarjeta de sonido, iniciará la aplicación en el teléfono y seleccionará su estación; después de un segundo o dos, el sonido de la PC debería desaparecer.