本文以溫濕度傳感器設備為例,介紹通過數據流轉規則,將設備上報數據推送到釘釘群的操作步驟。
場景說明
將各辦公室的溫濕度傳感器設備上報的數據上傳到釘釘群機器人。
數據流轉流程圖
步驟一:創建產品和設備
登錄物聯網平臺控制臺。
在實例概覽頁面的全部環境下,找到對應的實例,單擊實例ID或備注名稱。
在左側導航欄,選擇 ,創建一個直連設備類型的產品:溫濕度傳感器。
參數設置直接使用默認值。具體操作,請參見創建產品。
單擊前往定義物模型,在功能定義頁簽,單擊編輯草稿,然后在默認模塊,為產品添加自定義功能。
本文示例為產品添加溫度和濕度兩個屬性,請參見單個添加物模型。
在左側導航欄,選擇單個創建設備。 ,在溫濕度傳感器產品下,創建一個具體的設備:TH_sensor。具體操作,請參見
創建設備完成后,在彈出的添加完成對話框,單擊前往查看,獲取設備證書(ProductKey、DeviceName和DeviceSecret)。設備證書是設備后續與物聯網平臺交流的重要憑證,請妥善保管。
在設備列表頁簽,單擊設備TH_sensor的查看,進入設備詳情頁面。在標簽信息右側,單擊編輯,為設備添加標簽。
本文示例添加如下兩個標簽,具體操作,請參見標簽。
Key
Value
描述
tag
YY小鎮X號樓F層00XS
設備所在位置。
deviceISN
T20180102X
設備序列號。
步驟二:配置函數計算服務
函數計算,是一個事件驅動的全托管計算服務,目前支持的語言Java、Node.js、Python等語言,具體內容,請參見如何使用函數計算。
配置釘釘機器人,獲取Webhook地址。
登錄電腦版釘釘。
單擊釘釘群聊天窗口的群設置按鈕,然后單擊智能群助手。
單擊添加機器人,然后單擊按鈕。
選擇自定義,單擊添加。
設置機器人名字和安全設置,選中我已閱讀并同意《自定義機器人服務及免責條款》復選框,然后單擊完成。
單擊復制,保存Webhook地址到本地。
編寫函數計算腳本。
本文以Node.js運行環境為例編寫函數腳本,從物聯網平臺獲取設備位置、設備編號、實時溫度、相對濕度和上報時間數據,按照釘釘消息格式組裝,使用HTTPS協議將POST數據推送到釘釘機器人的Webhook接口。
完成編寫后,將腳本文件命名為index.js,并壓縮為index.zip文件進行保存。完整代碼腳本如下:
您需將accessToken替換為Webhook地址中access_token的值。
const https = require('https'); const accessToken = '填寫accessToken,即釘釘機器人Webhook的access_token值'; module.exports.handler = function(event, context, callback) { var eventJson = JSON.parse(event.toString()); //釘釘消息格式 const postData = JSON.stringify({ "msgtype": "markdown", "markdown": { "title": "溫濕度傳感器", "text": "#### 溫濕度傳感器上報\n" + "> 設備位置:" + eventJson.tag + "\n\n" + "> 設備編號:" + eventJson.isn+ "\n\n" + "> 實時溫度:" + eventJson.temperature + "℃\n\n" + "> 相對濕度:" + eventJson.humidity + "%\n\n" + "> ###### " + eventJson.time + " 發布 by [物聯網平臺](https://www.aliyun.com/product/iot) \n" }, "at": { "isAtAll": false } }); const options = { hostname: 'oapi.dingtalk.com', port: 443, path: '/robot/send?access_token=' + accessToken, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) } }; const req = https.request(options, (res) => { res.setEncoding('utf8'); res.on('data', (chunk) => {}); res.on('end', () => { callback(null, 'success'); }); }); // 異常返回 req.on('error', (e) => { callback(e); }); // 寫入數據 req.write(postData); req.end(); };
創建服務和函數。
步驟三:配置數據流轉到函數計算中
將設備TH_sensor上報的溫度和濕度等數據轉發至函數計算的函數pushData2DingTalk中。
返回物聯網平臺控制臺,在對應實例下的左側導航欄,選擇 ,然后單擊創建規則,輸入規則名稱:溫濕度數據流轉,單擊確認。
重要若當前頁面顯示新版功能,先單擊右上角返回舊版,進入舊版功能頁面,再單擊創建規則。
在數據流轉規則頁面,單擊編寫SQL,編輯處理數據的SQL。
本文示例中,定義篩選的消息字段包含:
設備信息中的設備名稱(deviceName),自定義標簽中的屬性(tag)和序列號(deviceISN)。
溫濕度傳感器上報數據消息payload中的溫度值(temperature)和濕度值(humidity)。
具體SQL語句如下:
SELECT deviceName() as deviceName, attribute('tag') as tag, attribute('deviceISN') as isn, items.temperature.value as temperature, items.humidity.value as humidity, timestamp('yyyy-MM-dd HH:mm:ss') as time FROM "/g5j3o***/TH_sensorthing/event/property/post"
在數據流轉規則頁面,單擊添加操作,將數據轉發到函數計算(FC)。
本文示例選擇已創建的服務IoT_Service和函數pushData2DingTalk。具體操作,請參見數據轉發到函數計算(FC)。
在數據流轉規則列表中,單擊規則溫濕度數據流轉對應的啟動,啟用該規則。
步驟四:接入設備和上報溫濕度數據
使用設備證書(ProductKey、DeviceName和DeviceSecret),通過MQTT協議將設備接?物聯網平臺,并模擬上報溫濕度數據。
在Windows系統或Linux系統下載并安裝Node.js。本文以Windows 10(64位)系統為例,下載安裝包node-v14.15.1-x64.msi。
安裝成功后,打開CMD窗口,通過以下命令查看node版本。
node --version
顯示如下版本號,表示安裝成功。
v14.15.1
在本地計算機創建一個JavaScript文件(例如iot_device.js),用來存放Node.js示例代碼。
Node.js示例代碼如下所示:
const mqtt = require('aliyun-iot-mqtt'); // 1. 設備身份信息 var options = { productKey: "g18l***", deviceName: "TH_sensor", deviceSecret: "b2e6e4f102458d84***", host: "iot-cn-***.mqtt.iothub.aliyuncs.com" }; // 2. 建立MQTT連接 const client = mqtt.getAliyunIotMqttClient(options); //訂閱云端指令Topic client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`) client.on('message', function(topic, message) { console.log("topic " + topic) console.log("message " + message) }) setInterval(function() { // 3.定時上報溫濕度數據 client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post`, getPostData(), { qos: 0 }); }, 5 * 1000); function getPostData() { const payloadJson = { id: Date.now(), version: "1.0", params: { temperature: Math.floor((Math.random() * 20) + 10), humidity: Math.floor((Math.random() * 20) + 10) }, method: "thing.event.property.post" } console.log("payloadJson " + JSON.stringify(payloadJson)) return JSON.stringify(payloadJson); }
參數
示例
說明
productKey
g18l***
您添加設備后,保存的設備證書信息。
您可在控制臺中設備TH_sensor的設備詳情頁面查看。
deviceName
TH_sensor
deviceSecret
b2e6e4f102458d84***
host
iot-cn-***.mqtt.iothub.aliyuncs.com
MQTT設備接入域名。
獲取接入域名的方法, 請參見管理實例終端節點。
打開CMD窗口,使用
cd
命令找到iot_device.js文件所在路徑,在該路徑下使用npm
命令下載阿里云IoT的MQTT庫。下載后的MQTT庫文件如下圖所示。npm install aliyun-iot-mqtt -S
MQTT庫下載完成后,在CMD窗口輸入如下命令,運行iot_device.js代碼,啟動設備。
node iot_device.js
執行結果
返回如下信息,表示設備接入成功,并上報數據。
payloadJson {"id":161848***,"version":"1.0","params":{"temperature":22,"humidity":15},"method":"thing.event.property.post"}
釘釘群機器人接收到消息如下。