- [mqtt设备控制命令](#mqtt%E8%AE%BE%E5%A4%87%E6%8E%A7%E5%88%B6%E5%91%BD%E4%BB%A4) - [1.设备的在线和离线](#1%E8%AE%BE%E5%A4%87%E7%9A%84%E5%9C%A8%E7%BA%BF%E5%92%8C%E7%A6%BB%E7%BA%BF) - [1.1 设备端](#11-%E8%AE%BE%E5%A4%87%E7%AB%AF) - [1.2 手机端](#12-%E6%89%8B%E6%9C%BA%E7%AB%AF) - [2 消息的订阅和发布](#2-%E6%B6%88%E6%81%AF%E7%9A%84%E8%AE%A2%E9%98%85%E5%92%8C%E5%8F%91%E5%B8%83) - [2.1 主题topic和内容payload的说明](#21-%E4%B8%BB%E9%A2%98topic%E5%92%8C%E5%86%85%E5%AE%B9payload%E7%9A%84%E8%AF%B4%E6%98%8E) - [2.2 手机发布指令给设备](#22-%E6%89%8B%E6%9C%BA%E5%8F%91%E5%B8%83%E6%8C%87%E4%BB%A4%E7%BB%99%E8%AE%BE%E5%A4%87) - [2.2.1升级update](#221%E5%8D%87%E7%BA%A7update) - [2.2.2 播放play](#222-%E6%92%AD%E6%94%BEplay) - [2.2.3 下一曲 next](#223-%E4%B8%8B%E4%B8%80%E6%9B%B2-next) - [2.2.4 上一曲 previous](#224-%E4%B8%8A%E4%B8%80%E6%9B%B2-previous) - [2.2.5 暂停 pause](#225-%E6%9A%82%E5%81%9C-pause) - [2.2.6 停止播放 stop](#226-%E5%81%9C%E6%AD%A2%E6%92%AD%E6%94%BE-stop) - [2.2.7 调整播放进度 seek_media](#227-%E8%B0%83%E6%95%B4%E6%92%AD%E6%94%BE%E8%BF%9B%E5%BA%A6-seek_media) - [2.2.8 获取播放进度和播放信息 get_position](#228-%E8%8E%B7%E5%8F%96%E6%92%AD%E6%94%BE%E8%BF%9B%E5%BA%A6%E5%92%8C%E6%92%AD%E6%94%BE%E4%BF%A1%E6%81%AF-get_position) - [2.2.9 ~~获取播放进度和播放信息 get_play_info~~](#229-%E8%8E%B7%E5%8F%96%E6%92%AD%E6%94%BE%E8%BF%9B%E5%BA%A6%E5%92%8C%E6%92%AD%E6%94%BE%E4%BF%A1%E6%81%AF-get_play_info) - [2.2.10 设置音量 volume_set](#2210-%E8%AE%BE%E7%BD%AE%E9%9F%B3%E9%87%8F-volume_set) - [2.2.11 得到设备音量 volume_get](#2211-%E5%BE%97%E5%88%B0%E8%AE%BE%E5%A4%87%E9%9F%B3%E9%87%8F--volume_get) - [2.2.12 设置静音 mute_set](#2212-%E8%AE%BE%E7%BD%AE%E9%9D%99%E9%9F%B3-mute_set) - [2.2.13 获取静音状态mute_get](#2213-%E8%8E%B7%E5%8F%96%E9%9D%99%E9%9F%B3%E7%8A%B6%E6%80%81mute_get) - [2.2.14 设置低电量提示开关 low_battery_notify_set](#2214-%E8%AE%BE%E7%BD%AE%E4%BD%8E%E7%94%B5%E9%87%8F%E6%8F%90%E7%A4%BA%E5%BC%80%E5%85%B3-low_battery_notify_set) - [2.2.15 得到设备信息 get_dev_info](#2215-%E5%BE%97%E5%88%B0%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF-get_dev_info) - [2.2.16 设置闹钟 alert_set](#2216-%E8%AE%BE%E7%BD%AE%E9%97%B9%E9%92%9F-alert_set) - [2.2.17 更新频道 channel_update](#2217-%E6%9B%B4%E6%96%B0%E9%A2%91%E9%81%93-channel_update) - [2.2.18 修改设备名称 device_name_set](#2218-%E4%BF%AE%E6%94%B9%E8%AE%BE%E5%A4%87%E5%90%8D%E7%A7%B0-device_name_set) - [2.2.19 通知设备更新临时频道 m3u_update](#2219-%E9%80%9A%E7%9F%A5%E8%AE%BE%E5%A4%87%E6%9B%B4%E6%96%B0%E4%B8%B4%E6%97%B6%E9%A2%91%E9%81%93-m3u_update) - [2.2.20 设置暂停后自动休眠 pause_shutdown_set](#2220-%E8%AE%BE%E7%BD%AE%E6%9A%82%E5%81%9C%E5%90%8E%E8%87%AA%E5%8A%A8%E4%BC%91%E7%9C%A0--pause_shutdown_set) - [2.2.21 获取设备名称 get_dev_name](#2221-%E8%8E%B7%E5%8F%96%E8%AE%BE%E5%A4%87%E5%90%8D%E7%A7%B0-get_dev_name) - [2.3 设备发送/回复消息给手机](#23-%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E5%9B%9E%E5%A4%8D%E6%B6%88%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA) - [2.3.1 设备发送播放信息给手机 get_position](#231-%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E6%92%AD%E6%94%BE%E4%BF%A1%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA-get_position) - [2.3.2 设备发送设备信息给手机 get_dev_info](#232--%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA-get_dev_info) - [2.3.3 设备发送设备名称给手机 get_dev_name](#233-%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E8%AE%BE%E5%A4%87%E5%90%8D%E7%A7%B0%E7%BB%99%E6%89%8B%E6%9C%BA-get_dev_name) - [2.3.4 设备上报播放状态 play_state](#234-%E8%AE%BE%E5%A4%87%E4%B8%8A%E6%8A%A5%E6%92%AD%E6%94%BE%E7%8A%B6%E6%80%81-play_state) - [2.3.5 设备上报音量 volume_get](#235-%E8%AE%BE%E5%A4%87%E4%B8%8A%E6%8A%A5%E9%9F%B3%E9%87%8F-volume_get) - [2.3.6 设备上报网络类型 get_net_type](#236-%E8%AE%BE%E5%A4%87%E4%B8%8A%E6%8A%A5%E7%BD%91%E7%BB%9C%E7%B1%BB%E5%9E%8B-get_net_type) # 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](#22-%E6%89%8B%E6%9C%BA%E5%8F%91%E5%B8%83%E6%8C%87%E4%BB%A4%E7%BB%99%E8%AE%BE%E5%A4%87)和[2.3](#23-%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E5%9B%9E%E5%A4%8D%E6%B6%88%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA)| | 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| 完整示例: ```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 设备收到指令后会把设备播放的状态和进度回复给手机,见[2.3.1 设备发送播放信息给手机 get_position](#231-%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E6%92%AD%E6%94%BE%E4%BF%A1%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA-get_position) 完整示例: ```json { "DstDeviceName": "device_uuid", "SrcDeviceName": "mobile_uuid", "type": "get_position", } ``` #### 2.2.9 ~~获取播放进度和播放信息 get_play_info~~ 设备收到指令后会把设备播放的状态和进度回复给手机 **因为发送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 设备收到指令后会把设备信息回复给手机,设备回复信息见[2.3.2 设备发送设备信息给手机 get_dev_info](#232--%E8%AE%BE%E5%A4%87%E5%8F%91%E9%80%81%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF%E7%BB%99%E6%89%8B%E6%9C%BA-get_dev_info) 完整示例: ```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": "mobile_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| 是| 专辑图片地址 | | audioType | number| 是| 音频类型 和服务器的枚举audio_type一致 | ```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, "audioType":1,//音频类型 和服务器的枚举audio_type一致 "PlayState":3,// 播放状态:1播放,2暂停,3停止,4缓冲。 "PlayMode": 0 //播放模式: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| 是| 方案是名称 | | 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表示关闭自动休眠| ```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", "Firmware": "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 } } ```