houjie 4 лет назад
Родитель
Сommit
ec25fef262
1 измененных файлов с 597 добавлено и 0 удалено
  1. 597 0
      mqtt设备控制命令.md

+ 597 - 0
mqtt设备控制命令.md

@@ -0,0 +1,597 @@
+[TOC]
+
+# 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|
+
+完整示例:
+
+```json
+{
+   "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表示直接播放设备当前的歌曲
+
+完整示例:
+```json
+{
+	"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
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "next",
+}
+```
+#### 2.2.4 上一曲 previous
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "previous",
+}
+```
+#### 2.2.5 暂停 pause
+完整示例:
+
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "pause",
+}
+```
+#### 2.2.6 停止播放 stop
+完整示例:
+
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "stop",
+}
+```
+#### 2.2.7 调整播放进度 seek_media
+
+| 参数名称 | 格式 | 是否必须|说明 |
+| --- | --- | --- | --- |
+| position | string | 是 | 播放进度(单位秒)|
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "seek_media",
+    "other": {
+	"position": "120"
+    }
+}
+```
+#### 2.2.8 获取播放进度和播放信息 get_position
+设备收到指令后会把设备播放的状态和进度回复给手机,见3
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "get_position",
+}
+```
+
+#### 2.2.9 ~~获取播放进度和播放信息 get_play_info~~
+
+设备收到指令后会把设备播放的状态和进度回复给手机,见3
+
+**因为发送mqtt消息要钱,就把播放状态并入到了 获取播放文件的进度。(以前是使用了阿里云的要钱)**
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "get_play_info",
+}
+```
+#### 2.2.10 设置音量 volume_set
+
+| 参数名称 | 格式 |是否必填|说明|
+| --- | --- |--- |--- |
+| volume |  int|  是|设备音量值,范围(0-100) |
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "volume_set",
+    "other": {
+	"volume": 99
+    }
+}
+```
+#### 2.2.11 得到设备音量  volume_get
+设备收到此指令后会把设备的音量回复给手机。
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "volume_get",
+}
+```
+#### 2.2.12 设置静音 mute_set
+
+| 参数名称 | 格式 |是否必填|说明|
+| --- | --- |--- |--- |
+| mute |  int|  是|是否静音,取值0,1(0为不静音,1为静音) |
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "volume_set",
+    "other": {
+	"mute": 1
+    }
+}
+```
+#### 2.2.13 获取静音状态mute_get
+设备收到此指令后会把设备是否静音回复给手机。
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "mute_get",
+}
+```
+#### 2.2.14 设置低电量提示开关 low_battery_notify_set
+| 参数名称 | 格式 |是否必填|说明|
+| --- | --- |--- |--- |
+| low_battery_notify |  int|  是|低电量是否提示,0不提示,1提示 |
+
+完整示例:
+```json
+{
+    "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 
+
+完整示例:
+```json
+{
+    "DstDeviceName": "device_uuid",
+    "SrcDeviceName": "mobile_uuid",
+    "type": "get_dev_info",
+}
+```
+#### 2.2.16 设置闹钟 alert_set
+
+| 参数名称 | 格式 |是否必填|说明|
+| --- | --- |--- |--- |
+| week_actives |  string|  是|从周日到周六的闹钟重复状态。 |
+
+
+```json
+{
+	"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 |
+
+
+```json
+{
+	"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
+```json
+{
+	"DstDeviceName": "device_uuid",
+	"SrcDeviceName": "mobile_uuid",
+	"type": "device_name_set",
+	"other": {
+		"dev_name": "xxx",//设备名称
+	}
+}
+```
+
+#### 2.2.19 通知设备更新临时频道 m3u_update
+小程序文件读写需要权限,小程序更新零时频道不用此方法,设备可以通过后台的接口获取到临时频道的音频数据
+
+```json
+{
+	"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表示关闭自动休眠 |
+
+```json
+{
+	"DstDeviceName": "device_uuid",
+	"SrcDeviceName": "mobile_uuid",
+	"type": "pause_shutdown_set",
+	"other": {
+		"time": 60,//单位秒,如果为-1表示关闭自动休眠
+	}
+}
+```
+
+#### 2.2.21 获取设备名称 get_dev_name
+设备收到此指令后会把设备名称回复给手机。
+
+完整示例:
+```json
+{
+    "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|  是| 专辑图片地址 |
+
+
+```json
+{
+        "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表示关闭自动休眠|
+
+
+```json
+{	
+	"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,设备回复设备名称给手机端
+```json
+{
+	"DstDeviceName": "mobile_uuid",
+	"SrcDeviceName": "device_uuid",
+	"type": " get_dev_name",
+	"other": {
+		"devName": "猫王· 旅行者1号",
+
+	}
+}
+```
+#### 2.3.4 设备上报播放状态 play_state
+场景描述:
+	当设备播放状态发生改变,主动发送给播放状态给手机端
+```json
+{
+	"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. 设备端按键调整音量,设备端发送音量数据给手机端。
+        
+	
+```json
+{
+	"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|        
+	
+```json
+{
+	"DstDeviceName": "mobile_uuid",
+	"SrcDeviceName": "device_uuid",
+	"type": "get_net_type",
+	"other": {
+		"networkType": 0//Mobile:0,wifi :1
+
+	}
+}
+```
+
+
+
+