迅鸣物联网文档

迅鸣物联网文档


WiFi 温湿度计通讯文档

<h1>WiFi 温湿度计通讯文档</h1> <p>Python 接收数据Demo <a href="https://osscdn.xunmingiot.com/Android/Twd_tcp.zip" title="点击下载">点击下载</a></p> <p>webConfig 教程 <a href="https://v.youku.com/v_show/id_XNTA0NTc2ODY5Mg==.html" title="点击查看">点击查看</a></p> <h2>一、激活</h2> <h3>上行</h3> <pre><code class="language-json">{ "nonce": 822514837, "path": "/v1/device/activate/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "rssi": -60, "bssid": "b4:e6:2d:70:ea:49", "rom_version": "b1.0.5t10001(a)", "devicekey": "devicekey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "count": 0, "batt": 215, "mod_id": 101 } }</code></pre> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> <tr> <td>path</td> <td>string</td> <td>意图</td> </tr> <tr> <td>method</td> <td>string</td> <td>POST</td> </tr> <tr> <td>meta</td> <td>object</td> <td>身份信息</td> </tr> <tr> <td>body</td> <td>object</td> <td>数据</td> </tr> <tr> <td>Authorization</td> <td>string</td> <td>设备Token:token+空格+</td> </tr> <tr> <td>product</td> <td>int</td> <td>产品ID</td> </tr> <tr> <td>rssi</td> <td>int</td> <td>wifi信号强度</td> </tr> <tr> <td>bssid</td> <td>string</td> <td>wifi模块mac地址</td> </tr> <tr> <td>rom_version</td> <td>string</td> <td>固件版本</td> </tr> <tr> <td>devicekey</td> <td>string</td> <td>设备SN:devicekey+空格+(16位数字)</td> </tr> <tr> <td>count</td> <td>int</td> <td>周期</td> </tr> <tr> <td>batt</td> <td>int</td> <td>电量</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>101 温湿度计</td> </tr> </tbody> </table> <p><strong>返回描述</strong></p> <ul> <li>path 为 <code>/v1/device/activate/"</code> 表示设备未激活,未激活的设备在联网的情况下将周期性的向服务器发送此数据devicekey和Authorization是服务器维护的设备身份信息,每一个deviceKey对应一个token,根据devicekey和token匹配确定设备</li> </ul> <h3>下行</h3> <pre><code class="language-json">{ "activate_status": 1, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <ul> <li>服务端相应,设备激活</li> </ul> <h2>二、 数据上报</h2> <h3>上行</h3> <ul> <li>path <code>"/v1/datastreams/supply-voltage/datapoints/"</code></li> </ul> <pre><code class="language-json">{ "nonce": 1622249602, "path": "/v1/datastreams/supply-voltage/datapoints/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "count": 0, "rssi": -57, "batt": 220, "datapoints": [{ "mod_id": 101, "comm": 2, "stat": 0, "a": 250, "b": 550 }] } }</code></pre> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>datapoints</td> <td>object</td> <td>业务数据</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>101 温湿度计</td> </tr> <tr> <td>comm</td> <td>int</td> <td>操作码</td> </tr> <tr> <td>stat</td> <td>int</td> <td>数据状态</td> </tr> <tr> <td>a</td> <td>int</td> <td>温度</td> </tr> <tr> <td>b</td> <td>int</td> <td>湿度</td> </tr> </tbody> </table> <ul> <li>不通的操作码对应不同的下行数据</li> </ul> <p><strong>comm:</strong></p> <ul> <li>0 设备数据采集异常</li> <li>1 设备同步配置,相应配置信息</li> <li>2/64 数据上报</li> <li>3/5 预留</li> </ul> <h3>下行</h3> <h4>当comm为1时响应</h4> <pre><code class="language-json">{ "a"": "", "b"": "", "c"": "", "d"": "", "e"": "", "f"": "", "g"": "", "h"": "", "i"": "", "j"": "", "k"": "", "l"": "", "m"": "", "mod_id": 101, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong>返回描述</strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>a</td> <td>int</td> <td>温度上限</td> </tr> <tr> <td>b</td> <td>int</td> <td>温度下限</td> </tr> <tr> <td>c</td> <td>int</td> <td>温度偏移量</td> </tr> <tr> <td>d</td> <td>int</td> <td>温度回差</td> </tr> <tr> <td>e</td> <td>int</td> <td>湿度上限</td> </tr> <tr> <td>f</td> <td>int</td> <td>湿度下限</td> </tr> <tr> <td>g</td> <td>int</td> <td>适度偏移量</td> </tr> <tr> <td>h</td> <td>int</td> <td>湿度回差</td> </tr> <tr> <td>i</td> <td>int</td> <td>发送周期(次)</td> </tr> <tr> <td>j</td> <td>int</td> <td>刷新时间(秒)</td> </tr> <tr> <td>k</td> <td>int</td> <td>同步周期</td> </tr> <tr> <td>l</td> <td>int</td> <td>显示屏ID</td> </tr> <tr> <td>m</td> <td>int</td> <td>单位 1 摄氏度</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>101 温湿度计</td> </tr> <tr> <td>status</td> <td>int</td> <td>200 成功</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> </tbody> </table> <ul> <li>count 0 表示会话保持不断开,设备下次交互会上行</li> </ul> <pre><code class="language-json">{ "nonce": 816854068, "path": "/v1/device/set_status/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "status": 200, "count": 0, "mod_id": 101 } }</code></pre> <ul> <li>path <code>"/v1/device/set_status/"</code></li> </ul> <p><strong> 返回描述</strong></p> <ul> <li>上行设备进行同步配置处理的结果 status 200 为成功 其他为失败</li> </ul> <h4>当comm为2/64</h4> <p>64为采集数据异常,可跳过</p> <p>2 正常数据上报,后台可对系统数据和业务数据按照自己的业务设计处理方式</p> <p>不同数据状态</p> <p><strong>stat:</strong></p> <p>stat为10进制数据,需要转换为长度为8的2进制数据,位数不够,左侧补0</p> <p>正常状态为00000000,当出现1的时候表示触发异常告警:</p> <p>从左到右依次为:</p> <pre><code> 0: None, 1: None, 2: 温度过高, 3: 温度过低, 4: 湿度过高, 5: 湿度过低, 6: 传感器错误, 7: 电量过低 </code></pre> <h5>例如:00000001 表示设备电量过低, 00100001 表示设备温度过高且电量过低</h5> <h2>三、 任务</h2> <table> <thead> <tr> <th>名称</th> <th>ID</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>同步配置</td> <td>101</td> <td>通知设备同步远程配置信息到本地</td> </tr> <tr> <td>OTA</td> <td>99</td> <td>通知设备下载固件执行OTA升级</td> </tr> <tr> <td>wifi配置</td> <td>95</td> <td>下行wifi信息,通知设备更改本地wifi信息</td> </tr> <tr> <td>wifi查询</td> <td>94</td> <td>通知设备上行当前wifi信息</td> </tr> <tr> <td>重启wifi</td> <td>93</td> <td>通知设备重启wifi模块</td> </tr> <tr> <td>IAP</td> <td>92</td> <td>通知设备下载最新IAP,并执行IAP升级</td> </tr> <tr> <td>版本查询</td> <td>91</td> <td>通知设备上行当前固件及IAP版本信息</td> </tr> </tbody> </table> <h5>101 任务如上 comm 1 所述</h5> <h3>99 任务下行:</h3> <pre><code class="language-json">{ "a": "b1.0.5t10001(a)" , "b": "xxx:xxx:xxx:xxx", "mod_id": 99, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>a</td> <td>string</td> <td>版本号</td> </tr> <tr> <td>b</td> <td>string</td> <td>OTA服务的IP地址</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>99</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <p><strong> 99 任务上行样例</strong></p> <pre><code class="language-json"> { "nonce": 1607392651, "path": "/v1/device/ota_status/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "status": 200, "count": 0, "mod_id": 95, "pre_version": "b1.1.0t10001(a)", "new_version": "b1.1.1.t001.(a)" } }</code></pre> <ul> <li>path <code>"/v1/device/ota_status/"</code></li> </ul> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>95</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> <tr> <td>status</td> <td>int</td> <td>200 下载成功</td> </tr> <tr> <td>pre_version</td> <td>string</td> <td>旧版本</td> </tr> <tr> <td>new_version</td> <td>string</td> <td>新版本</td> </tr> </tbody> </table> <h3>93 任务下行</h3> <pre><code class="language-json">{ "mod_id": 93, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>93</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>status</td> <td>int</td> <td>200</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <ul> <li>95 任务下行</li> </ul> <pre><code class="language-json">{ "a": "wifiName" , "b": "WifiPassword", "mod_id": 95, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>a</td> <td>string</td> <td>wifi名</td> </tr> <tr> <td>b</td> <td>string</td> <td>wifi密码</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>95</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>status</td> <td>int</td> <td>200</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <h3>94 任务下行</h3> <pre><code class="language-json">{ "mod_id": 94, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>94</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>status</td> <td>int</td> <td>200</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <ul> <li>94 任务上行数据样式</li> </ul> <pre><code class="language-json">{ "nonce": 613088607, "path": "/v1/datastreams/supply-voltage/put_wifi/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "status": 200, "count": 0, "apname": "DSS", "appwd": "123456789", "apbssid": "06:d9:b3:91:44:1e" } }</code></pre> <ul> <li>path <code>"/v1/datastreams/supply-voltage/put_wifi/"</code></li> </ul> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>apname</td> <td>string</td> <td>wifi名</td> </tr> <tr> <td>appwd</td> <td>string</td> <td>wifi密码</td> </tr> <tr> <td>apbssid</td> <td>string</td> <td>mac地址</td> </tr> </tbody> </table> <h3>92 任务下行</h3> <pre><code class="language-json">{ "a": "b1.0.5t10001(a)" , "b": "xxx:xxx:xxx:xxx", "mod_id": 99, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>a</td> <td>string</td> <td>版本号</td> </tr> <tr> <td>b</td> <td>string</td> <td>IAP服务器IP地址</td> </tr> <tr> <td>mod_id</td> <td>int</td> <td>92</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <ul> <li>92 任务 上行样例</li> </ul> <pre><code class="language-json"> { "nonce": 1607392651, "path": "/v1/device/ota_status/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "status": 200, "count": 0, "mod_id": 92, "pre_version": "101.1.7", "new_version": "101.1.8" } }</code></pre> <ul> <li>path <code>"/v1/device/ota_status/"</code></li> </ul> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>92</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> <tr> <td>status</td> <td>int</td> <td>200 下载成功</td> </tr> <tr> <td>pre_version</td> <td>string</td> <td>旧版本</td> </tr> <tr> <td>new_version</td> <td>string</td> <td>新版本</td> </tr> </tbody> </table> <h3>91 任务下行</h3> <pre><code class="language-json">{ "mod_id": 91, "status": 200, "nonce": 999999999, "count":0 }</code></pre> <p><strong> 样例描述 </strong></p> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>91</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> <tr> <td>nonce</td> <td>int</td> <td>9位随机数</td> </tr> </tbody> </table> <ul> <li>91 任务上行样例</li> </ul> <pre><code class="language-json">{ "nonce": 131727553, "path": "/v1/device/sendver/", "method": "POST", "meta": { "Authorization": "token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "body": { "product": 1, "status": 200, "count": 0, "mod_id": 91, "rom_version": "a1.0.3t10001(a)", "iar_version": "101.1.7" } } </code></pre> <ul> <li>path: <code>"/v1/device/sendver/"</code></li> </ul> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mod_id</td> <td>int</td> <td>91</td> </tr> <tr> <td>rom_version</td> <td>string</td> <td>当前OTA版本</td> </tr> <tr> <td>iar_version</td> <td>string</td> <td>当前IAP版本</td> </tr> <tr> <td>count</td> <td>int</td> <td>0</td> </tr> </tbody> </table>

页面列表

ITEM_HTML