域名只要上線訪問,就需要備案的,如果不備案80端口是要封掉的,不過ssl證書https加密使用443端口,如果你不開放80端口,僅僅使用443端口,好像不備案也可以。推薦一款免費(fèi)SSL證書,挺好用的,申請(qǐng)地址網(wǎng)頁(yè)鏈接
創(chuàng)新互聯(lián)是一家專業(yè)提供伊通企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為伊通眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
MQTT通信協(xié)議的基本介紹參考文章 NT35 MQTT通信 ,本篇給出阿里云的基本操作,NT35E通過訂閱阿里云的主題發(fā)布信息與阿里云平臺(tái)相互通信。
登錄阿里云?→?工作臺(tái)?→ 物聯(lián)網(wǎng)平臺(tái)?→ 進(jìn)入控制臺(tái)→ 公共實(shí)例
阿里云默認(rèn)通信協(xié)議為MQTT,不需要特殊選擇,用戶按照如下步驟創(chuàng)建自己的產(chǎn)品:
創(chuàng)建產(chǎn)品 → 添加設(shè)備?
在"查看"標(biāo)簽中,包含了MQTT連接的基本三元組信息,也就是后面設(shè)備要填充的基本參數(shù)
? 用戶每定義一類產(chǎn)品都會(huì)自動(dòng)生成對(duì)應(yīng)的Topic列表,當(dāng)然我們也可以"自定義Topic"便于自己測(cè)試。
? ?指令解析參考《Lierda NT35ENT26E-CN AT命令手冊(cè)》,這里給出使用到的AT指令對(duì)應(yīng)參數(shù)說(shuō)明以便于理解。
AT+LMQTTCFG=cloud,tcpconnectID[,cloud _ type,data_type ]
tcpconnectID 。MQTT Socket 標(biāo)識(shí)符。范圍:0~4。
cloud_type整型。2 alibaba,其他參數(shù)指定其他平臺(tái)
data_type整型。阿里云平臺(tái) 1 json數(shù)據(jù)?
AT+LMQTTCFG="cloud",0,2,1 ? 對(duì)應(yīng)就是對(duì)接阿里云平臺(tái),發(fā)送json格式的數(shù)據(jù)
AT+LMQTTCFG=aliauth,tcpconnectID[,product_key,device_name,device_secret]
填充阿里云平臺(tái)中設(shè)備的三元組信息
AT+LMQTTCFG="aliauth",0,"a1JszCpjS61","NT35E_06011","390358fc595040aa73221e8393aba86c"
這部分是模組進(jìn)行TCP鏈路連接(需抓包確認(rèn))
AT+LMQTTOPEN=tcpconnectID,host_name,port
host_name對(duì)應(yīng)阿里云 "設(shè)備信息"→"MQTT連接參數(shù)" 中的 "mqttHostUrl"
AT+LMQTTOPEN=0,"a1JszCpjS61.iot-as-mqtt點(diǎn)吸煙 -shanghai.aliyuncs點(diǎn)抗 ",1883
模組作為客戶端,通過MQTT協(xié)議連接到服務(wù)器(需抓包確認(rèn))
AT+LMQTTCONN=tcpconnectID[,clientID[,username[,password]]]
clientID字符串型??蛻舳藰?biāo)識(shí)符。用戶可以隨便定義。 username,password 不需要填寫
AT+LMQTTCONN=0,"NT35E"
AT+LMQTTSUBUNSUB=tcpconnectID,subflag,msgID,topic1[,qos1[,topic2[,qos2]d…]]
subflag整型。消息類型 0 訂閱 1 取消訂閱
msgID整型。數(shù)據(jù)包消息標(biāo)識(shí)符。范圍:0~65535。
topic帶雙引號(hào)的字符串型??蛻舳擞嗛喕蛘咄擞喌闹黝}。長(zhǎng)度范圍:0~256 字節(jié)。
qos整型。客戶端發(fā)送訂閱消息(SUBSCRIBE)的 QoS 等級(jí),此時(shí)為必選參數(shù)。2?正好一次,該主題下的消息確保接收端僅接收到一次
AT+LMQTTSUBUNSUB=0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",2
這里注意topic對(duì)應(yīng)參數(shù)的替換,里面的deviceName需要替換。
訂閱主題之后,服務(wù)器下發(fā)的數(shù)據(jù)模組就可以正常接收了。模組下發(fā)位置
? ?發(fā)布消息在對(duì)應(yīng)的設(shè)備目錄下,如果有設(shè)備"訂閱"對(duì)應(yīng)的消息,平臺(tái)"發(fā)布"相應(yīng)的數(shù)據(jù)設(shè)備就可以接收到了。
AT+LMQTTPUB=tcpconnectID,msgID,qos,retain,topic,msglen,msg
msgID整型。 0~65535。任意定義,但qos=0 時(shí),該參數(shù)值只能為0。
qos整型。 0?最多一次 1?至少一次 2 ?正好一次
retain整型 。服務(wù)器是否保存該消息。0?不保存? 1?保存
topic帶雙引號(hào)的字符串型。 客戶端發(fā)布消息的主題。長(zhǎng)度范圍:0~256 字節(jié)
msglen整型 。指定的消息數(shù)據(jù)長(zhǎng)度。范圍:0~1460。
msg字符串型。 需要發(fā)布的消息數(shù)據(jù)。
AT+LMQTTPUB=0,0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",10,"1122334455"
?注意剛剛自己創(chuàng)建的主題屬性是" 發(fā)布和訂閱 ",所以模組發(fā)送該主題的信息,阿里云也是可以收到的
注意這里模組發(fā)送數(shù)據(jù)的時(shí)候,也推送了自己發(fā)送的數(shù)據(jù),因?yàn)閯倓傆嗛喠诉@個(gè)主題,所以模組訂閱(收)到了對(duì)應(yīng)的數(shù)據(jù)
? ?前面我們通過NT35E與平臺(tái)進(jìn)行信息交互,那么為什么是這樣填寫對(duì)應(yīng)的參數(shù)呢,每個(gè)參數(shù)對(duì)應(yīng)的說(shuō)明在阿里云上是什么樣的呢,用戶可以查看阿里云的幫助文檔進(jìn)行確認(rèn)。
? ?上面我們使用三元組的方式( 一機(jī)一密 )實(shí)現(xiàn)NT35E與阿里云平臺(tái)通信,但實(shí)際生產(chǎn)過程中該方式不好實(shí)現(xiàn),比如工廠有1000個(gè)設(shè)備生產(chǎn),如果每個(gè)設(shè)備都復(fù)制不同的三元組,很難實(shí)現(xiàn)工廠批量化生產(chǎn),此時(shí)可以通過 一型一密 的通信方式解決該問題。
一型一密模組端實(shí)現(xiàn)方式后續(xù)更新。
1、直連數(shù)據(jù)庫(kù)
Python直連到云數(shù)據(jù)庫(kù)上,與本地操作都一樣,只不過數(shù)據(jù)庫(kù)IP由內(nèi)網(wǎng)IP轉(zhuǎn)為云服務(wù)器IP。這種情況你需要注意的是:
直連數(shù)據(jù)庫(kù)時(shí)所需要的敏感信息(數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)賬號(hào),數(shù)據(jù)庫(kù)密碼)需要通過加解密手法,盡量避免泄露;
開放云數(shù)據(jù)庫(kù)的遠(yuǎn)程訪問權(quán)限,這個(gè)方面就是需要調(diào)防火墻(沒有防火墻就跳過),另外如果是MySQL,需要把數(shù)據(jù)庫(kù)賬號(hào)設(shè)置為允許遠(yuǎn)程訪問的狀態(tài),這個(gè)網(wǎng)上有教程,仔細(xì)看都沒問題;
直連數(shù)據(jù)庫(kù)優(yōu)點(diǎn)在于開發(fā)簡(jiǎn)單,我們不需要考慮tcp層如何運(yùn)作,但缺點(diǎn)是容易數(shù)據(jù)庫(kù)暴露,被人拿到數(shù)據(jù)庫(kù)數(shù)據(jù);
2、中間件
在云服務(wù)器上部署中間件,中間件有兩種:tcp和http,無(wú)論那種你都需要構(gòu)建好自己的通信協(xié)議,敏感數(shù)據(jù)加解密協(xié)議等等,在中間件框架下完成原直連數(shù)據(jù)庫(kù)所進(jìn)行的交互操作,如果用的人多了還要考慮性能問題。當(dāng)然,如果用中間件,數(shù)據(jù)庫(kù)是不需要開放遠(yuǎn)程訪問權(quán)限的(如果有防火墻,是需要在防火墻中,允許中間件端口的通信)。
中間件優(yōu)點(diǎn)在于只要沒出什么大bug,不會(huì)泄露數(shù)據(jù)庫(kù),缺點(diǎn)在于開發(fā)難度上;
一般都是走ssh 協(xié)議
ssh可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣取?/p>
ssh提供一套完備的密鑰機(jī)制,即一對(duì)秘鑰的非對(duì)稱加密。
SSH協(xié)議框架中最主要的部分是三個(gè)協(xié)議:
1傳輸層協(xié)議(The Transport Layer Protocol)提供服務(wù)器認(rèn)證,數(shù)據(jù)機(jī)密性,信息完整性 等的支持;
2用戶認(rèn)證協(xié)議(The User Authentication Protocol) 則為服務(wù)器提供客戶端的身份鑒別;
3連接協(xié)議(The Connection Protocol) 將加密的信息隧道復(fù)用成若干個(gè)邏輯通道,提供給更高層的應(yīng)用協(xié)議使用;