将小米智能家居网关变成专栏

您好, Habra Giktayms阅读器! 今天,我将教您如何从无用的功能中获得帮助。 我们将以臭名昭著的小米公司及其产品为例,以ZigBee网关的形式接收智能家居。

小米智能家居组件的所有者知道,大多数组件都可以通过zigbee或蓝牙进行通信。 我们将对zigbee设备版本2的网关感兴趣,因为 在那里出现了广播功能,默认情况下只能播放中文的互联网广播电台。


当然,Internet上有一个项目,您可以用它轻松地添加各种其他广播电台,但是我们将采用另一种方式,并从网关制作无线扬声器。

你需要什么


为了成功执行该操作,您需要:

  • 实际上,ZigBee网关版本至少为2(其中出现了广播)
  • 任何网络服务器
  • 在选定国家/地区中存在根并已安装软件MiHome的智能手机

我们该怎么办?


为了使无线扬声器脱离我们的网关,您需要假装成为互联网广播流,并训练您需要向我们而不是中文API发送电台列表的网关。

为了了解电话上的应用程序如何与中文服务器进行通信,您可以嗅探流量,但是我将避免此类痔疮的发生:)如果您想扩大视野,可以选择执行此操作。

因此,我们将对三个请求以及相应的中文API的答案感兴趣,该API位于api.ximalaya.com:

  • / openapi-gateway-app /直播/广播
  • / openapi-gateway-app /实时/ get_radios_by_ids
  • / openapi-gateway-app /搜索/收音机

openapi这个词暗示了一些开放的东西,但是我没有找到公共规范。 该请求带有我们不需要的参数,因此我们将其丢弃。

我使用nginx作为Web服务器,这是配置:

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; } } 

在Web服务器的根目录中创建相同的层次结构。 此外,在Web服务器根目录中创建radio和hls文件夹。 这些路径上的所有调用都应输出相同的JSON,因此使它们链接到文件(我们将其称为stations.json)是有意义的。

其内容如下:

 { "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 } ] } 

如您所见,这里的一切都很简单-我们提供了一系列广播,指示在哪里寻找流。 如果您有多个网关-您可以建立多个通道。 重要说明-必须从网关访问此处指示的地址!

为了使应用程序能够看到您的更改,您需要编辑智能手机上的主机并注册api.ximalaya.com以匹配您的Web服务器的地址。

现在介绍如何获取信息流。 我决定从声卡从部署Web服务器的PC上输出所有内容。 为此,我们将使用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 

注意Web服务器的路径和地址-用您的替换。

原则上,这就是成功工作的全部-运行ffmpeg脚本,它将开始使用声卡中的声音创建片段,启动手机上的应用程序并选择您的电台-一两秒钟后,PC的声音就会消失。

Source: https://habr.com/ru/post/zh-CN411003/


All Articles