日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

阿里云物联网边缘计算加载MQTT驱动

發布時間:2024/8/23 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里云物联网边缘计算加载MQTT驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

本文在LinkEdge快速入門樣例驅動的基礎上,加載了MQTT訂閱的客戶端,使得邊緣端容器可以通過MQTT獲得外部數據。

1.?????????系統需求

物聯網邊緣計算平臺,又名Link IoT Edge[1]。在物聯網邊緣計算幫助文檔中的?“快速入門”描述了這樣一種應用場景,“光照傳感器檢測室內光照強度是否大于500 Lux,若光照強度大于500 Lux,則光照傳感器認為室內不需要開燈,從而去關閉燈(客廳燈開關等于1),否則打開燈(客廳燈開關等于0)。”

本文在該樣例的基礎上,在光照傳感器的驅動程序上加載了MQTT訂閱的客戶端,使得光照傳感器可以通過訂閱的方式獲得光照強度值。

2.?????????系統架構

????圖?1?給出了樣例的邊緣實例架構,樣例中LightSensor值是模擬值,通過定時器每2000毫秒執行表格?1中代碼。

圖?1?邊緣實例架構

表格?1?模擬值生成代碼

?

??????????if (self.lightSensor.illuminance >= 600) {

?????????????delta = -100;

???????????} else if (self.lightSensor.illuminance <= 100) {

?????????????delta = 100;

???????????}

??????????self.lightSensor.illuminance += delta;

?

???圖?2給出了在在光照傳感器的驅動程序上加載了MQTT訂閱的客戶端的架構。

圖?2?光照傳感器驅動掛載MQTT訂閱客戶端

3.?????????安裝部署

樣例完整的安裝和配置流程詳見幫助[2]。

4.?????????改寫驅動

4.1.????????下載驅動

下載LightSensor驅動源碼,下載解壓后是一個index.js文件。

圖?3?下載驅動

4.2.????????編寫驅動

(1)???????index.js中添加MQTT訂閱客戶端代碼

表格?2?MQTT訂閱客戶端代碼

?

'use strict';

?

const {

??RESULT_SUCCESS,

??RESULT_FAILURE,

??ThingAccessClient,

} = require('linkedge-thing-access-sdk');

?

var mqtt = require('/usr/bin/mqtt');

var options={username:'admin',password:'password',clientId:'Nodejs-ed16ef77-5cf2-4e5c-b511-1af14451df51'};

var client = mqtt.connect('mqtt://*.*.*.*:1883',options);???//?連接到MQTT服務端

?

var num = 0;

var qtt = {};

?

qtt.id = '2002';

qtt.name = 'shoen';

qtt.age= 5000;

?

client.subscribe('test',{qos:1});?????????????????????//訂閱主題為test的消息?

?

client.on('message',function(top,message) {?

????qtt=JSON.parse(message.toString());??

});

?

// Max retry interval in seconds for registerAndOnline.

const MAX_RETRY_INTERVAL = 30;

?

(2)???????注釋原有模擬部分代碼,添加獲得值代碼。

?

表格?3?獲得數據來源

?

????????setInterval(function () {

??????????// if (self.lightSensor.illuminance >= 600) {

??????????//???delta = -100;

??????????// } else if (self.lightSensor.illuminance <= 100) {

??????????//???delta = 100;

??????????// }

??????????// self.lightSensor.illuminance += delta;

?

??????????if (self.client) {

????????????try {

??????????????self.lightSensor.illuminance = qtt.age;

??????????????var properties = {'MeasuredIlluminance': self.lightSensor.illuminance};

??????????????console.log(`Report properties: ${JSON.stringify(properties)}`);

??????????????self.client.reportProperties(properties);

????????????} catch (err) {

??????????????console.log(err);

??????????????self.client.cleanup();

????????????}

??????????}

????????}, 2000);

?

4.3.????????重新部署

(1)???????將index.js壓縮成index.zip文件,注意index.zip僅包含index.js文件,不含其他任何文件夾。

(2)???????新建驅動myLightSensor,上傳index.zip文件。

圖?4新建驅動

(3)???????部署實例

圖?5?部署實例

5.?????????腳本解析

在部署過程中,我們通過link-iot-edge.sh {productkey} {devicename} {devicesecret}下載和啟動邊緣計算平臺。

分析link-iot-edge.sh后,發現邊緣端實際是就是一個docker容器。其中主要幾行腳本含義如下描述:

圖?6?link-iot-edge.h源碼(局部)

n??docker pull "$LINKEDGE_IMG"

???LINKEDGE_IMG=$IMAGE_NAME_PREFIX:$1

???registry.cn-hangzhou.aliyuncs.com/iotedge/edge_x86_centosversion

n??docker run -d --rm --privileged=true -v linkedge_vol1:/usr/.security -v linkedge_vol2:/etc/.sec/ -v linkedge_vol3:/linkedge/gateway/build/.sst -v linkedge_vol4:/tmp/var/run/ -v linkedge_vol5:/linkedge/run --name=config-params $LINKEDGE_IMG $2 $3 $4

n??docker

???run創建一個新的容器并運行一個命令

???-d后臺運行容器,并返回容器ID

???--rm?容器退出時自動清理容器并刪除文件系統,

???--privileged=true?以特權方式啟動容器,允許掛載宿主機目錄

???-v?linkedge_vol1:/usr/.security

宿主機的linkedge_vol1目錄掛載到容器的/usr/.security

???-v linkedge_vol2:/etc/.sec/

???-v linkedge_vol3:/linkedge/gateway/build/.sst

???-v linkedge_vol4:/tmp/var/run/

???-v linkedge_vol5:/linkedge/run

???--name=config-params?為容器指定一個名稱config-params

???$LINKEDGE_IMG?容器名稱

???$2 $3 $4三個均作為參數

n??為了方便訪問,修改以上啟動腳本,使得容器內可以訪問宿主機c:/test目錄。

???${preflag} docker run --rm --privileged=true?-v c:/test:/data?-v linkedge_vol1:/usr/.security -v linkedge_vol2:/etc/.sec/ -v linkedge_vol3:/linkedge/gateway/build/.sst -v linkedge_vol4:/tmp/var/run/ -v linkedge_vol5:/linkedge/run --name=config-params $LINKEDGE_IMG $2 $3 $4

?

6.?????????Node.js實現MQTT

n??安裝node

n??安裝npm install mqtt

6.1.????????MQTT服務端

本文采用Apollo MQTT作為MQTT服務器,安裝部署完畢后采用默認用戶名admin,密碼password。MQTT服務器采用默認的1883端口。

6.2.????????MQTT客戶端發布

表格?4?MQTT客戶端發布

?

var mqtt = require('mqtt');

?

var options={username:'admin',password: 'password',clientId:'Nodejs-ed16ef77-5cf2-4e5c-b511-1af14451df58'};

var client = mqtt.connect('mqtt://*.*.*.*:1883',options);??//連接到MQTT服務端

?

var num = 0;

var qtt = {};

?

qtt.id = '1001';

qtt.name = 'shoen';

qtt.age= 2222;

?

client.publish('test', JSON.stringify(qtt), { qos: 0, retain: true });????

7.?????????設置容器

通過link-iot-edge.sh啟動邊緣容器后,需要進入容器安裝mqtt庫,并設置容器內環境參數,使得node.js編寫的mqtt客戶端能夠正確引用mqtt庫,即var mqtt = require('/usr/bin/mqtt');

設置主要步驟如下所示:

(1)???????啟動容器:link-iot-edge.sh v1.7?a1xwL19pRAZ?mygw uPcoNbWHYselHGpwG2HRtMvh********

(2)???????進入容器:docker exec -it config-params /bin/bash

(3)???????node.js設置引用

n??安裝淘寶cnpm:npm install -g cnpm --registry=https://registry.npm.taobao.org

n??全局安裝mqtt:cnpm install –g mqtt

n??查看cnpm全局倉庫路徑:cnpm?config?get?prefix

n??修改cnpm全局倉庫路徑:cnpm config set /usr/bin

n??以上設置完畢后,才可以代碼中添加引用:var mqtt = require('/usr/bin/mqtt');

n??以上設置重啟本容器失效

8.?????????容器命令

調試過程中涉及的相關容器命令如下:

(1)???????啟動容器時映射宿主機和容器目錄:-v c:/test:/data

(2)???????查看IP地址:ip addr

(3)???????下載ifconfig:curl ifconfig.me

(4)???????find -name "*thing*"

n??linkedge-thing-access-sdk所在位置:./linkedge/gateway/build/bin/iot-gravity/runtime/nodejs8/node_modules/linkedge-thing-access-sdk

(5)???????查看容器鏡像docker image

(6)???????停止容器?docker stop?容器ID

(7)???????刪除鏡像?docker rmi?鏡像ID

9.?????????注意事項

(1)???????驅動編寫錯誤可能包括:庫文件未引用、node.js語法錯誤,mqtt連接錯誤;

(2)???????邊緣實例部署過程中,如發生以上錯誤發生,光照傳感器將始終處于“離線”狀態;

(3)???????本文宿主機為Windows 10,系統配置如下:

圖?7?Windows系統配置

10.?????最終效果

在宿主機上通過MQTT客戶端發布一個qtt.age=2222數據,該數據會發送至MQTT服務器,容器內加載的MQTT訂閱客戶端將收到該數據,并將該數據賦值給self.lightSensor.illuminance,獲取的值將通過self.client.reportProperties(properties);上報至IOT Hub,最終在LightSensor運行狀態中顯示光照度檢測值為2222Lux。

圖?8?最終效果

寫在后面

今年3月底深圳云棲大會后,和阿里云Linkedge團隊幾位同學在西溪園區做了一次簡單的技術交流。阿里的同學介紹了物模型、容器等概念,我則提了異構工業設備連接對于設備驅動有較為強烈的需求……眨眼到了年底,Linkedge從公測到發布,直到今天(12-5)正式發布了v1.8,新加的幾項特性都值得關注,如“本地日志可以自動同步到云端的日志服務產品中,支持按照業務功能進行查詢。”這極大方便了運維。此外,“支持C版本設備驅動管理”,這對于我這樣一位老程序員(年紀大,而非經驗豐富)的吸引力是非常大的。

自10月17日開始試用Linkedge,學習時斷時續,這個過程中Linkedge的幫助文檔不斷更新,導致前面截圖已失效。時至今日,終于輸出此文,雖然還沒有實現了詳細介紹如何在邊緣計算平臺上編寫驅動的目標,但至少走通了關于驅動的helloworld。最后,提幾點意見,希望Linkedge開發團隊能有所改進:

(1)???????驅動調試非常麻煩,幫助中沒有涉及調試方式。--這點從v1.8中的特性來看應該有很大改善。

(2)???????邊緣容器設置細節應對開發者開放。

(3)???????希望提供一個能和容器外(宿主機或其他設備)通訊的樣例,如通過串口、以太網,這樣的樣例對于學習更加有效。

?

原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。

總結

以上是生活随笔為你收集整理的阿里云物联网边缘计算加载MQTT驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久五月天 | 亚洲一区二区视频在线播放 | 精品国产一区二区三区久久狼黑人 | 五月天综合网 | tube日本69第一次 | 你懂的网址在线观看 | 国产一区二区三区在线免费观看 | 中文字幕一区二区三区乱码在线 | 久久久久久一区 | 日本不卡在线视频 | 国产精品一卡二卡 | 我要色综合网 | 在线视频欧美亚洲 | 色秀av| 欧美一级特黄aaaaaa大片在线观看 | 久久这里只有精品首页 | 天躁夜夜躁狼狠躁 | 国产aa大片 | 色涩涩| 网站免费在线观看 | 99热官网| 亚洲国产精彩中文乱码av | 九色免费视频 | 韩国一区二区在线观看 | 俄罗斯丰满熟妇hd | 欧美福利网站 | 伊人影院中文字幕 | 国产chinasex对白videos麻豆 | 日韩wwww| 国产免费av网址 | 99精品无码一区二区 | 中国av一级片 | 日韩在线欧美在线 | 免费无遮挡在线观看视频网站 | 黄色片小视频 | 免费看污片的网站 | 97热视频| 国产免费不卡视频 | 九九亚洲 | 91精品国产91久久久久久黑人 | 国产美女久久久 | 色婷婷国产精品 | 人妻少妇精品中文字幕av蜜桃 | 午夜秋霞影院 | 午夜成人鲁丝片午夜精品 | 在线观看二区 | 黄视频在线播放 | 黄色高清免费 | 蜜臀一区二区三区精品免费视频 | 少妇一级淫免费播放 | 国产精品视频久久久久久久 | 国产精品羞羞答答在线 | 精品久久久久久久久久久久久久久久久 | 日av在线播放 | 青青伊人国产 | 影音先锋男人的天堂 | 黑人性生活视频 | 成人激情免费 | 日本免费网站 | 亚洲第一天堂av | 欧美精产国品一二三 | 韩国美女一区 | 天天爱夜夜爱 | 亚洲欧美高清 | 玖草视频在线观看 | 72种无遮挡啪啪的姿势 | 性欧美大战久久久久久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚州av网| 又黄又刺激的视频 | 黑人番号 | 色国产在线 | 欧美日韩国产一区二区三区在线观看 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 最新国产中文字幕 | 久久国产精| 天天爱综合网 | 午夜网| 中国二级毛片 | 免费观看日本 | 久操视频免费在线观看 | 欧美日韩国产精品一区二区 | 亚洲视频入口 | 青青草小视频 | 国产中文在线 | 好av| 中文字幕av久久爽一区 | 欧美精品一区二区久久婷婷 | 一区二区三区四区欧美 | 女人高潮被爽到呻吟在线观看 | 日韩伊人 | 久久91精品国产 | 国产艳俗歌舞表演hd | 女人黄色片 | www.黄色 | 日日夜夜免费 | a天堂资源 | 国产色片 | 超碰美女在线 |