mqtt设备控制命令.md 26 KB

Table of Contents generated with DocToc

mqtt设备控制命令

1.设备的在线和离线

1.1 设备端

设备需要在上线时候发布状态信息到 topic:/${uuid}/status/onoffline

这里的uuid指的是设备的唯一标识,例如iccid或者deviceId

示例 :设备发布的主题topic, /AIrSMArT_044997909151/status/onoffline

如在线会发布 payload:{"uuid":"AIrSMArT_044997909151", "state":"online"}

离线会发布 payload:{"uuid":"AIrSMArT_044997909151", "state":"offline"}

1.2 手机端

手机订阅设备状态主题 /${uuid}/status/onoffline 这里的uuid还是设备的uuid

示例: 手机端订阅主题topic, /AIrSMArT_044997909151/status/onoffline

如在线会收到 {"uuid":"AIrSMArT_044997909151", "state":"online"}

离线会收到 {"uuid":"AIrSMArT_044997909151", "state":"offline"}

2 消息的订阅和发布

2.1 主题topic和内容payload的说明

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.22.3
other json type对应的消息数据

2.2 手机发布指令给设备

手机发布消息的主题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

2.2.1升级update

标题 格式 是否必填 说明
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"
   }
}

2.2.2 播放play

可以不带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
	}
}

2.2.3 下一曲 next

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "next",
}

2.2.4 上一曲 previous

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "previous",
}

2.2.5 暂停 pause

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "pause",
}

2.2.6 停止播放 stop

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "stop",
}

2.2.7 调整播放进度 seek_media

参数名称 格式 是否必须 说明
position string 播放进度(单位秒)

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "seek_media",
    "other": {
	"position": "120"
    }
}

2.2.8 获取播放进度和播放信息 get_position

设备收到指令后会把设备播放的状态和进度回复给手机,见2.3.1 设备发送播放信息给手机 get_position

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "get_position",
}

2.2.9 获取播放进度和播放信息 get_play_info

设备收到指令后会把设备播放的状态和进度回复给手机

因为发送mqtt消息要钱,就把播放状态并入到了 获取播放文件的进度。(以前是使用了阿里云的要钱)

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "get_play_info",
}

2.2.10 设置音量 volume_set

参数名称 格式 是否必填 说明
volume int 设备音量值,范围(0-100)

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "volume_set",
    "other": {
	"volume": 99
    }
}

2.2.11 得到设备音量 volume_get

设备收到此指令后会把设备的音量回复给手机。

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "volume_get",
}

2.2.12 设置静音 mute_set

参数名称 格式 是否必填 说明
mute int 是否静音,取值0,1(0为不静音,1为静音)

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "mute_set",
    "other": {
        "mute": 1
    }
}

2.2.13 获取静音状态mute_get

设备收到此指令后会把设备是否静音回复给手机。

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "mute_get",
}

2.2.14 设置低电量提示开关 low_battery_notify_set

参数名称 格式 是否必填 说明
low_battery_notify int 低电量是否提示,0不提示,1提示

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "low_battery_notify_set",
    "other": {
	"low_battery_notif": 1
    }
}

2.2.15 得到设备信息 get_dev_info

设备收到指令后会把设备信息回复给手机,设备回复信息见2.3.2 设备发送设备信息给手机 get_dev_info

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "get_dev_info",
}

2.2.16 设置闹钟 alert_set

参数名称 格式 是否必填 说明
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"
	}
}

2.2.17 更新频道 channel_update

参数名称 格式 是否必填 说明
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
         
	}
}

2.2.18 修改设备名称 device_name_set

{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "device_name_set",
	"other": {
		"dev_name": "xxx",//设备名称
	}
}

2.2.19 通知设备更新临时频道 m3u_update

小程序文件读写需要权限,小程序更新零时频道不用此方法,设备可以通过后台的接口获取到临时频道的音频数据

{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "m3u_update",
	"other": {
		"url": "",
		"user_id": "5",
        "channel_id":"3",
		"order": 0
	}
}

2.2.20 设置暂停后自动休眠 pause_shutdown_set

参数名称 格式 是否必填 说明
time int 单位秒,如果为-1表示关闭自动休眠
{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "pause_shutdown_set",
	"other": {
		"time": 60,//单位秒,如果为-1表示关闭自动休眠
	}
}

2.2.21 获取设备名称 get_dev_name

设备收到此指令后会把设备名称回复给手机。

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "get_dev_name",
}

2.2.22 开始DM云小薇授权 start_dm_auth

设备收到此命令后判断是否需要云小薇授权,如果设备已经授权过则返回0,需要授权返回1(并返回authReqInfo和dsn),需要QQ音乐授权返回2

完整示例:

{
    "DstDeviceName": "device_uuid",
    "SrcDeviceName": "mobile_uuid",
    "type": "start_dm_auth",
    "other": {
		"version":2
                "is_debug":2
	}

}

2.2.23 向设备发送DM云小薇clientId和authRespInfo信息 send_dm_clientid

参数名称 格式 是否必填 说明
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
	}
}

2.2.24 向设备发送TTS语音播报开启关闭功能 set_tts_enable

参数名称 格式 是否必填 说明
enable int 如果为1表示启用 2表示禁用
{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "set_tts_enable",
	"other": {
		"enable": 1
	}
}

2.2.25 获取设备的云小薇的Authorization(AccessToken) get_dm_auth

{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "get_dm_auth",
}

2.2.26 向设备发送自动切换网络模式开启关闭功能 set_netmode_auto

参数名称 格式 是否必填 说明
enable int 如果为1表示启用 0表示禁用
{
	"DstDeviceName": "device_uuid",
	"SrcDeviceName": "mobile_uuid",
	"type": "set_netmode_auto",
	"other": {
		"enable": 1
	}
}

2.3 设备发送/回复消息给手机

设备发布消息的主题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。

2.3.1 设备发送播放信息给手机 get_position

场景描述:

  1. 手机端发送控制类型 get_position,设备回复播放信息给手机端。

  2. 设备端按键切换歌曲,播放完成自动切歌,设备端都需要主动上报播放信息给手机端。

参数名称 格式 是否必填 说明
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"
	}
}

2.3.2 设备发送设备信息给手机 get_dev_info

场景描述:

手机端发送控制类型 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]
		}]
	}
}

2.3.3 设备发送设备名称给手机 get_dev_name

场景描述: 手机端发送控制类型 get_dev_name,设备回复设备名称给手机端

{
	"DstDeviceName": "mobile_uuid",
	"SrcDeviceName": "device_uuid",
	"type": " get_dev_name",
	"other": {
		"devName": "猫王· 旅行者1号",

	}
}

2.3.4 设备上报播放状态 play_state

场景描述:

当设备播放状态发生改变,主动发送给播放状态给手机端
{
	"DstDeviceName": "mobile_uuid",
	"SrcDeviceName": "device_uuid",
	"type": "play_state",
	"other": {
		"PlayState": 1 //播放状态:1播放状态,2暂停状态,3停止状态,4缓冲状态。

	}
}

2.3.5 设备上报音量 volume_get

场景描述:

  1. 手机端发送控制类型 volume_get,设备端发送音量数据给手机端。
  2. 设备端按键调整音量,设备端发送音量数据给手机端。

{
	"DstDeviceName": "mobile_uuid",
	"SrcDeviceName": "device_uuid",
	"type": "volume_get",
        "code": 200,
	"other": {
		"volume": 99 //设备音量

	}
}

2.3.6 设备上报网络类型 get_net_type

场景描述: 设备切换网络状态,设备端发送网络类型给手机端

参数名称 格式 是否必填 说明
networkType number Mobile:0,wifi :1
{
	"DstDeviceName": "mobile_uuid",
	"SrcDeviceName": "device_uuid",
	"type": "get_net_type",
	"other": {
		"networkType": 0//Mobile:0,wifi :1

	}
}

2.3.7 设备向app发送开始DM云小薇授权 start_dm_auth

场景描述:

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"

	}
}

2.3.8 设备向app发送云小薇的Authorization(AccessToken) get_dm_auth

场景描述:

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