Table of Contents generated with DocToc
设备需要在上线时候发布状态信息到 topic:/${uuid}/status/onoffline
这里的uuid指的是设备的唯一标识,例如iccid或者deviceId
示例 :设备发布的主题topic, /AIrSMArT_044997909151/status/onoffline
如在线会发布 payload:{"uuid":"AIrSMArT_044997909151", "state":"online"}
离线会发布 payload:{"uuid":"AIrSMArT_044997909151", "state":"offline"}
手机订阅设备状态主题 /${uuid}/status/onoffline
这里的uuid还是设备的uuid
示例:
手机端订阅主题topic, /AIrSMArT_044997909151/status/onoffline
如在线会收到 {"uuid":"AIrSMArT_044997909151", "state":"online"}
离线会收到 {"uuid":"AIrSMArT_044997909151", "state":"offline"}
topic: /${uuid}/user/sub_control
手机端发布,此uuid为设备端的uuid
topic: /${uuid}/user/pub_response
手机端订阅,此uuid为设备端的uuid
topic: /${uuid}/user/sub_control
设备端订阅,此uuid为设备端的uuid
topic: /${uuid}/user/pub_response
设备端发布,此uuid为设备端的uuid
payload:
参数名称 | 格式 | 是否必须 | 说明 |
---|---|---|---|
DstDeviceName | string | 是 | 目的设备/手机的uuid |
SrcDeviceName | string | 是 | 发送设备/手机的uuid |
type | string | 是 | 控制类型见2.2和2.3 |
other | json | 否 | type对应的消息数据 |
手机发布消息的主题topic: /${uuid}/user/sub_control
,
设备端订阅主题topic: /${uuid}/user/sub_control
,
此uuid都为设备端的uuid
以下为手机发布消息的payload:
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
DstDeviceName | string | 是 | 目标设备的uuid |
SrcDeviceName | string | 是 | 手机的uuid |
type | string | 是 | 命令类型见以下2.2.1到2.2.last |
标题 | 格式 | 是否必填 | 说明 |
---|---|---|---|
update_file | string | 是 | 升级文件的URL |
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "update",
"other": {
"product_mode": "MW-X(4G)",
"version": "0.0.5",
"update_file": "url"
}
}
可以不带other,不带other表示直接播放设备当前的歌曲
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "play",
"other": {
"url": "",
"media_data": "",
"user_id": "1756",
"timestamp": "0",
"channel_id": 13,
"songAlbumID":"",
"resource_from": "0//11//1582620219539591170//",
"order": "0",
"version": 3,
"is_debug": 1
}
}
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "next",
}
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "previous",
}
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "pause",
}
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "stop",
}
参数名称 | 格式 | 是否必须 | 说明 |
---|---|---|---|
position | string | 是 | 播放进度(单位秒) |
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "seek_media",
"other": {
"position": "120"
}
}
设备收到指令后会把设备播放的状态和进度回复给手机,见2.3.1 设备发送播放信息给手机 get_position
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "get_position",
}
设备收到指令后会把设备播放的状态和进度回复给手机
因为发送mqtt消息要钱,就把播放状态并入到了 获取播放文件的进度。(以前是使用了阿里云的要钱)
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "get_play_info",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
volume | int | 是 | 设备音量值,范围(0-100) |
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "volume_set",
"other": {
"volume": 99
}
}
设备收到此指令后会把设备的音量回复给手机。
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "volume_get",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
mute | int | 是 | 是否静音,取值0,1(0为不静音,1为静音) |
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "mute_set",
"other": {
"mute": 1
}
}
设备收到此指令后会把设备是否静音回复给手机。
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "mute_get",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
low_battery_notify | int | 是 | 低电量是否提示,0不提示,1提示 |
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "low_battery_notify_set",
"other": {
"low_battery_notif": 1
}
}
设备收到指令后会把设备信息回复给手机,设备回复信息见2.3.2 设备发送设备信息给手机 get_dev_info
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "get_dev_info",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
enable | string | 是 | 是否启用 |
alarm_id | string | 0/1 | 区分闹钟 |
week_actives | string | 是 | 从周日到周六的闹钟重复状态。 |
operation | string | 是 | on/off 打开关闭 |
current_timestamp | string | 是 | 当前时间戳,如果onoff时间戳在当前时间以前,当前时间戳设置为第二天00:00:00 |
{
"DstDeviceName":"device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "alert_set",
"other": {
"enable": "1",
"action": "update",
"alarm_id": "0",
"alarm_name": "close",
"operation": "off",
"weekly_repeat": "0",
"song_uri": "-1",
"week_actives": [0, 0, 0, 0, 0, 0, 0],
"current_timestamp": "2023-04-11 11:13:02",
"on_off_timestamp": "11:23:02"
}
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
update_type | string | 是 | all:更新所有/sigle更新当前频道/audition将临时试听替换到正式频道 |
channel_id | string | 是 | 需要操作的频道ID |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "channel_update",
"other": {
"user_id": "5",
"channel_id": "1",
"version": 3,
"is_debug": 1
}
}
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "device_name_set",
"other": {
"dev_name": "xxx",//设备名称
}
}
小程序文件读写需要权限,小程序更新零时频道不用此方法,设备可以通过后台的接口获取到临时频道的音频数据
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "m3u_update",
"other": {
"url": "",
"user_id": "5",
"channel_id":"3",
"order": 0
}
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
time | int | 是 | 单位秒,如果为-1表示关闭自动休眠 |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "pause_shutdown_set",
"other": {
"time": 60,//单位秒,如果为-1表示关闭自动休眠
}
}
设备收到此指令后会把设备名称回复给手机。
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "get_dev_name",
}
设备收到此命令后判断是否需要云小薇授权,如果设备已经授权过则返回0,需要授权返回1(并返回authReqInfo和dsn),需要QQ音乐授权返回2
完整示例:
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "start_dm_auth",
"other": {
"version":2
"is_debug":2
}
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
clientId | string | 是 | 云小微语音服务用于标识一个设备的id,通过DMSDK接口获取 |
authRespInfo | string | 是 | DMSDK通过绑定设备接口获取到的JSON字符串,需要将这串信息原样传给TVSSDK,完成最终的绑定授权 |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "send_dm_clientid",
"other": {
"clientId": "xxxxxx",
"authRespInfo": {
"authCode": "auc_9d3858b0f0f62be6f9921d0d34d3a898beb025c3",
"sessionId": "1681181481"
},
"version": 3,
"is_debug": 1
}
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
enable | int | 如果为1表示启用 2表示禁用 |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "set_tts_enable",
"other": {
"enable": 1
}
}
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "get_dm_auth",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
enable | int | 如果为1表示启用 0表示禁用 |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "set_netmode_auto",
"other": {
"enable": 1
}
}
设备发布消息的主题topic: /${uuid}/user/pub_response
,
手机端订阅主题topic: /${uuid}/user/pub_response
,
此uuid都为设备端的uuid
说明:2.2的上述设备控制操作,都应该有回复
以下为设备发布消息的payload:
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
DstDeviceName | string | 是 | 目标手机的uuid |
SrcDeviceName | string | 是 | 设备的uuid |
type | string | 是 | 要回复的对应的类型,如回复volume_set 则写volume_set |
code | int | 是 | 操作状态码,200代表成功,其他代表失败 |
reseaon | string | 否 | 如果200,可以不带,其他必须带错误原因 |
注意:这里是设备端发布的payload,注意和手机端发布的payload的DstDeviceName字段和SrcDeviceName字段的区分
code 值描述:
错误码(code) | 错误原因(reseaon) |
---|---|
-100 | DstDeviceName不一致(设备端本地保存的DstDeviceName和收到的SrcDeviceName不一致) |
注意:手机端发送play等命令,设备端收到将会把SrcDeviceName(手机的uuid)保存到本地为DstDeviceName,然后其他手机发送其他命令过来,因为设备端保存到本地的手机的uuid和收到的SrcDeviceName不一致,设备端应回复code为-100。
场景描述:
手机端发送控制类型 get_position,设备回复播放信息给手机端。
设备端按键切换歌曲,播放完成自动切歌,设备端都需要主动上报播放信息给手机端。
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
RelTime | number | 是 | 播放进度单位秒 |
Duration | number | 是 | 节目时长单位秒 |
url | string | 否 | 节目url |
PlayState | number | 是 | 播放状态:1播放,2暂停,3停止,4缓冲。 |
songInfoID | string | 是 | 歌曲id |
title | string | 是 | 节目标题 |
channel | number | 是 | 频道编号 |
PlayMode | number | 是 | 播放模式 |
songFrom | string | 是 | 歌曲来源 |
songAlbumID | string | 是 | 歌曲专辑id |
artist | string | 是 | 歌手/主播名称 |
albumURI | string | 是 | 专辑图片地址 |
SongType | number | 是 | 音频类型 和服务器的枚举audio_type一致 |
userid | string | 是 | 用户id |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"code": 200,
"type": "get_position",
"other": {
"songInfoID": "5010396515297942022",
"songFrom": "2",
"songAlbumID": "15910549044569856",
"artist": "荔枝FM",
"title": "哪一位上帝会原谅我们呢?",
"url": "http://cdn.lizhi.fm/audio/2018/11/19/5010396515297942022_hd.mp3",
"albumURI": "http://cdn.lizhi.fm/audio_cover/2018/11/19/2704554347415155207_320x320.jpg",
"Duration": 1280,
"RelTime": 875,
"channel": 7,
"SongType":1,//音频类型 和服务器的枚举audio_type一致
"PlayState":3,// 播放状态:1播放,2暂停,3停止,4缓冲。
"PlayMode": 0, //播放模式:0:REPEAT_ALL列表循环,1:REPEAT_ONE单曲循环2:SHUFFLE 随机播放
"userid": "1756"
}
}
场景描述:
手机端发送控制类型 get_dev_info,设备回复设备信息给手机端。
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
Guid | string | 是 | 设备的唯一标识码uuid |
userid | string | 是 | 用户id |
ProdModel | string | 是 | 产品型号 |
sim_iccid | string | 否 | sim_iccid |
esim_iccid | string | 否 | esim_iccid |
SoftVer | string | 是 | 固件版本号 |
Firmware | string | 是 | 方案商名称 |
Power | number | 是 | 电量百分比(0-100)>100表示充电中 |
lowBatteryNtf | number | 是 | 低电量提醒0不提示,1提示 |
Volume | number | 是 | 设备音量 |
Mute | number | 是 | 设备是否静音,取值0,1(0为不静音,1为静音) |
pauseShutdown | number | 是 | 暂停自动休眠时间,单位秒,如果为-1表示关闭自动休眠 |
PlayState | number | 否 | 播放状态:1播放,2暂停,3停止,4缓冲。 |
PlayMode | number | 否 | 播放模式 |
devName | String | 是 | 设备名称 |
deviceId | String | 否 | deviceId |
deviceSecret | String | 否 | deviceSecret |
is_tts_enable | number | TTS语音播放是否启用 ,1表示启用,2表示禁用 | |
SignalQuality | number | 否 | 信号质量 |
CardIndex | number | 是 | 0是内卡,1是外卡 |
CardSum | number | 是 | 卡号数,一般是4G的内外卡 |
NetModel | number | 是 | 当前MQTT设备的联网方式 ,1表示4G,2表示Wi-Fi |
is_netmode_auto | number | 否 | 当前MQTT设备是否自动切换网络 ,0表示不能,1表示能 |
imei | string | 是 | 4G芯片的imei号码 |
mid | number | 否 | mid |
iccid | string | 否 | Sim卡片的iccid号码 |
deviceDSN | string | 是 | 云小微的dsn号码 |
alarm | json数组 | 是 | 开关机的闹钟设置,如果为[] 则使用默认的设置。 |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"code": 200,
"type": "get_dev_info",
"other": {
"Guid": "AIrSMArT_210052088989",
"userid": "1756",
"ProdModel": "MW-Mate X(4G_WIFI)",
"sim_iccid": "",
"esim_iccid": "",
"SoftVer": "1.7.5",
"Firmware": "RTOS",
"Power": 80,
"lowBatteryNtf": 0,
"Volume": 8,
"Mute": 0,
"pauseShutdown": 0,
"PlayState": 1,
"PlayMode": 0,
"devName": "猫王音响·Mate_X",
"deviceId": "",
"deviceSecret": "",
"is_tts_enable": 1,
"SignalQuality": 100,
"CardIndex": 0,
"CardSum": 2,
"NetModel": 2,
"is_netmode_auto": 0,
"Imei": "861210052088989",
"mid": "",
"deviceDSN": "977171045859594240",
"alarm": [{
"alarm_id": "0",
"alarm_name": "",
"current_timestamp": "",
"on_off_timestamp": "",
"operation": "",
"song_uri": "",
"weekly_repeat": "",
"enable": "",
"action": "",
"week_actives": [0, 0, 0, 0, 0, 0, 0]
}, {
"alarm_id": "1",
"alarm_name": "",
"current_timestamp": "",
"on_off_timestamp": "",
"operation": "",
"song_uri": "",
"weekly_repeat": "",
"enable": "",
"action": "",
"week_actives": [0, 0, 0, 0, 0, 0, 0]
}]
}
}
场景描述: 手机端发送控制类型 get_dev_name,设备回复设备名称给手机端
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": " get_dev_name",
"other": {
"devName": "猫王· 旅行者1号",
}
}
场景描述:
当设备播放状态发生改变,主动发送给播放状态给手机端
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": "play_state",
"other": {
"PlayState": 1 //播放状态:1播放状态,2暂停状态,3停止状态,4缓冲状态。
}
}
场景描述:
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": "volume_get",
"code": 200,
"other": {
"volume": 99 //设备音量
}
}
场景描述: 设备切换网络状态,设备端发送网络类型给手机端
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
networkType | number | 是 | Mobile:0,wifi :1 |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": "get_net_type",
"other": {
"networkType": 0//Mobile:0,wifi :1
}
}
场景描述:
1.设备收到app发送给设备的start_dm_auth命令,
设备已经授权过了,回复app 发送code = 0;
没有通过云小薇授权过回复 code = 1,并且把dsn和authReqInfo发送给app;
2.设备没有授权,或者token过期等等主动向app发送开始授权命令
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
code | number | 是 | 已经授权过了:0,没有通过云小薇授权 :1 |
dsn | String | 否 | 提供给云小薇的设备唯一标识,code为1,必填,其他不用填 |
authReqInfo | String | 否 | 由智能设备根据规则生成,生成规则见authReqInfo说明,code为1,必填,其他不用填 |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": "start_dm_auth",
"other": {
"code":1,
"dsn": "xx",
"authReqInfo": "xxxxxx"
}
}
场景描述:
1.设备收到get_dm_auth命令后,把Authorization发送给App;
2.设备授权成功(通过clientid授权)后,或者刷新token(刷票)之后把Authorization发送给App;
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
dsn | String | 是 | 提供给云小薇的设备唯一标识 |
authorization | String | 是 | 授权或者刷票得到的AccessToken |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"type": "get_dm_auth",
"other": {
"dsn": "xx",
"authorization": "xxxxxx"
}
}