mqtt设备控制命令.md 15 KB

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.2
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.3之间

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

	}
}

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

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

完整示例:

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

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

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

因为发送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": "volume_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

设备收到指令后会把设备信息回复给手机,回复设备信息见1.2.2

完整示例:

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

2.2.16 设置闹钟 alert_set

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

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",
		"timestamp": "1234567890",
		"update_type": "all/sigle/audition",
		"channel_id": "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": "device_uuid",
	"type": "m3u_update",
	"other": {
		"url": "",
		"user_id": "5",
		"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.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 专辑图片地址
{
        "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,
		"PlayState": 1 //播放模式:0:REPEAT_ALL列表循环,1:REPEAT_ONE单曲循环2:SHUFFLE 随机播放
	}
}

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

场景描述:

手机端发送控制类型 get_dev_info,设备回复设备信息给手机端。
参数名称 格式 是否必填 说明
lowBatteryNtf number 低电量提醒0不提示,1提示
imsi string Sim卡片的imsi号码
imei string 4G芯片的imei号码
iccid string Sim卡片的iccid号码
sn string 设备sn号码
ProdModel string 产品型号
MFGR string 方案是名称
SoftVer 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",
		"MFGR": "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"
			}

		]
	}
}

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

	}
}