2024AloT物聯(lián)網(wǎng)開發(fā)實例_第1頁
2024AloT物聯(lián)網(wǎng)開發(fā)實例_第2頁
2024AloT物聯(lián)網(wǎng)開發(fā)實例_第3頁
2024AloT物聯(lián)網(wǎng)開發(fā)實例_第4頁
2024AloT物聯(lián)網(wǎng)開發(fā)實例_第5頁
已閱讀5頁,還剩339頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

AIoT(上下冊合集)目錄設備接入 5MQTT協(xié)與IoT物網(wǎng)平臺 6CoAP協(xié)詳解 17IoT設上云案詳解 24電信NB-IoT無對接里云IoT 27LoRaWAN設接入戰(zhàn) 35微小程序MQTT模器 42IoT設免燒三元,開即時冊 51IoT存設備改造移上云 57基函數(shù)算實現(xiàn)IoT設動態(tài)冊 64Nodejs版mqtt接阿里云IoT 68C#設接入IoT物網(wǎng)平臺 74IoT設用HTTPS協(xié)接入聯(lián)網(wǎng)臺 80網(wǎng)與子備上開發(fā)戰(zhàn) 89設用X.509證接入戰(zhàn)(一) 97設用X.509證接入戰(zhàn)(二) 102消息處理 110深解讀IoT消洪峰么扛 111億級IoT設連接層邏輯 117IoT平廣播息Broadcast實戰(zhàn) 125IoT設離線,下消息案 129自義Topic同調(diào)用RRPC實() 137系統(tǒng)Topic實云端步調(diào)用RRPC() 145設上報進制據(jù)云解析 153設備接入MMTIT<PAGE8PAGE9>PAGE9>TT協(xié)議與IoTMTT協(xié)議與IoT物聯(lián)網(wǎng)平臺一、MQTT協(xié)議介紹MQTTMQTT(消息隊列遙測傳輸)是基于TCP/IP協(xié)議棧而構(gòu)建的支持在各方之間異步通信的消息協(xié)議。MQTT在空間和時間上將消息發(fā)送者與接收者分離,因此可以在不可靠了發(fā)(u/SbQTTT這個輕量級協(xié)議可在嚴重受限的設備硬件和高延遲/帶寬有限的網(wǎng)絡上實現(xiàn)。TMQTTClientMQTTClient庫在很多語言中都有實現(xiàn),包括EmbeddedC、C、Java、Jvacrit、ythn、C++C#Go、i、Aridcliseao的QTTttp//wweclieor/ah/onlashpMQTT固定報頭Fixedheader控制報文類型:控制報文類型標志位:剩余長度:可變報頭VariableheaderMQTT內(nèi)容根據(jù)報文類型的不同而不同。可變報頭的報文標識符(Packetdentifier)字段存在于在多個類型的報文里。acktntifirytes:有效載荷Payload以下QTTUBLSH來說有效載荷就是業(yè)務消息。MMTIT< PAGE10 PAGE13 >MTIT二、與阿里云IoT平臺建立連接CONNECT阿里云TQTTillCNNECT下:其中clientId,username,password由設備三元組(productKey,deviceName,evicecret官方文檔:/document_detail/73742.html設備端代碼示例(Nodejs版)client.js/**/**depenence:{mq:2.188"}*/contcpo=equecp);contmqt=equeq);設備身份三元組+區(qū)域contdeveonfg={pducK:替換,deveNam:替換,deveece:"替換,egoId:cn-hangha"};mqtcontoons=nqOpndevcenfg);constul=`cp://$devceCductKe}.iot-as-mqt.$deviceConfig.regionId}.alyuncscom18`;2.建立連接contcent=mqconncu,opn);cen.npaceend,funconpace){conoeogend+pckecmd'packtpacke)})cen.npaceeceve,funconpacke{conoeogeceve+ackecm+'pacetpacke)})IoTmtfunconnqOpndevcenfg){cotpaams={poucKe:devconfgpoucKe,devceame:devcenfg.evceame,meamp:Dae.o),cenId:ah.ano).ong6)ub2),}ONNTotopns=keepve:60,60scean:fae,ceaneonpocoeon:4Tv.1.1}1cenI,uename,paodoon.aod=gnmacha1paa,devcenfg.evceece;options.clientId=`${params.clientId}|securemode=3,signmethod=hmacsha1,timestamppaam.eamp}`;oon.uenae=`paam.evceame}&pam.pduKe}`;eunoon;}/*macha1paod參考文檔:hp:hepaun.cmdoumenda742.hm?#h2u-1*/funcongnmacha1paa,devceece){etkes=Oec.kepaa).o);//按字典序排序keys=keys.sort();constlist=[];ke.make)>{.puh`ke}paamke}`);});cotconenr=.on);euncp.ceemacha1,devceece).upaecnen).dgehe);}CONNACKeceveconnckpacet>acket{cmd:connak,ean:qo:0,dup:engh:2,opc:nu,ppaoa:nu,eioneen:eunoe:0}PINGRESP endpngeqpackt>{cmd:pngq'} PINGRESPecevepngeppackt>acket{cmd:pngep,ean:qo:0,dup:fae,engh:0,opc:nu,paoa:nulDISCONNECT三、發(fā)布數(shù)據(jù)PUBLISH3.contopc=`ss$devceonfig.poducKe}$devceonfg.devceName}hngevenppep`;eInevafunco){occenpubhoc,geoDaa)qo:});},},5*1000);funcongeoDaa){cotpaoaJon={d:opaam:{empeue:ah.ooahandm)*20)+10),humd:ah.foah.ndo)*20)+60)},meho:hng.eve.ppepo"}cooe.o=poDaa\nopc"+opc)cooe.opaoaJon)eunJONngfpaoadon)}endpuhpacet>{cmd:pubh,opc:sa1hFedeud1fgsA2eIdhngevenpoepo,paoa:d:148648116paam:empeau:2humd:}"meho:hngeven.oe.p},qo:1,ean:meageId:dup:fae}PUBACKecevepubckpackt>acket{cmd:pubck,ean:qo:0,dup:fae,engh:2,opc:nu,paoa:meageId:880}四、接收數(shù)據(jù)SUBSCRIBE//4.訂閱主題contubTopc=`$devceConfg.poducKe}$devceonfig.devceNae}con`;cen.ubceubopc)cen.nmeage,funcnop,meage){cooe.oopc"+oc)cooe.omeage"+meage)})UBRIBEendubcbepackt>{cm:ubcbe,ubcpon:[{opc:a1hFedeud1fgAP2eIdcono,qo:0},qo:1,ean:dup:fae,meageId:881}SUBACKSUBACK消息體:eceveubackpaket>acket{cmd:uback,ean:qo:0,dup:fae,engh:,opc:nu,paoa:ganed:[128,meageId:881UNSUBSCRIBEendunubcbepaket>{cm:unubcbe,qo:1,meageId:42,unubcpo:[a1hFedeud1fgA2eIdcono']}UNSUBACKeceveunubackpackt>acket{cmd:unuback,ean:qo:0,dup:fae,engh:2,opc:nu,paoa:meageId:423}五、服務質(zhì)量QoS六、設備掉線重連設備與阿里云oTunubscrie,否則訂閱關(guān)系不清理。設備重連后,依然保持之前的訂閱關(guān)系,不需要重復訂閱。TLSv1.2設備和TLSv12加密。TLS加密,需要下載根證書。CNNCT參數(shù)中clitId的ecremoe2ttp//helaliyncom/ocmnt_etil/7372html PAGE23 >CoAPCoAPCoAP協(xié)議詳解< PAGE20 CoAP協(xié)議詳解|Thttp:/oap.tehnologyCAP(CnstraindAplicatinrotocl)的縮寫。在T物聯(lián)網(wǎng)場景,為了讓小設備可以接入互聯(lián)網(wǎng),CoAP協(xié)議被設計出來。CoAP是一種應用層UDPHTTPTCP之上。CoAP協(xié)議非常4CoAPHTTP類似的特征,核心內(nèi)容為資源抽象、RESTHTTP對于受限環(huán)境的劣勢既考CAP提供RIEST式以及可以獨立定義的頭選項提供的可擴展性。另一方面,CAP基于輕量級的DP協(xié)議,并且允許P多播。為了彌補UDP傳輸?shù)牟豢煽啃裕珻oAP定義了帶有重傳機制的事務處理機制。并且提供資源發(fā)現(xiàn)機制,并帶有資源描述。協(xié)議特點:基于消息模型請求/響應模型雙向通信輕量、低功耗支持可靠傳輸P非長連接通信,支持受限設備支持觀察模式支持異步通信協(xié)議內(nèi)容:CoAPUDP上。CoAP【Ver】版本編號。【T】報文類型,CoAP4種不同形式的報文,CON報文,NON報文,ACKRST報文?!綯KL】CoAP標識符長度。CoAP協(xié)議中具有兩種功能相似的標識符,一種esage()oke()【Code】功能碼/響應碼。CodeCoAP35cdXX表示CAPXX、.X或XX則表示CAPesaeD【TokenTKLToken【Option】報文選項,通過報文選項可設定CoAP主機,CoAPURI,CoAP請求參數(shù)和負載媒體類型等等?!?1111111B】CoAP報文和具體負載之間的分隔符。請求方法:.1GT.2OT.3UT.4EETE響應碼:Success2.xx這一類型的狀態(tài)碼,代表請求已成功被服務器接收、理解、并接受。01Cratd02elted03Vlid04Caned05CtentClientError4.xx:這類的狀態(tài)碼代表了客戶端看起來可能發(fā)生了錯誤,妨礙了服務器的處理。.0Bdeuet.1nathrized.2Bdtin.3Fridn.4tFnd.5etodotAlld.6otAcctale.12recnitinFiled.13eustntityooare.15nsprtedCtent-FrmatServerError5.xx:00teralervrrrr01otmlementd02BdGteay03ervicenavilble媒體類型:工作模式:CoAP參考了很多HTTP的設計思路,同時也根據(jù)受限資源限制設備的具體情況改良了諸多的設計細節(jié),增加了很多實用的功能。消息類型CON:CON請求被發(fā)送,那么對方必須做出響應。NON:NON請求被發(fā)送,那么對方不必做出回應。ACK:CON消息的響應。RST:復位消息,當接收者接收到的消息包含一個錯誤,接收者解析消息或者不再關(guān)心發(fā)送者發(fā)送的內(nèi)容,那么復位消息將會被發(fā)送。請求/響應模型:1.攜帶模式分離模式非確認模式CoAP協(xié)議的URI:在HTTP的世界中,正式ESTFul協(xié)議由于其簡單性和適用性,在WEB應用中越CAPCAPRIRICAP//mchin.adrs:83/enor/temeratre。CoAP的默認UDP端口號為5683HTTP和CoAP對比:HTTP代表超文本傳輸協(xié)議,CoAP代表約束應用協(xié)議;HTTPTCP,CoAPUDP;CoAPHTTP協(xié)議的簡化版;CoAPHTTP協(xié)議一樣使用請求/響應模型,擁有相同的方法;CoAP開銷更低,并支持多播;CAP/WN/MMCoAP和MQTT對比:MQTT協(xié)議使用發(fā)布/訂閱模型,CoAP協(xié)議使用請求/響應模型;MQTT是長連接,CoAP協(xié)議是無連接;QTTCAP協(xié)議是erver和Clint之間消息傳遞的單對單協(xié)議;QTTClients理解的標簽消息,CAP內(nèi)置內(nèi)容協(xié)商和發(fā)現(xiàn)支持,允許設備彼此窺測以找到交換數(shù)據(jù)的方式。IIT< PAGE24 PAGE25 >CoAPIoT設備上云方案詳解作者|數(shù)據(jù)采集通信連接,數(shù)據(jù)存儲,數(shù)據(jù)可視化,洞察,行動決策。但,在實施過程中,碎片化的設備端通信連接難題往往就阻礙了項目落地進程。今天,本文總結(jié)不同設備場景的連接上云方案,供大家參考。一、資源豐富類設備inuAdridAruio在操作系統(tǒng)層面,解決了不同通信模塊的差異,硬件端的應用程序只需要集成云平臺的IoTSDK,或者集成開源MQTTSDK即可和云端建立長連接通信鏈路。二、資源受限類設備ROTSMCU+通信模組的方式,實現(xiàn)設備數(shù)據(jù)遠程采集。(B-oT/2G/3G/4G)移遠通信芯訊通合宙有方科技、廣和通、日海智能、高新興等,而各家的AT指令也各不相同,為設備端應用程序開發(fā)帶來了很大難度。根據(jù)模組集成度不同又細分一下幾種場景方案:三、本地通信類設備igBee設備,LoRa設備,Modbus設備,而不具有互聯(lián)網(wǎng)接入?yún)f(xié)議棧支持,此時需要DTU/網(wǎng)關(guān)設備MQTT協(xié)議,從而實現(xiàn)數(shù)據(jù)采集上云。四、本地系統(tǒng)整體上云面對這種場景,可以通過自有系統(tǒng)集成泛化SDK通過HTTP/2協(xié)議,在不改造設備前提下,高效的實現(xiàn)海量數(shù)據(jù)快速上云。 PAGE29 >電信oT無縫對接阿里云IoT電信電信IT無縫對接阿里云IoT< PAGE30 電信BIoT無縫對接阿里云IoT作者|NB-IoT設備必須直連電信CTWing平臺T,AWSTTB-oT設備。IoT阿里云TB-oT設備。一、電信CTWing開發(fā)創(chuàng)建產(chǎn)品登陸電信CTWing控制臺,創(chuàng)建產(chǎn)品:上?;ǔ撬?,選擇智能水表,其他配置信息如下圖:產(chǎn)品創(chuàng)建成功后,查看服務定義,可以看到屬性值:用水量,標識為:water_consumption如下圖:注冊設備在產(chǎn)品詳情-設備管理頁面添加NB-IoT設備,這里我們輸入NB-IoT水表設備的E注冊應用在應用管理頁面添加應用上?;ǔ撬砉芾恚@取到應用的AppKeyScret二、阿里云IoT平臺開發(fā)開通企業(yè)實例-連接型CWing連接型創(chuàng)建產(chǎn)品在連接型實例中,新建產(chǎn)品:上?;ǔ撬?,選擇智能水表,,其中數(shù)據(jù)格式選擇:透傳/自定義,數(shù)據(jù)校驗級別選擇:弱校驗,如下圖:功能定義用水量watercnsumption如下圖:數(shù)據(jù)解析CTWingT創(chuàng)建云網(wǎng)關(guān)云網(wǎng)關(guān),用來解析電信平臺流轉(zhuǎn)過來的設備數(shù)據(jù),關(guān)聯(lián)前面創(chuàng)建的產(chǎn)品上?;ǔ撬鞢Wing${deviced}等待幾分鐘,云網(wǎng)關(guān)創(chuàng)建完成后,我們獲取到網(wǎng)關(guān)URL,如下圖:三、電信IoT配置云網(wǎng)關(guān)配置云網(wǎng)關(guān)CTWing訂閱管理T的云網(wǎng)關(guān)URL,如下圖:四、聯(lián)機運行NB-IoT我們啟動手上的BIoTCTWing阿里云IoT我們在企業(yè)物聯(lián)網(wǎng)平臺控制的設備詳情,可以看到有一臺新的在線設備,物模型數(shù)據(jù)的運行狀態(tài)可以看到實時的用水量值,如下圖:日志服務也可以看到電信CTWing平臺流轉(zhuǎn)過來的B-oT設備數(shù)據(jù)在阿里云oT企業(yè)物聯(lián)網(wǎng)平臺物模型解析的完整過程,如下圖:BITCWig完整數(shù)據(jù)報文至此,我們完成了電信NB-IoT設備接入阿里云IoT平臺,充分享受阿里云的海量存T PAGE39 >LoRaWANLoRaWANLoRaWAN< PAGE40 LoRaWAN設備接入實戰(zhàn)作者|隨著IoT物聯(lián)網(wǎng)的高速發(fā)展,低功耗,遠距離,抗干擾的低功耗廣域網(wǎng)快速崛起,oa與B-ToaWANT一、整體架構(gòu)方案阿里云企業(yè)物聯(lián)網(wǎng)平臺開啟LinkWAN服務后,即可實現(xiàn)LRaWAN設備的上云。LoRaWAN液位傳感器為例,完整方案如下:二、阿里云IoT平臺開發(fā)-LinN基礎型inkWAN稍等幾分鐘,等待實例創(chuàng)建完成,可以查看完整實例信息,如下圖:添加LinkWAN在LinkWAN的網(wǎng)關(guān)管理頁面,添加網(wǎng)關(guān),錄入手中LinkWAN網(wǎng)關(guān)設備的GwEUI、PINCode和頻段、通信模式,如下圖:創(chuàng)建入網(wǎng)憑證在ikWAN入網(wǎng)憑證創(chuàng)建產(chǎn)品在設備管理LoRaLoRaWANLoRa入網(wǎng)憑證,如下圖:inkWAN的入網(wǎng)憑證oa在產(chǎn)品詳情頁面的功能定義,我們添加物模型-屬性:當前液位,標識符:water_level,如下圖:在產(chǎn)品詳情頁面的數(shù)據(jù)解析,我們按照設備說明書編寫數(shù)據(jù)解析腳本,如下圖:注冊設備在設備管理的設備頁面,添加LoRa液位傳感器具體設備,錄入手上LoRa設備的DevEUI,JoinEui和AppKey信息,如下圖:三、聯(lián)機運行LinkWAN,LoRaLoRa當前液位值MQTTMQTT模擬器< PAGE44 PAGE49 >微信小程序MQTTMQTT模擬器作者|一、IoT設備模擬器小程序MQTT模擬器Tpicrgin接入。點擊原文進入小程序二、創(chuàng)建產(chǎn)品和注冊設備①我們進入物聯(lián)網(wǎng)平臺,公共實例,創(chuàng)建如下產(chǎn)品:②在產(chǎn)品詳情頁面,功能定義下添加屬性和事件,如下圖:③基于當前產(chǎn)品,注冊設備,并獲取身份三元組,用于設備連接時的身份認證,如下圖:三、MQTT模擬器使用設備上線①打開微信,掃描進入小程序。②輸入設備三元組。③選擇設備所在的接入region。④點擊設備上線。⑤進入物聯(lián)網(wǎng)平臺控制臺,設備詳情,設備為在線狀態(tài)。自定義Topic①模擬設備發(fā)布傳感器數(shù)據(jù)到/{pk}/{dn}/user/update主題。②在物聯(lián)網(wǎng)平臺控制臺,日志服務驗證數(shù)據(jù)上報:Topic①模擬設備主動訂閱主題/{pk}/{dn}/user/get。②在物聯(lián)網(wǎng)平臺控制臺,設備詳情的Topic列表可以看到一條訂閱記錄。③點擊發(fā)布消息,輸入內(nèi)容,確認發(fā)布后,小程序會實時展示收到的消息。物模型-屬性上報①點擊屬性上報JSON結(jié)構(gòu)的屬性值。②物聯(lián)網(wǎng)平臺控制臺,設備詳情>物模型數(shù)據(jù)>運行狀態(tài),查看設備上報屬性的內(nèi)容。物模型-事件上報d和JON②物聯(lián)網(wǎng)平臺控制臺,設備詳情>物模型數(shù)據(jù)>事件管理,查看設備上報的事件標識符合輸出參數(shù)內(nèi)容。四、設備三元組Chrome插件為了方便在小程序里輸入設備身份二維碼,推薦大家安裝IoT設備身份三元組轉(zhuǎn)化二維碼的Crme插件安裝①Crme:chrome://extensions/②擴展程序設置頁面右上角,開啟開發(fā)者模式。③點擊左上角加載已解壓的擴展程序按鈕,選中本地擴展程序文件夾,然后點擊選擇按鈕。④T插件使用方式①進入物聯(lián)網(wǎng)平臺控制臺,進入設備詳情,點擊查看DeviceSecret。②在設備證書彈框,點擊一鍵復制。③打開瀏覽器右上角IoT插件,粘貼設備信息,生成二維碼。④打開微信,掃描進入小程序。⑤點擊小程序左上角,掃描設備身份二維碼,自動填入三元組。⑥選擇設備所在的接入region。⑦點擊設備上線。 PAGE53 >IoTIIT< PAGE54 IoT設備免燒錄三元組,開機即時注冊作者|孫承旭一、背景物聯(lián)網(wǎng)場景中,設備產(chǎn)線燒錄不同三元組成本很高,Android設備更是無法獨立燒錄TTMQTT二、流程圖設備動態(tài)注冊三元組流程如下:三、開發(fā)實戰(zhàn)創(chuàng)建產(chǎn)品TAroid設備。進入產(chǎn)品詳情,獲取productKey和productSecret。開啟動態(tài)注冊功能,如下圖:接下來,我們無需按常規(guī)流程,預先注冊設備,而是直接開發(fā)設備端程序。設備端開發(fā)我們以Node.js代碼演示設備動態(tài)注冊完整過程。動態(tài)注冊CONNECT報文,報文中包含動態(tài)注冊參數(shù),請求建立連接。QTT{rouctKey}itas-mqtt.{regind.liyucscm183MQTTCONNECT報文參數(shù)和取值結(jié)構(gòu)如下:mmqenI:cenIdecuemoe2auhpeegnandomxsgnmehox"mqeName:devceame&+poucKeymqaod:gnhmacpduececonen)免預注冊認證方式,設備注冊成功后,物聯(lián)網(wǎng)平臺使用Topic:/ext/regnwl,返回ClientID、DeviceToken。Taylad{{podcKe":x",devceNme":x",cenId":x",devceokn":}動態(tài)注冊示例代碼:ffuncondoevceRee){//1.產(chǎn)品信息contpoucIno={ppoucKe:"poucKe,poucece:"poucece,egonI:cn-hangh"}/2程序讀取的設備唯一標識,比如A,ealNumer等poucInf.evceame=ahandm).ng6).ub2)/.生成設備動態(tài)注冊的參數(shù)varopns=geRegeOonpoucIno,uedA);/4發(fā)起動態(tài)注冊,獲取設備連接cenIddevcekenvaregeent=mqconncoon);egeen.onmage,funcoopc,meage){/.fe/egn'=opc){/6斷開注冊連接egeen.end);/.T連接devceOnneJO.pemeage)cn-hangha)}})}生成設備動態(tài)注冊的參數(shù),示例代碼和參考文檔:/document_detail/132111.htmlffuncongeRegeOonpoucInf,oo){varandm=Dae.o);varcontent={devceame:poucInf.evceame,poucKe:poucInf.oucKe,andm:andm}varopns=}opions.clienId=Date.now()+|secuemode=2,authType=regnwl,andom="+andom+ignmehdhmacha1"opn.uename=poucInf.evceame+&"+poucInf.oucKeyopn.paod=gnmacha1cnen,poucInf.oucece)opn.pt=188;opopon.host=`$poducInfo.poductKey}.io-as-mqt.{poductInfo.egionId}.aiuncs.com`;opn.pocl=mq;opn.ca=ooAopn.keeave=120eunopn;}動態(tài)注冊成功后,產(chǎn)品下會設備數(shù)量會更新:設備上線和上報數(shù)據(jù)ClintID和eviceTkenQTT連接,TCNNCTmmqenI:cenIdecuemoe-2auhpecon"mqename:deceNae+&+pduKeymqaod:deveokenmttClietIdClintDmttUsrNameevicNm+""+rouctKymttPasrdevicTkenMQTT連接和上報數(shù)據(jù),示例代碼:ffuncondevcenneoegonId){//設備MQTT連接參數(shù)varoptions={}opn.cenId=op.enId+secuemde-2aupeconn"opn.uename=op.evceame+&"+op.oucKeyopn.paod=o.deveokenopn.pt=1883opn.hot=`op.oucKe}.-amqegonId}aunc.cm`opn.pocl=mq'opn.keeave=120//設備建立MQTT連接vardevceent=necpon);//上報業(yè)務數(shù)據(jù)deviceClient.publish(`/${ductKey}/${opts.deviceName}/user/update`,"sdkclient"+Daeno),{q:1});}ClintD PAGE59 >ITIoIoT< PAGE60 IoT存量設備零改造遷移上云作者|在物聯(lián)網(wǎng)實際項目中,有些設備采用私有協(xié)議接入了本地設備管理系統(tǒng),有些NB-IoT設備被迫接入了電信AEP平臺,有些設備接入了移動OneNET平臺。但甲方客戶的整體業(yè)務都部署在阿里云上,我們?nèi)绾螌崿F(xiàn)整體業(yè)務上云呢?阿里云T泛化協(xié)議SDK接入的方案T設備零改造的前提下,幫助企業(yè)快速構(gòu)建云上橋接服務,通過網(wǎng)橋?qū)崿F(xiàn)IoT終端設備與阿里云IoT物聯(lián)網(wǎng)平臺的雙向數(shù)據(jù)通信。一、技術(shù)架構(gòu)SDK適用場景SDK面向的目標場景包括:設備無ternt設備采用私有協(xié)議。存量設備不修改固件邏輯適用場景SDKServer提供基于配置文件的靜態(tài)配置管理能力。提供設備連接管理能力。提供上行通信能力。提供下行通信能力。二、接入流程使用泛化協(xié)議SDK,橋接設備與物聯(lián)網(wǎng)平臺的整體流程圖,如下:三、開發(fā)實戰(zhàn)泛化SDK依賴JavaSDKMaven<dependency><dependency><gupIco.aun.peevce<gouId><afcIdoa-dgedk-oeafacId><von2.1.veon><deendec>初始化SDK您需要創(chuàng)建一個BridgeBootstrap對象實例,并調(diào)用bootstrap方法。泛化協(xié)議SDK初始化工作完成后,讀取網(wǎng)橋信息,并向云端發(fā)起網(wǎng)橋設備上線請求等。otstrapDK注冊一個onlinkChanelHnlerBBdgeBoapbdgeooap=newBdgeBoap);bdgeooapboapnewDonnkhaneande){@OvedepubcboeanpuhoDeveeioneon,ngopc,be]paoa){//云端下行控制指令ngconent=newngbe);ognfoetDonnkmeage,eon:},},},eion,oc,conen;eunue;}@Ovedepubcboeanboacangopc,be]paoa){eunfae;}});配置泛化網(wǎng)橋身份Java(src/mai/reurce/下的plictincnf##everenponthp2ndont=hp:/你的oducKeo--hp2cnhangha.aunccom44"auhndpnt=hp:o-auhcnhangha.aunccomaubdge"#aeaydevcenfo,poucKey&devceame&devceecetpoucKey=bdge-ducKe}devceame=bdge-evceame}devceecet=bdgeDevceece}配置網(wǎng)橋下設備身份ava工程的默認資源文件路徑(一般是rc/main/resurces/)下的f中讀取配置文件。devce-gna-Ien}{pducKy:devce-oucKe}deveName:devceDevceame}deveecet:devceDevcece}}設備上線設備上線時,需要傳Session。下行消息回調(diào)時,會把Session回調(diào)給網(wǎng)橋。esinUUpnkhnneanderupnkaner=newUpnkhnneande;eonObectchannel=newObec);eioneion=eon.neInanceognaIen,chane);//設備上線boboeanucces=upnandedonneeon,ognaIdn);if(success){//設備上線成功,網(wǎng)橋接受后續(xù)設備通信請求。}ee{//設備上線失敗,網(wǎng)橋可以拒絕后續(xù)設備通信請求,如斷開連接。}設備通過網(wǎng)橋上報數(shù)據(jù)網(wǎng)橋使用泛化協(xié)議SDK代理設備上報消息,代碼如下://ognaIdnyDevceIdentydevceIdenty=onfgFacoy.geDevceonfiganager).geDevceIdeniyognaIden);ooceagepocoeage=newooceage);pocoeage.eaoapaoa);pocoeage.eo0);poocoeage.etopctng.fomaOPI_MLATUSR_DFIN,devceIdenygeoduKe),devceden.gDevceame)));//網(wǎng)橋代理上報upnkhaneandedubhAncognaIden,pocoeage);.設備接收云端指令bAIppvaeacecuoevceeecuoevce=newheadooecuo(RunmegeRune).avabeoceo),RunmegeRune).avabeoceo)*2,60,meUnOND,newLnkedBcknguee<1000),newThreadFactoryBuilder().setDaemon(true).setNameFormat("bridge-downlink-handle-d).ud),newheadooecuoAboc));pubcacvodmanngag){Ueapcaoncof&devce.onfbydefutbdgeooap=newBdgeBoap);bdgeooapboapnewDonnkhaneande){@Ovdepucboeanpuhoevceeoneon,ngoc,be]paoa){getmeagefomcoudgetdonnkmeagefomcoudeecuoevceubm)->handeonLnkeageeon,opc,paoa));eunue;}@Ovdepucboeanbadang,be]be){eunfae;}});}});}pvaeacvodhandeonLnkeageeoneon,ngoc,be]paoa){ngconent=newngpaoad);og.noetDonLnkmeage,eion:},oc:},conen},eion,opc,conen;Obectchannel=eon.gehane);ngognaIdny=eion.eOgnaIdn);//forexample,youcansendthemessagetodeviceviachannel,itdependsonyouspecifcevermpemeaon}設備下線當設備從網(wǎng)橋斷開后,可以調(diào)用下線接口,告知云端: upLnkade.offneognaIen); 基于函數(shù)計算實現(xiàn)I基于函數(shù)計算實現(xiàn)IoT< PAGE64 PAGE67 >基于函數(shù)計算實現(xiàn)IoT基于函數(shù)計算實現(xiàn)IoT設備動態(tài)注冊作者|一、技術(shù)方案evic(HTPSFC。函數(shù)計算FC調(diào)用IoT平臺的RegisterDevice接口,傳遞productKey和evicd。成功,返回設備三元組。失敗,調(diào)用oT平臺QueryDeviceDetail接口,傳遞roductKey和eviceId,獲取設備三元組。QTTT依賴APIRegisterDevicettp//helaliyncom/ocmnt_etil/9470htmlQueryDeviceDetailtts//helaliyncm/cumentdtail/959.tml二、函數(shù)計算實現(xiàn)HTTPS觸發(fā)器:oesccontgeRaBoy=equea-o);contco=equec);contRent=eqe@acoupo-ce).en;contoons={accKe:"云賬號的AK,accKeSece:"云賬號的AKece"};1.創(chuàng)建otppevercentcontoent=newRen{accKeId:opn.accKe,eceAceKe:opn.accKeSece,enpon:opn.endont|hp:o.n-hanga.aunc.om,apeon:opn.apeon|201801-20});contpoucKey=pduKe;moue.ep.haner=funcoeq,ep,cone){geRaBdeq,funcne,bd){boy=JON.aedecdeRIopoenbd.ng)));ccontdevceId=bo.dvceId;cofunon*){try{//創(chuàng)建設備cotegeRepone=edoen.que(RegeDevce,{poucKe:poucKe,devceame:devceId});ep.enJONngf{ucce:ue,daa:egeReponeDaa}));}catch(err){//設備已存在,查詢設備詳情cotqueRepne=edoen.eue(ueDevceDe,{pducK:poucKe,deveNam:deveId});coteunJon={ucce:ue}eunJo.da={Devceame:quRepone.aa.evceNme,oducKe:quReponeDaa.ducKe,Devceece:queRepne.Da.Deceece,IoId:queRepne.Da.IId}ep.enJONngfeunJon));}});});};三、設備調(diào)用FCHTTPSPOSTJSON觸發(fā)函數(shù)計算,獲取三元組。ooes版qt接入阿里云IoT< PAGE68 PAGE69 >ds版qt接入阿里云IToejs版mt接入阿里云IoT作者|一、準備工作注冊阿里云賬號使用個人淘寶賬號或手機號,開通阿里云賬號,并通過支付寶實名認證。免費開通IoTttp//wwaliyncom/rdct/it軟件環(huán)境oestts//ndjorg二、開發(fā)步驟IoT創(chuàng)建高級版產(chǎn)品功能定義,添加產(chǎn)品屬性注冊設備,獲得身份三元組設備端開發(fā)我們用oes創(chuàng)建設備端項目itdmo2個文件ackg.on和evicsckaesnTk依賴:{{name:aun-o-em,depenence:{mq:2.188"}}pmTDK: $npmnal evics/**/**depenence:{mq:2.188"}*/contcpo=equecp);contmqt=equeq);//設備身份三元組+區(qū)域constdeviceConfig={pducK:替換產(chǎn)品,deveNam:替換設備,deveece:"替換密碼egoId:cn-hangha"};contpaas={pducK:devcenfg.oucKe,deveNam:deveonfgdeveNam,meam:Daeno),cenI:ah.ado).ng6).ub2)}ONNTontoons=keeave:0,60sceanfae,ceanesonpocVeon:4Tv.1.1}1.生成cenId,uenam,paodopn.paod=gnmacha1aam,devcenfg.evceece;options.clientId=`${paams.clientId}|securemode=3,signmethod=hmacsha1,tmestamp=$paam.meam}`;opn.uename=`paam.evceNae}&paa.pducKe}`;cconstul=`tcp://$ducKey}.iot-as-mqt.$deviceonfig.regonId}.aliunc.cm:18`;2.建立連接contcent=mqconncuopn);.屬性數(shù)據(jù)上報contopc=`sy/$devceConfig.poductKey}${deviceonfg.devceName}/hing/even/popepo`;eInevafunco){occenpubhoc,geoDaa));},5*1000);//模擬數(shù)據(jù)funcongeoDaa){cotpaoaJon={d:Daeno),paam:{empeue:ah.ooahandm)*20)+10),humd:ah.foah.ndo)*20)+60)},meho:hng.eve.ppepo"}cooe.o=poDaa\nopc"+opc)cooe.opaoaJon)eunJONngfpaoadon);}/*macha1paod參考文檔:hp:hepaun.cmdoumenda742.hm?#h2u-1*funcongnmacha1pam,devceece){etkes=Oec.kepaa).o);//按字典序排序kkes=ke.o);cott=;ke.make)>.puh`ke}paamke}`);});cotconenr=.on);euncp.ceemacha1,devceece.udaecnen).gehe);}三、設備運行設備啟動IoTTCC設備接入IoT< PAGE74 PAGE79 >CIT#設備接入IoT物聯(lián)網(wǎng)平臺作者|一、準備工作注冊阿里云賬號使用淘寶賬號或手機號,開通阿里云賬號,并通過實名認證(可以用支付寶認證)。免費開通IoT:tts//w.liyuncm/ruct/it軟件開發(fā)環(huán)境C#VialtuioE二、IoT平臺云端開發(fā)創(chuàng)建基礎版產(chǎn)品產(chǎn)品信息:pic:注冊設備rdctKyevicNameevicScret:三、設備端開發(fā)IoTpassword:tts//w.yuu.cm/clu-ev/it-tec/mbm5g接入IoT平臺C#版本的MQTTC#的mqtt庫:https:///paho/clients/dotnet/VisualStudio工程:/downloads/download.php?file=/paho/1.2-milestones/mmtt/M2qtt4200zip設備端應用程序四、運行結(jié)果云端看到設備上線記錄,數(shù)據(jù)上報記錄。mttC語言開發(fā)的傳感器設備接入阿里云TIITTTS< PAGE84 PAGE83 >IT設備用HTSIoT設備用HTS協(xié)議接入物聯(lián)網(wǎng)平臺作者|在物聯(lián)網(wǎng)開發(fā)過程中,有時候我們現(xiàn)有的oT設備是基于HTTPS協(xié)議棧,那么我們能否接入IoT物聯(lián)網(wǎng)平臺呢?答案是肯定的。本文就通過開發(fā)實戰(zhàn)給大家講解如何使用HTPST華東2(上海區(qū)域。HTPSttp//helaliyncom/ocmnt_etil/83.tmlHTTPS接入主要有兩個步驟:tokenHTTPS上報傳感器設備采集的數(shù)據(jù)一、設備身份認證itashttpc-shngaialiync.cm認證請求示例:OTauh/1.1o:o-ahp.n-hanga.aunc.omonenpe:appcononbo:{veon:defau,cenId:mgh1000002,gnmehod:hmacha1,gn:480141D40622128BB40631A221,podcKe:1EvaNN,devceNme:Naspuh8FB,meamp:1016628"}返回示例:返回結(jié)果示例:{{coe:0/業(yè)務狀態(tài)碼meage:ucce,nfo:{oken:644ebf2e4d4ea181ed42f6"}}二、設備數(shù)據(jù)上報數(shù)據(jù)上報oT平臺接入點:/topic/${topic}請求示例:OTopca1FLxdevce12pubo:o-ahp.n-hanga.aunc.ompaod:oen}onenpe:appconoceeambo:oudaa}返回示例:{{coe:0/業(yè)務狀態(tài)碼meage:ucce,nfo:{meageId:826621624040}}三、使用HTTPS上報數(shù)據(jù)實戰(zhàn)創(chuàng)建產(chǎn)品功能定義添加產(chǎn)品屬性定義:產(chǎn)品功能定義:注冊設備,獲得身份三元組設備詳情:設備模擬代碼vvarp=equeeue-pme);contcpo=equecp);contdevcenfg={poucKe:poucKe,devceame:devceame,devceece:"替換devceece"}constopc=`sy/$ductKey}/{deviceConfig.deviceName}/hngeventpropepo`;//1.獲取身份tokenrp(getAuthOptions(deviceConfig)).henfuconpedBo){cooe.oAuhInfo:+ON.ngfpaedod))2.上報物模型數(shù)據(jù)puDaapc,paedBd.no.ken,geoDaa))}).cacfuncoe){cooe.oAuher:+ON.ngfe))});AuhfuncongeAuhpondvceong){contpaams={pducK:devcenfg.oucKe,deveNam:devcenfg.evceame,meam:Dae.o),cenI:ah.ano).ong6)ub2),}cenId,uenam,paodvarpaod=gnmacha1paa,devcenfg.evceece;varoons={mehd:O,u:hp:o-ahp.n-hanga.aunc.omauh,bd:{veon:defau,cenId:paamcenId,gnmehod:gn:paod,podcKe:devcenfg.oucKe,devceNme:devcenfg.evceame,meamp:paammeamp},on:ue};eunoon;}//數(shù)據(jù)上報funconpuDaaoc,oken,daa){contopns={mehd:O,u:hp:o-ahp.n-hanga.aunc.omoc'+oc,bd:daa,heae:{ppaod:okn,onenpe:appconoceeam'}}poon).hnfuncopaedBd){conoeogpbhucces:'+paeBo)}).achfuncne){conoeogpbher'+JON.ngfe))});}//模擬物模型數(shù)據(jù)functiongetPostData(){varpaodJon=d:Dae.o),paa:{humd:ah.ooahandm)*20)+60),empeue:ah.foah.ndo)*20)+10)},mehd:hng.evenppe.o"}conoeogpoDaa\nopc"+opc)conoeogaoadon)eunJONngfpaoadon);}macha1gnfuncongnmacha1pam,devcece){etkes=Obeckepaam)o);//s=ke.o);contt=;ke.make)>{.puh`ke}paamke}`);});});contconenr=.on);euncp.ceemacha1,deceece).pdecone).dgehe);}運行效果 PAGE89 >網(wǎng)關(guān)與子設備上云開發(fā)實戰(zhàn)網(wǎng)關(guān)與子設備上云開發(fā)實戰(zhàn)<網(wǎng)關(guān)與子設備上云開發(fā)實戰(zhàn)< PAGE92 網(wǎng)關(guān)與子設備上云開發(fā)實戰(zhàn)作者|在IoT物聯(lián)網(wǎng)場景中,對我們的終端設備本身無連接互聯(lián)網(wǎng)能力時,那么數(shù)據(jù)如何上云呢?TQTT備,由網(wǎng)關(guān)代理接入oT物聯(lián)網(wǎng)平臺。這樣只需要網(wǎng)關(guān)建立一條MQTT長連接通道,所有子設備可以復用網(wǎng)關(guān)的MQTT通道,高效傳輸數(shù)據(jù)到云端。這時候網(wǎng)關(guān)設備除了自身作為IoT網(wǎng)關(guān)設備(擁有身份三元組)與IoT物聯(lián)網(wǎng)平臺建立MQTT,收發(fā)數(shù)據(jù),還要負責子設備管理,包括:網(wǎng)關(guān)添加子設備網(wǎng)絡拓撲關(guān)系mtt網(wǎng)關(guān)把子設備數(shù)據(jù)上報到云端網(wǎng)關(guān)接收指令,并轉(zhuǎn)發(fā)給子設備網(wǎng)關(guān)上報子設備下線網(wǎng)關(guān)刪除子設備網(wǎng)絡拓撲關(guān)系ttpmttigBeeous、BLE、OPC-UA等,這部分邏輯由網(wǎng)關(guān)實現(xiàn)。整體架構(gòu)如下:我們以JvainkKitDK一、創(chuàng)建網(wǎng)關(guān)產(chǎn)品基于此網(wǎng)關(guān)產(chǎn)品注冊一臺網(wǎng)關(guān)設備,并獲得身份認證三元組。二、網(wǎng)關(guān)設備上線使用網(wǎng)關(guān)設備三元組身份,建立端到云上的MQTT長連接,邏輯如下:LLnkKInaamspaams=newLnkKInaam);DevceInogaeaInfo=newDevceIno);gaeaInfopducKy=gaea.odcKe;gaeaInfodeveName=gaea.evceNme;gaeaInfodeveecet=gaea.evceece;paamdevceIfo=gaeaInfo;LnkK.genance).naam,ILnkKnnecLene)此時,我們在控制臺查看網(wǎng)關(guān)設備狀態(tài)為:在線三、添加網(wǎng)絡拓撲關(guān)系T當子設備水泵通過本地協(xié)議接入網(wǎng)關(guān)后,我們需要同步網(wǎng)絡拓撲關(guān)系到云端,也就是添加子設備到這個網(wǎng)絡里。代碼邏輯如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaAdubDevc(devceIfo,子設備身份ubDevcennecLene)添加成功后,我們在控制臺網(wǎng)關(guān)設備詳情,可以看到關(guān)聯(lián)的子設備列表,如下:四、子設備上線添加網(wǎng)絡拓撲關(guān)系后,我們需要把子設備在本地網(wǎng)絡的狀態(tài)同步到云端。子設備上線代碼邏輯如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceogn(devceIfo,子設備身份IubDevceconLene)子設備成功上線后,我們在網(wǎng)關(guān)設備詳情,可以查看到子設備狀態(tài)為:在線在設備詳情頁面,可以查看到接入的網(wǎng)關(guān)信息,如下圖:五、子設備上報數(shù)據(jù)TDDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceuh(opc,/子設備opcdaa,/數(shù)據(jù)devceIfo,子設備身份IubDevceconLene)日志服務查看子設備上報數(shù)據(jù)的日志如下:六、子設備訂閱主題oicDDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceucbe(opc,/子設備訂閱opcddevceIfo,子設備身份IubDevceconLene)七、子設備下線子設備和本地網(wǎng)關(guān)斷開連接時,我們需要把離線狀態(tài)同步到云端,代碼邏輯如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceogu(devceIfo,子設備身份IubDevceconLene)八、子設備網(wǎng)絡拓撲刪除子設備完全從本地網(wǎng)絡移除是,我們需要刪除設備的網(wǎng)絡拓撲關(guān)系,代碼邏輯如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaDeeeubDvce(devceIfo,子設備身份IubDevceemveLene)至此,我們掌握了網(wǎng)關(guān)和子設備的開發(fā)過程。如果網(wǎng)關(guān)設備采用C,或者Python開T PAGE101 >09)09)< PAGE100 設備用509證書接入實戰(zhàn)(一)作者|TCA證書;將數(shù)字設備證書與設備身份相綁定。限制說明MQTTCA證書。目前僅2(上海)CA證書。CARSA簽名的設備證書。10CA。CA證書注冊。一、制作私有CA證書MacOpenSSLCAesl版本:opeopelveon-aOpenL0..h14Janbuton:Nov192017pafo:dan648664vmopn:bn6464)m2n)c4pcha)dedcc16n)bofhd)compile:-archx8664-fmessage-lengh=0-pipe-Wno-tigraphs-fpascal-strings-fasm-bocks-O3-DREENTRANT-DDSODLFN-DHAVE_DLFCN_H-DL_ENDIAN-DMD32_REG_T=int-DOPENSSL_NO_IDEA-DOPENSSL_PIC-DOPENSSL_THREADS-DZLB-mac-veon-mn106ONLDIR:SemLbaOpenL"CAkeyCACAkey10openssleq-new-509-days650-newkeysa:2048-keyoutmIoTARoot.key-outmyoARo.t-ubj\=NShanghaLhanghaOIoOUoN."CA證書opel09-nout-et-nmIoARo.tCA證書內(nèi)容:二、制作驗證證書查看私有證書注冊碼T在左側(cè)導航欄,選擇設備管理>CA。CACA。CA證書對話框中,獲取注冊碼。驗證證書制作OpenSSL為例,制作驗證證書,操作步驟如下:Key:#生成驗證證書#生成驗證證書opelgena-otvefcane.key2048生成驗證證書CSR,其中Cmmname需填入oTCA證書注冊碼:#生成驗證證書#生成驗證證書CSRopeleq-new-keyvefcaonekey-otvefcaonecr-ubj\=NShanghaLhanghaOIoOUoN***這里是注冊碼***"CACSR創(chuàng)建驗證證書:CAkeyopensslx509-req-inverificationCert.csr-CAmyIoTCARoot.crt-CAkeymyIoTCARoot.key-Acaeeal-otvefcaonect-as65-ha12#查看驗證證書內(nèi)容opel09-nout-et-nvefcaonect查看驗證證書:三、上傳并驗證私有CA證書當我們準備完成私有CA證書和對應驗證證書,就可以在IoT物聯(lián)網(wǎng)平臺的控制臺上傳證書了。上傳證書頁面如下:CA證書詳情頁面,可以查看證書信息,參考如下:至此,我們完成了私有CA證書的制作和在oT物聯(lián)網(wǎng)平臺的注冊。后續(xù),我們會介CA.09T物聯(lián)網(wǎng)平臺。09)< PAGE104 PAGE109 >09)設備用509證書接入實戰(zhàn)(二)作者|509一、創(chuàng)建產(chǎn)品和注冊設備創(chuàng)建產(chǎn)品T控制臺。在左側(cè)導航欄,選擇設備管理>產(chǎn)品。在產(chǎn)品管理頁,單擊創(chuàng)建產(chǎn)品。X.509,CA證書勾選是。產(chǎn)品創(chuàng)建完成后,如下圖:注冊設備evicNme。注冊完成后,設備處于未激活狀態(tài),其中X.509證書為空。二、簽發(fā)設備證書TCAenslCNevicNme。pempemkeyopelgena-otdeve-1key2048CSRopeleq-new-keydevce1.ey-otdeve-1cr-nekeya:2048-ubj\=NShanghaLhanghaOIoOUoNdn02842"#-eealCACRTopensslx09-eq-ndevice-1.csr-AmyIoTCARoot.ct-AkeymyIoCARoot.key-Aceaeeal-utdevce1.t-ds60-ha12#查看設備證書SNopel09-nout-et-ndevce1.tSN碼,如下圖。三、綁定設備證書T物聯(lián)網(wǎng)平臺需要用戶上傳設備rouctKey,eviceNme和設備證書SN的映射csvoducKeDeveNameNa1UoOALdn026ddd180a026d7TCV綁定成功后,我們查看綁定結(jié)果,如下圖:四、設備激活我們以Java設備為例,介紹設備以私有證書接入過程。JavaPKCS#8OpenSSL##轉(zhuǎn)換格式PKCS#8opelpkc8-ok8-nfmM-ndeve-1key-utdevce1pk8.key-ncptLSecremoe2itrt.crtSScketFactry實例。ppoeedLockeFacyceaeLocke)hoscepon{/hp:documendea7742.hml/設備.09/IoTAInpureamn=IoqlenWhAuthBX0.cass.geReouceAsteam"iooo.cr");efcaeacoycf=efcaeFco.eInance.0);efcaeca=cf.gneaeefcaen;n.oe);Keoekeoe=Keoe.geIanceKeoe.geefaupe));keoeoadn,nu);keoeeefcaenca,ca);usanageFactoymf=usManagerFacoy.geInsanceTusanageFacto.geDefauAghm));mfnkeoe);//傳入設備證書、證書證書私鑰InputSreamcerIn=IoMqtClentWthAuthBX509.cass.geResouceAsSteamcerPah);efcaeacoycef=efcaeFco.eInance.0);efcaecea=cef.gneaeefcaeeIn);ceIncoe);Keoeks=Keoe.geInaneKeoe.geefaupe));k.odnu,nu);k.eefcaencefcae,cea);vaeKeypvaeKey=gevaeKepvaeKeah);k.eKeyEny"pvae-key",pvateKey,pvateKeyasord.oharAay),neweticae]{cea});KeanageFacoykmf=KeManagerFacoy.geInsanceKeanageFacoy.geDeauAgoh));kmfnk,pvaeKeaod.haAa));/構(gòu)造ockeFcoyttffLonetcont=Lone.geInanceLV1.2);coe.nkmf.eKeanage),mf.guanage),nu);LockeFacyockeFcoy=cone.gockeFco);eunockeFco;}QTT的CNNCT,此時srname和asrd////接入域名ngbker=:x0.."+egonId+.aunc.co:18;/TcenIdngmqenId=em.cuenme)+ecuemode2;emoeencepeence=newemoeence);mqent=newqeneveURL,mqenI,peence);qonncOpnsconnps=newqonncOpn);connp.eqeon4);/T.11/Looc,mqenIdecuemoe2。connp.eockeacceaeLocke));connp.eeaneonfae);connp.eAumacReonneue);connp.eKeeAveIneva00);//設置connect回調(diào)mqttClient.setCallback(newMqttCallback(){@OvedepubcvodmeageAvedngopc,qeagemeage)hoscepon{/只處理.09fexauhdenepone.equaoc)){JONObjectson=JSONObjec.paseObectnewtingmesage.getPayoad),tandadae.UF8));/poucKeydeveNamengpducKey=on.gengpoucKe);ngdeveName=on.gengdevceame);}ee{//處理其他下行消息,強烈建議另起線程處理,以免回調(diào)堵塞。}}@OvedepubcvoddeveopeeIDeveokenoken){}}@OvedepubcvodconeconLhoabecaue){}});mqenconncconOp);設備啟動,聯(lián)網(wǎng)后,我們可以在IoT物聯(lián)網(wǎng)平臺控制臺查看設備當前狀態(tài)為在線,509至此,我們完成了設備與設備證書綁定,從而使設備以X.509證書認證方式接入oT物聯(lián)網(wǎng)平臺。消息處理 PAGE113 >ITIoT< PAGE114 深度解讀IoT消息洪峰怎么扛|T傳統(tǒng)的消息隊列(Kafka、RocketMQ等)經(jīng)過多年打磨,在高性能、海量堆積、消息可靠性等諸多方面都已經(jīng)做得非常極致,但在IoT物聯(lián)網(wǎng)場景中,往往需要面臨著海量的消息傳遞,傳統(tǒng)的消息隊列表現(xiàn)的“力不從心”。T列最大意義在于讓整個消息在不可控的環(huán)境中平穩(wěn)運行,因為IoT設備時不時會由于故障或網(wǎng)絡抖動會導致大量消息洪峰。一、IoT隊列和普通隊列的差異點上下行隔離拆分在T支持設備級的海量topickfka的ticbroker要退化到隨機寫,失去優(yōu)勢,另外要zookeepertic多個設備tpic,再橋接映射到少量的實際kafkatoic,這方案有一定可行性,但做不到隔離效果,治標不治本。12是“海量topic盡量相互隔離,并且不影響整體性能”,盡量做到設備A的消息堆積ticB。實時生成消息優(yōu)先發(fā)送(此時后端系統(tǒng)都恢復了有用。因此,實時生成消息優(yōu)先發(fā)送,堆積的消息進入降級模式。二、IoT消息隊列誕生IoTticfllw保序降級,實時優(yōu)先,堆積退化;僅實時消息相對有序。tic連接、計算、存儲分離。消息模式圖片只是個片段,從這個模式可以看出來機制差別,大家都沒有錯,只是出發(fā)點不同。連接、計算、存儲分離brokerbrokerolB消息策略-推拉結(jié)合取堆積消息,而拉取是由AMQP隊列網(wǎng)關(guān)來做,給到用戶接口始終是推送過去的onMessage回調(diào)。rkercnumerueenskfkakfkarcktmqbrokerrkercnumruuerucercmmit。ACK。線性擴展-離線消息部分broker三、一個思考一一如何解決海量topic問題?首先面對“大量”的問題一般都是考慮分區(qū),單元化,分組等隔離和拆分,這里海量tic我們討論針對一個單實例模式下如何盡可能做到更多tic10%沒問題肯定是不現(xiàn)實的。由于rkerrker和tpictpic數(shù)據(jù)生成,broker海量ticticticrdismtttictictreivemq單個tic四、阿里云AIoT消息隊列ATAQP10列和新隊列,交給用戶按場景來選擇,用戶即可選擇使用kafka、mq,也可以選用iot隊列,甚至組合模式,比如按消息特征規(guī)則來配置流轉(zhuǎn)隊列。阿里云AIoT的場景隊列實踐,在現(xiàn)有mq隊列、kafka隊列融合之外,加了種自有選擇輕便的T PAGE123 >億級IT億級I億級IoT< PAGE120 億級IoT設備連接底層邏輯|T物模型AT熊益群一、物模型三個關(guān)鍵問題:為什么需要物模型?物模型能解決那些行業(yè)問題?物模型帶來什么價值?JVMOS的差異差異、軟硬開發(fā)耦合、全鏈路驗證流程長、設備孤島、數(shù)據(jù)孤島等問題。生態(tài)化:軟、硬件一旦基于物模型標準化開發(fā)和交互,圍繞物聯(lián)網(wǎng)的多角色,包括SVIHV耦,提升了設備的流通性,促進生態(tài)化。二、物模型面臨哪些技術(shù)挑戰(zhàn)?以一個燈泡為例:延展開來說,物模型的技術(shù)挑戰(zhàn)具體有這幾項:超大點位和超復雜結(jié)構(gòu):尤其工業(yè)場景,通常需要對包含大量傳感器(萬級別)的傳力。需要能夠適應物理設備模塊可插拔特性。在設備運行階段的可靠性要求非常高??蛇m配:由于行業(yè)里面已經(jīng)有不少設備模型和交互協(xié)議,比如工業(yè)場景的Modbus,pc等,生活場景的le,zigbee等,當然還有大量三方平臺私有協(xié)議,為了幫助這些存量設備能夠使用物模型,物模型需要具備模型和協(xié)議適配能力。統(tǒng)一交互協(xié)議:設備除了需要可表達之外,還需要可訪問,物模型不僅需要定義設備我們應該如何設計物模型呢?早期大多數(shù)物聯(lián)網(wǎng)平臺比如AzureAWS大多數(shù)對于設備建模都采用的是面向?qū)ο笳Z言的思路,比如WoT、OPC、OMA、OCF、CWMP、AllJin等,面向?qū)ο笳Z言的抽象能力在計算機編程發(fā)展的幾十年已經(jīng)被證明,我們物模型定義也充分借鑒,卻又因物聯(lián)網(wǎng)而有所不同。我們以面向?qū)ο笳Z言ava里面的class做類比,classschema進行了一定的擴展,定義為屬性、服務(方法)和事件三要素,事件是一類特【圖為物模型基礎schema(沒有包括模塊化、多語言、多版本等一系列高階特性)】解決了這些挑戰(zhàn)后,物模型的技術(shù)架構(gòu)就呈現(xiàn)出來了。阿里云ATAlik還有一點要注意,物模型和數(shù)據(jù)標準是不一樣的。schema描述設備的能力,但由于物聯(lián)網(wǎng)碎片化,大家對于設備云T數(shù)據(jù)標準的沉淀主要來自CA標準聯(lián)盟,CA模板三類素材:資源:標準庫中最原子的能力,有屬性、事件、服務三種類型(三要素);功能模塊:一組資源的集合。集合中的資源可以是標準庫中已有資源的組裝,也可以是在當前功能模塊新增的資源;物模板:一組功能模塊和一組資源的集合。集合中的模塊和資源可以是標準庫中已有模塊和資源的組裝,也可以是在當前物模板新增的資源;下圖描述了物模型、數(shù)據(jù)標準之間的關(guān)系:最終我們看下燈泡物模型示意圖:數(shù)據(jù)標準的核心價值是什么呢?阿里牽頭的CA標準聯(lián)盟,已經(jīng)沉淀了海量標準化的數(shù)據(jù)模型,核心價值一是為了建 PAGE127 >ITraastIITraat< PAGE128 IoT平臺廣播消息Boacast實戰(zhàn)作者|一、消息廣播實現(xiàn)原理Topic broacaYouroducKe}此處替換為自定義標識 服務器通過PubBroadcastAPIttp//helaliyncom/ocmnt_etil/9909html各個設備端收到的payload boada:hssboacatdaa} 二、廣播開發(fā)實戰(zhàn)產(chǎn)品和設備創(chuàng)建設備產(chǎn)品buttona1p36XsaOS7webAppa1p36XsaOS7ameaa1p36XsaOS7消息廣播topic注:racat的ticT boacaa1p6aOshaeDaa 設備端應用程序代碼業(yè)務主程序:/**/***noeboaca-evces*contmt=equeaun--m);//設備身份三元組+區(qū)域contoons=eque.odevc-cnfg.on);//建立連接contcent=mqgeAunIoenopn);//訂閱廣播client.subscribe(`/broadcast/${ductKey}/shareData`)cen.nmeage,funcnop,meage){cooe.oopc"+oc)cooe.omeage"+meage)})itdvicecofigsn{{poucKe:pducK,devceame:deceNae,devceece:"替換devceece,egonI:cn-hangha"}業(yè)務服務器發(fā)送廣播/**/***pakageon@acoudppco:1..2"*contco=equec);ccontRent=eqe@acoupo-ce).en;contoons={accKe:"自己的acceKe,accKeSece:"自己的acceKeece"};1.創(chuàng)建centcontcent=newRen{accKeId:opn.accKe,eceAceKe:opn.accKeSece,enpon:hp:o.c-hanghaaun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論