设备需要在上线时候发布状态信息到 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": "http: //ls.qingting.fm/live/1006/24k/20190430/09/2437-082-3165.ts",
"media_data": "",
"user_id": "5",
"timestamp": "1234567890",
"channel_id": "5",
"order": "20",
"resource_from": ""
}
}
完整示例:
{
"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": "volume_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",
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
week_actives | string | 是 | 从周日到周六的闹钟重复状态。 |
{
"DstDeviceName":"device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "alert_set",
"other": {
"alarm_id": "123",
"alarm_name": "sfd",
"on_off_timestamp": "09:00:00",
"current_timestamp": " ",
"operation": "off",
"song_uri": "",
"weekly_repeat": "1",
"enable": "1",
"week_actives": [0, 0, 0, 0, 0, 1, 0],
"action": "update"
}
}
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
update_type | string | 是 | all:更新所有/sigle更新当前频道/audition将临时试听替换到正式频道 |
channel_id | string | 是 | 需要操作的频道ID |
{
"DstDeviceName": "device_uuid",
"SrcDeviceName": "mobile_uuid",
"type": "channel_update",
"other": {
"user_id": "5",
"timestamp": "1234567890",
"update_type": "all/sigle/audition",
"channel_id": "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",
"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",
}
设备发布消息的主题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 | 是 | 专辑图片地址 |
audioType | number | 是 | 音频类型 和服务器的枚举audio_type一致 |
{
"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,
"audioType":1,//音频类型 和服务器的枚举audio_type一致
"PlayState":3,// 播放状态:1播放,2暂停,3停止,4缓冲。
"PlayMode": 0 //播放模式:0:REPEAT_ALL列表循环,1:REPEAT_ONE单曲循环2:SHUFFLE 随机播放
}
}
场景描述:
手机端发送控制类型 get_dev_info,设备回复设备信息给手机端。
参数名称 | 格式 | 是否必填 | 说明 |
---|---|---|---|
lowBatteryNtf | number | 是 | 低电量提醒0不提示,1提示 |
imsi | string | 否 | Sim卡片的imsi号码 |
imei | string | 否 | 4G芯片的imei号码 |
iccid | string | 是 | Sim卡片的iccid号码 |
sn | string | 是 | 设备sn号码 |
ProdModel | string | 是 | 产品型号 |
SoftVer | string | 是 | 方案是名称 |
Firmware | string | 是 | 固件版本号 |
PlayState | number | 否 | 播放状态:1播放,2暂停,3停止,4缓冲。 |
PlayMode | number | 否 | 播放模式 |
Volume | number | 是 | 设备音量 |
Mute | number | 是 | 设备是否静音,取值0,1(0为不静音,1为静音) |
Power | number | 是 | 电量百分比(0-100)>100表示充电中 |
alarm | json数组 | 是 | 开关机的闹钟设置,如果为[] 则使用默认的设置。 |
devName | String | 是 | 设备名称 |
pauseShutdown | number | 是 | 暂停自动休眠时间,单位秒,如果为-1表示关闭自动休眠 |
{
"DstDeviceName": "mobile_uuid",
"SrcDeviceName": "device_uuid",
"code": 200,
"type": "get_dev_info",
"other": {
"Uid": "164285",
"Guid": "uuid:AIrSMArT_046314509004",
"ProdModel": "MW-X",
"imsi": "460046314509004",
"sn": "0123456789ABCDEF",
"imei": "460046314509003",
"iccid": "89860443161870479004",
"SoftVer": "1.1.3",
"Firmware": "AirSmart",
"Power": 100,
"lowBatteryNtf": 0,
"Volume": 20,
"Mute": 0,
"PlayState": 1,
"PlayMode": 1,
"devName": "猫王· 旅行者1号",
"pauseShutdown": 60,
"alarm": [{
"alarm_id": "123",
"alarm_name": "sfd",
"on_off_timestamp": "09:00:00",
"current_timestamp": "",
"operation": "off",
"song_uri": "",
"weekly_repeat": "1",
"enable": "1",
"week_actives": [0, 0, 0, 0, 0, 1, 0],
"action": "update"
},
{
"alarm_id": "123",
"alarm_name": "sfd",
"on_off_timestamp": "09:00:00",
"current_timestamp": "",
"operation": "on",
"song_uri": "",
"weekly_repeat": "1",
"enable": "1",
"week_actives": [0, 0, 0, 0, 0, 1, 0],
"action": "update"
}
]
}
}
场景描述: 手机端发送控制类型 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
}
}