本實踐推薦使用阿里云物聯網平臺一站式完成應用開發,物聯網平臺可直接調用Link WAN網管服務。本文將使用物聯網平臺搭建一個基于LoRaWAN連接的智能廁所Demo。
背景信息
應用概述
為了增加廁所使用效率,減少被味道“熏陶”的等待時間,同時也為了增加廁所的清潔效率,可以做一個非侵入式的智能廁所改造方案。通過紅外熱釋電檢測每個坑位有沒有人,在Web或App上實時顯示,方便如廁人員查詢,并且可以檢測廁所的臭味,達到閾值時通知清潔工進行清掃。
物料清單
慧聯無限G200 LoRaWAN網關
慧聯無限LoRa紅外傳感器
一臺能聯網的電腦
步驟一:配置LoRaWAN網關-自建LoRaWAN網絡
從阿里云IoT市場購買網關并自己組成網絡。
以下是本實踐使用的網關:
插上網線與電源,登錄物聯網絡管理平臺控制臺注冊網關。
在左側導航欄上,選擇網絡管理 > 網關管理。
在網關列表頁簽,單擊添加網關。
配置信息以激活網關。
參數項
參數
說明
基本信息
名稱
填寫添加的網關名稱,支持中文、英文字母、數字和下劃線,長度限制4~30個字符,一個中文算兩個字符。
PIN Code
Pin Code為6位數字,通常會貼在網關標簽上。
通信模式
通信模式分為全雙工和半雙工兩種,此處以選擇半雙工為例。
GwEUI
請在網關標簽上查看該參數。
頻段
支持以下三種頻段的選擇:
CN470 同頻
CN470 異頻
AS923 同頻
此處以選擇CN470 異頻為例。
網關描述
選填,可以填寫所添加網關的備注信息。網關描述不超過100字符。
位置信息
所在區域
請選擇網關的所在區域。
說明需手動選擇網關位置,因G200不帶GPS模塊,需要手動填寫,之后會顯示在地圖上。帶GPS網關的,上報數據后會自動刷新位置。
位置詳情
填寫網關的具體的位置信息,您也可于右側地圖單擊做定位。
G200回傳網默認是DHCP上網配置,如果您是固定IP或PPPoE,需依照實際環境調整,相關操作請參考G200網關手冊。配置成功后,網關列表下將顯示在線狀態。創建自己的網絡憑證,然后把網絡分配給自己賬號使用。分配后通過入網憑證來取得網絡使用權利。
在左側導航欄上,選擇網絡管理 > 入網開通。
在入網開通頁面,單擊添加專用憑證。
在下圖中配置參數,配置完成后單擊確認即可創建一個憑證。
參數
說明
憑證名稱
填寫添加的憑證的名稱,支持中文、英文字母、數字和下劃線,長度限制4~30個字符,一個中文算兩個字符。
頻段
支持以下三種頻段的選擇:
CN470 同頻
CN470 異頻
AS923 同頻
此處以選擇CN470 異頻為例。
Class
支持以下三種類的選擇:
A
B
C
此處以選擇A為例,按需發送。
RxDelay
選擇Class A可配置 RXDelay,用于配置上行后的接收窗口延遲時間,默認1s,可選范圍在1~15s。
單擊該憑證操作所在列的憑證授權,將添加好的憑證授權給自己,如下圖所示。
授權成功之后,新憑證會在出現在憑證清單里,如果是別人將憑證授權給您,接受后也會在此清單顯示。
步驟二:拆封LoRaWAN硬件
從網上購買來的認證過的LoRa傳感器,拆出來的時候可以看到后面附了一個16位碼的貼紙,這個是節點的DevEUI。同時還會有一個6位的PINCODE字段。
按照說明書,默認是5分鐘模式,即收到一次警報之后,5分鐘之內收到的警報不會再上傳。這跟廁所的使用場景不一致,我們需要調成測試模式,即每次收到的警報都會上傳。
操作方法:把背部的殼子掰開(不需要螺絲刀)后,把跳針的位置調整到ON,然后合上蓋子,先不拔掉塑料片。
步驟三:在物聯網平臺上配置LoRa節點
登錄物聯網平臺控制臺。
在左側導航欄上選擇設備管理產品,單擊創建產品。
填寫產品信息,然后單擊保存。
參數
說明
產品名稱
測試設備(可自定義)。
所屬品類
選擇自定義品類。
節點類型
選擇直連設備。
連網方式
選擇LoRaWAN。
入網憑證
從清單里選擇,或單擊添加專用憑證。
說明請確認已經在Link WAN取得入網憑證。
數據格式
透傳/自定義。
產品描述
非必填,用于描述產品的相關信息。
如首次使用Link WAN需授權數據權限,請單擊同意授權。
創建完畢后,單擊管理設備前往管理。
單擊添加設備,即可完成LoRa設備接入。
輸入16位DevEUI作為DeviceName(需小寫)。
步驟四:查看上下行數據及數據日志
回到物聯網絡管理平臺控制臺,可以查看LoRaWAN鏈路層數據通信上下行。
在左側導航欄上選擇節點管理 > 節點分組。
說明此節點已授權給物聯網平臺接入使用,這里只提供查看功能。
單擊該節點對應操作欄下的查看,選擇上行數據頁簽,查看上行數據。
拔掉LoRa傳感器上的塑料片,讓傳感器上電。
查看物聯網平臺上收到的上行日志。
在物聯網平臺控制臺左側導航欄上選擇監控運維日志服務,在上行消息分析頁簽查看日志。
此時設備也收到了數據日志,即表示所有通訊鏈路都打通,下圖為原始的上行日志。
步驟五:解析設備上傳的信息
從傳感器的說明文件可以得知,傳感器上報的是二進制數據。我們如何把二進制數據轉化為可以理解的屬性名稱呢?具體請看下文的操作步驟。
下圖是廠家提供的傳感器的二進制配置文件。
定義物模型。
對于該型號的傳感器,
020100
中的第一個BYTE02
表示協議,01
對紅外傳感器表示有人,00
表示傳感器狀態正常。我們首先需要在產品里定義室內人體探測開關和傳感器屬性兩個功能,用于記錄這兩個屬性。在物聯網平臺控制臺左側導航欄上選擇設備管理產品,單擊產品對應的查看,進入產品詳情頁。
選擇功能定義頁簽,單擊編輯草稿 > 添加自定義功能。
在添加自定義功能彈框中,功能類型選擇屬性,添加以下兩個屬性。
添加傳感器屬性
添加室內人體探測開關
屬性添加完成后,如下圖所示。
說明讀寫類型都選擇讀寫。
使用產品定義里的數據解析,把二進制數據自動轉化為ALink-JSON格式,以應對定義物模型中的兩個屬性。
說明數據解析需要產品為開發中狀態。如果已經發布請單擊右上角撤回發布。
數據轉化規則,詳情請參見:數據解析,這里只提供最后的代碼。
在產品詳情頁,單擊數據解析頁簽。
在編輯腳本下方,輸入如下的解析腳本,然后單擊頁面下方的保存。
var COMMAND_REPORT = 02; var COMMAND_SET = 01; var ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'; //標準ALink JSON格式topic, 設備上傳屬性數據到云端 var ALINK_PROP_SET_METHOD = 'thing.service.property.set'; function rawDataToProtocol(bytes) { var uint8Array = new Uint8Array(bytes.length); for (var i = 0; i < bytes.length; i++) { uint8Array[i] = bytes[i] & 0xff; } var dataView = new DataView(uint8Array.buffer, 0); var jsonMap = new Object(); var fHead = uint8Array[0]; // 第0個BYTE為上報協議 if (fHead == COMMAND_REPORT) { jsonMap['method'] = ALINK_PROP_REPORT_METHOD; //ALink JSON格式 - 屬性上報topic jsonMap['version'] = '1.0'; //ALink JSON格式 - 協議版本號固定字段 jsonMap['id'] = '' + 12345; //ALink JSON格式 - 標示該次請求id值 var params = {}; params['IndoorHumanDetectionSwitch'] = uint8Array[1]; //第1個BYTE為傳感器讀數判斷有沒有人 params['SensorProperty'] = uint8Array[2]; //第2個BYTE為傳感器本身的狀態,對應產品屬性中 prop_float jsonMap['params'] = params; //ALink JSON格式 - params標準字段 } return jsonMap;
輸入原始數據020100進行調試,可以看到右邊解析成功,然后單擊頁面下方的執行即可讓腳本生效。
在日志里可以看到二進制的020100已經轉為{"SensorProperty":0,"IndoorHumanDetectionSwitch":1}
,表示已完成設備接入。
步驟六:在IoT Studio上配置智能廁所看板
IoT Studio(是阿里云針對物聯網場景提供的生產力工具,可覆蓋各個物聯網行業核心應用場景,解決物聯網開發領域開發鏈路長、技術棧復雜、協同成本高、方案移植困難的問題。
登錄物聯網應用開發控制臺。
在IoT Studio上新建一個項目,以項目維度管理LoRaWAN智能廁所應用。
創建項目之后可以看到右邊欄多了一項SmartToilet,單擊查看進入項目詳情。然后在項目概覽頁單擊右上角導入產品,把剛才創建的產品導入到項目內。
在左側欄上選擇推薦Web可視化開發,單擊新建應用進入Web可視化開發工作臺,然后選擇空白模板進行新建。
進入編輯中,可以改變背景色,添加標題文字等。對最重要的廁所占位狀態,通過“有人”、“沒人”的指示燈來表示,因此把指示燈組件放入畫布中,并配置數據源。
配置數據源時,請選擇產品、關聯的設備以及關聯的布爾型屬性。單擊驗證數據格式獲得通過,之后單擊確定完成配置。配置之后可以通過上傳圖片等修改指示燈開關狀態的樣式。
單擊預覽,完成整個Web應用的鏈路調試。
假設有7個坑位,只需要重復上述步驟即可(可以使用Excel批量添加設備)。另外GUI配置的部分與之前的版本操作一致,在此不再贅述。最終效果如下圖所示。
(可選)在IoT Studio上配置智能廁所狀態推送與轉儲
服務開發(原服務編排)可以通過可視化拖拽的方式快速完成所需業務邏輯的設計,例如,設備聯動、可視化搭建數據聯動、云服務連接、API 生成、數據處理與轉儲、生成App的后端服務。在本文中,我們要使用服務開發完成智能廁所坑位狀態的推送,以及把廁所使用狀況轉儲到表格存儲Table Store上。
在IoT Studio上新建一個服務。
從項目概覽頁選擇推薦服務開發,單擊新建服務即可進入服務開發工作臺的新建頁面,選擇空白模板進行新建。
把廁所的占用時間推送到釘釘機器人上。
首先配置一個設備觸發節點作為輸入,選擇之前創建好的產品,設備選擇選擇所有設備,以監聽所有設備上報的信息。上報類型選擇屬性上報,最后配置一個釘釘機器人節點作為消息推送節點。
在要推送的釘釘群內添加機器人,獲得webhook,如下圖所示。
配置webhook以后可以配置推送的信息。釘釘機器人節點目前支持多種消息推送類型,并且支持動態調用設備數據。
框內配置項如下:
{ "msgtype": "text", "text": { "content":"在{{query.props.IndoorHumanDetectionSwitch.time}}時候有{{query.props.IndoorHumanDetectionSwitch.value}}人進坑!" }, "at": { "isAtAll": true } }
配置完成之后,單擊部署對服務進行部署。然后單擊啟動讓服務生效。
如果設備已經上線,則可以直接看到機器人的消息推送,實現廁所使用狀態的實時推送了,如下圖所示。如果需要把廁所的使用狀況使用TableStore,云數據庫MySQL等云產品存儲起來,可以使用存儲節點。
最終結果如圖: