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>