基于IoT边缘实现多协议设备接入案例实践 丨【我的华为云体验之旅】
【摘要】 这次实践是【物联网全栈成长计划】第三阶段-应用开发阶段考核 。本实验将指导您搭建一个基于 IoT 边缘服务的边缘节点,并通过边缘节点实现设备通过原生MQTT 协议及标准 Modbus 协议以设备直连边缘节点模式接入。想了解更多关于课程内容请移步主帖:【物联网全栈成长计划】0基础34课时,变身高阶物联网能力者,免费学还有智能穿戴!【物联网全栈成长计划】基础入门阶段考核【物联网全栈成长计划】设备...
这次实践是【物联网全栈成长计划】第三阶段-应用开发阶段考核 。本实验将指导您搭建一个基于 IoT 边缘服务的边缘节点,并通过边缘节点实现设备通过原生MQTT 协议及标准 Modbus 协议以设备直连边缘节点模式接入。
想了解更多关于课程内容请移步主帖:【物联网全栈成长计划】0基础34课时,变身高阶物联网能力者,免费学还有智能穿戴!
知识点了解:
- IoT 边缘(IoT Edge),是边缘计算在物联网行业的应用。IoT Edge 在靠近物或数据源头的边缘侧,是融合网络、计算、存储、应用核心能力的开放平台,就近提供计算和智能服务,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。
- 云端离终端设备(如摄像头、传感器等)和用户较远,对于实时性要求高的计算需求,把计算放在云上会引起较长的网络延时、网络拥塞、服务质量下降等问题。而终端设备通常计算能力不足,无法与云端相比。
- 在此情况下,IoT 边缘服务顺应而生,将云端计算和智能能力延伸到靠近终端设备的边缘节点,完美解决上述问题。
- IoT 边缘广泛应用于:智慧园区、智慧交通、智能工业、能源电力等场景。
下面开始实践
1、操作前提
访问华为云 IoT 管理控制台开通设备接入服务
- 登录华为云官网
- 选择“产品”->“IoT 物联网”->“设备接入 IoTDA”(也可以直接搜索ioTDA)
- 点击“管理控制台”;
- 控制台选择为“北京四”;
访问华为云 IoT 管理控制台开通IoT 边缘服务
- 登录华为云官网
- 选择“产品”->“IoT 物联网”->“IoT 边缘”(也可以直接搜索IoT 边缘)
单击“立即使用”,进入 IoT 边缘服务控制台。
单击页面右上角“开通服务”,点击“同意授权”按钮。
出现“注册节点”按钮,即表示自助开通服务成功。
购买边缘节点硬件
- 访问弹性云服务器 ECS 产品首页,链接地址:https://www.huaweicloud.cn/product/ecs.html,单击“立即购买”,进入购买页面。
- 填写基础配置信息。(需严格按照以下规格配置,否则将会产生额外费用)
- 计费模式:按需计费
- 区域:华北-北京四
- 可用区:随机分配
- CPU 架构:x86 计算
- 规格:为降低实验成本,可选择“通用入门型 | t6.large.2 | 2vCPUs | 4 GiB”
- 镜像:公共镜像 | Ubuntu | Ubuntu 16.04 server 64bit
- 主机安全:不勾选“开通主机安全”
- 系统盘:高 IO | 40GB
- 单击“下一步:网络配置”,并填写网络配置信息。
- 网络:默认配置
- 扩展网卡:默认配置
- 安全组:default
- 弹性公网 IP:现在购买
- 线路:全动态 BGP
- 公网带宽:按流量计费
- 带宽大小:为降低实验成本,可降低至 5Mbit/s
如果有时候释放资源的时候会忘记 可以勾选上随实例释放
- 单击“下一步:高级配置”,并填写高级配置信息。
- 云服务器名称:自定义,如 ecs-iot
- 登录凭证:密码
- 密码/确认密码:自定义,设置远程登录 ECS 用的密码,如 Huawei@123
- 云备份:暂不购买
- 云服务器组(可选):反亲和性,默认为空,无需配置
- 单击“下一步:确认配置”,确认配置信息,阅读并勾选同意协议,单击“立即购买”。
- 主机创建完成后,返回云服务器列表,进行主机授信配置。请记录“弹性公网 IP”信息,用于后续配置。
- 单击主机名,如 ecs-iot,进入主机详情页面。选择“安全组”页签,单击“配置规则”。
- 选择“入方向规则”,单击“添加规则“
- 优先级:100
- 协议端口:基本协议-全部放通
- 源地址:默认配置,IP 地址、0.0.0.0/0
- 其余参数默认即可,详情查看下图。
- Tips:SSH 协议端口(22)的入方向 TCP 协议默认开放,无需修改;边缘节点需要使用7883 和 8943 端口,可以选择全部放通。
- 填写参数信息后,单击“确定”。
安装 Docker。
- 返回 ECS 控制台,单击“远程登录”。
- 选择“CloudShell 登录”。
- 输入用户名和密码,其余参数默认不变,登录 Linux 系统。
- 用户名:root
- 密码:购买弹性云服务器时配置的用户密码
- 执行如下命令,安装 Docker Engine。//卸载旧版本,复制如下命令,回车执行。
sudo apt-get remove docker docker-engine docker.io containerd runc
- 更新 apt 资源,复制如下命令,回车执行。
sudo apt-get update
- 安装相关依赖资源,复制如下命令,回车执行。
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- 添加 Docker 官方的 GPG key,复制如下命令,回车执行。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 通过关键字查询结果,复制如下命令,回车执行。
sudo apt-key fingerprint 0EBFCD88
- 添加稳定源,复制如下命令,回车执行。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs) stable"
- 安装最新版本的 Docker,复制如下命令,回车执行。
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 根据提示信息,输入 Y 并回车。
- 运行 hello-world 校验 Docker 是否安装成功,复制如下命令,回车执行。
sudo docker run hello-world
2.安装MQTT设备模拟器
本章节指导用户如何在本地PC上安装MQTT设备模拟器,用于模拟设备基于MQTT协议接入IoT边缘节点。
- 在本地PC上访问MQTT.fx 下载页面
http://mqttfx.jensd.de/index.php/download
- 下载MQTT.fx工具(本实验以1.7.1版本为例)https://www.jensd.de/wordpress/?p=2746。
- 根据需要选择需要的版本 http://www.jensd.de/apps/mqttfx/1.7.1/
- 双击已下载的安装文件,单击“Next >”进入下一步。
- 选择安装路径,并单击“Next >”进入下一步。
- 选择快捷方式,并单击“Next >”进入下一步。等待出现如下界面,单击“Finish”完成安装。
- 获取设备接入证书。
在设备对接边缘节点场景中,需要在设备侧集成相应证书,单击下载链接中的链接下载即可。
安装 Modbus 设备模拟器:
本章节指导用户如何在本地 PC 上安装 Modbus slave 模拟器,用于模拟设备基于 Modbus 协议接入 IoT 边缘节点。
- 在本地 PC 上访问 https://modbustools.com/download.html,下载 Modbus Slave。注:Mobbus slave simulator 当前只有 Windows 版本,请按需下载 32 位或 64 位版本
- 双击已下载的安装文件,同意协议,并单击“Next >”进入下一步。
- 选择安装路径,并单击“Next >”进入下一步。
- 选择安装组件,并单击“Install”开始安装。
- 安装完成,单击“Next >”进入下一步。
- 单击“Finish”完成安装。
2、创建边缘节点
IoT 边缘标准版提供物联网设备的就近接入能力,低时延的边缘业务联动,多场景的数据计算和预处理,提供本地自治能力保证业务的可靠性和连续性,和云端 IoT服务协同提供统一的设备管理和数据分析。
- 进入 IoT 边缘控制台,选择左侧导航栏“IoT 边缘 > 边缘节点”进入页面。
- 单击右上角“注册节点”,配置边缘节点基本信息,完成配置后进入下一步
- 区域:华北-北京四
- 节点类型:标准版
- 节点名称:自定义,如 test_node
- 网关类型:other
- 绑定设备接入服务:IoTDA 默认基础版 | 设备归属资源空间:选择默认资源空间
- 配置节点数据,参数使用默认值即可,点击“立即创建”,弹出如下对话框。
- 本次实验边缘节点硬件是弹性云服务器 ECS,支持架构选择“x86_64”;
- 拷贝安装命令,然后单击“返回节点列表”关闭窗口。
cd /tmp && wget "https://ioe-installer.obs.cn-north-4.myhwclouds.com:443/edgeRuntime-0.3.072.20211111180419-x86/1636629336189/edgeRuntime-0.3.072.20211111180419-x86_64.tar.gz?AccessKeyId=XRMQYJEYZFLLTWFP6MZV&Expires=1639031086&Signature=ftcVCZNcFMmwIYwmt6%2BydfwwZ0g%3D" -O edgeRuntime_signed.tar.gz && tar -zxf edgeRuntime_signed.tar.gz && echo "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAss1wlVOptEpKHFxn64b/
UuIioiVgU0NcyW9vVzFFrNleN3dW6zoQ3BDDIkcGK5kq8/2YTNfh4FoUspDDiOue
EYrt/cv94iTRtSr0u/NqWJmh2i3nZO6gQynOgee0+rki36G1hbRK2NtL3ixGAcq+
DWD6pCG0kE8E/PilIm6NdCKrS3D6TpbbSQeNOz6PY4QojBRHngj+ATjgk57xNGj4
1JGTibzBKx1m0vBRNIulXRahlAbs5XDytDzseySYpa8sTOMc3wTIC72vVXd155DP
XpMtve5tk+UDkuWZQEUsPBUvkSzrKP3NDFkO7p1jhiC2DCndu6DcZX+8d07uaTWN
WwIDAQAB
-----END PUBLIC KEY-----" > edge_installer_pub.pem && openssl dgst -sha256 -verify edge_installer_pub.pem -signature edgeRuntime.tar.gz.sig edgeRuntime.tar.gz && tar -zxf edgeRuntime.tar.gz && sh install.sh iotedge-south.cn-north-4.myhuaweicloud.com 8943 666311413123526656 sys_edge_daemon 559c536f 08e529086200257f2f94c01e72745f4a cloud false standard && cd -
- 登录边缘节点服务器后台系统。
- 返回 ECS 控制台,请按如下步骤登录:
-
1) 单击“远程登录”。2) 选择“CloudShell 登录”。3) 输入用户名和密码,其余参数默认不变,登录 Linux 系统。用户名:root密码:购买弹性云服务器时配置的用户密码
- 执行安装命令。
- 单击鼠标右键,粘贴已拷贝的安装命令,并回车确认,开始安装
或者
- 安装完成,等待一分钟左右,进入 IoT 边缘控制台,“IoT 边缘 > 边缘节点 ”页面,查看边缘节点状态变更为“已安装”状态
- 注:安装过程中,可以单击节点名称,进入如下模块管理页面,当所有模块的实例状态显示为“运行中”,表示安装部署完成
3.部署边缘应用
在边缘节点安装成功后可部署边缘应用。
- 步骤 1 进入 IoT 边缘控制台,选择左侧导航栏“IoT 边缘 > 边缘节点 ”进入页面。
- 步骤 2 选择您的边缘节点,单击“节点名称”进入节点详情页。
- 步骤 3 左侧选择“应用模块”页签,查看已部署边缘应用
本实验使用的标准版默认部署 sys_edge_hub 和 sys_edge_agent。实例状态显示为“运行中”,表示应用运行正常。
- 单击“部署应用”,选择 Modbus 协议解析应用$edge_access 进行安装。
- 边缘应用:$edge_access
- 选择版本:1-0-12-x86
- 单击“确认”,等待应用安装完成,状态变更为“运行中”。
4.设备接入边缘节点(MQTT)
IoT 边缘应用部署完成后,边缘节点即作为远端物联网平台在设备侧的延伸,云边协同,共同完成设备管理。边缘节点可以为近端连接的设备就近提供计算和管理服务,如低时延业务本地管理、与云端断连时的本地控制和规则执行等。设备通过接入边缘节点,最终通过边缘节点将数据上传到远端物联网平台。本章节指导用户实现基于 MQTT 协议的设备接入 IoT 边缘节点。
创建产品(IoTDA)
对于设备通过边缘节点上报至物联网平台的数据,云端物联网平台要能够解析设备上报的数据。故需要在设备接入服务侧完成产品模型定义,编解码插件开发部署等。产品模型是用来描述设备能力的文件,通过 JSON 的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的属性信息。
- 步骤 1 进入设备接入服务控制台,选择左侧导航栏“产品”进入页面。
- 步骤 2 单击右上角的“创建产品”,按照页面提示填写信息。
- 所属资源空间:选择创建边缘节点时,绑定设备接入服务时选择的设备归属资源空间
- 产品名称:自定义,如 iot_edge
- 协议类型:MQTT
- 数据格式:JSON
- 厂商名称:自定义,如 Huawei
- 设备类型:MQTT_Device
- 单击“确定”,创建产品成功。
- 单击“查看详情”,进入产品详情页面。在“模型定义”页签下,单击“上传模型文件”。
- 添加产品模型文件“mqtt_profile.zip”,并单击“确定”完成上传。
- 查看服务列表,属性和命令信息如下:
添加设备(IoT Edge)
- 步骤 2 选择“边缘设备”页签,单击“添加边缘设备”,并填写相关参数。
- 所属产品:选择上一步创建的产品,如 iot_edge
- 设备标识码:自定义(设备标识码存在唯一性,请勿照抄截图)
- 设备名称:自定义(设备名称存在唯一性,请勿照抄截图)
- 模块 ID:值为空,请勿填写
- password:自定义,如 12345678
- Tips:若添加设备失败,可尝试修改设备标识码和设备名称
- 单击“确认”,添加设备成功,请保存好设备 ID 和密钥,用于设备接入平台认证。
-
设备ID iotedge
设备密钥 12345678
- 完成添加设备后,可以在设备列表中查看设备状态,并管理边缘设备。
- 也可以单击“设备 ID”跳转至“设备接入服务控制台”进行设备管理。
设备接入调测
本章节以 MQTT.fx 为例,介绍以 MQTT 原生协议接入 IoT 边缘节点,通过边缘节点上报设备属性至物联网平台。MQTT.fx 是目前主流的 MQTT 客户端,可以快速验证是否可以与物联网平台服务交互发布或订阅消息
- 打开 MQTT.fx 软件,单击设置图标。
- 参考如下信息配置鉴权参数。
Broker Address:填写边缘节点服务器公网 IP 地址,查看方法如图:
- Broker Port:填写边缘节点提供给南向 mqtt 设备接入的端口,即 7883
- Cliend ID:设备 cliendID,
- User Name:即设备 ID
- Password:加密后的设备密钥
- 在设备对接边缘节点场景中,需要在设备侧集成相应证书(证书文件),用于设备校验边缘节点的身份。
- 单击“Apply”保存配置后,在 MQTT.fx 主界面单击“Connect”,设备鉴权成功后,在 IoT 边缘控制台和物联网平台可以看到设备处于在线状态。
- 设备接入平台显示边缘节点、设备在线:
- 通过 MQTT.fx 模拟设备上报属性,并在物联网平台查看设备上报数据。
- 在 Publish 页签,填写设备属性上报 Topic,及 JSON 消息体,单击“Publish”完成上报。(其中,iotedge为示例的设备 ID,请替换为实际值。)
- $oc/devices/iotedge/sys/properties/report
-
{ "services" : [{ "service_id" : "sensor", "properties" : { "temp" : 25, "humi" : 11 }, "event_time" : null } ] }
- 在物联网设备接入平台查看设备上报数据
通过 MQTT.fx 订阅命令下发 Topic,并在物联网平台下发控制命令,查看设备是否收到平台下发的命令。
在 Subscribe 页签,填写命令下发 Topic,并单击“Subscribe”完成订阅。
Topic:$oc/devices/iotedge/sys/commands/#
其中,iotedge为设备 ID,请替换为实际值
- 在物联网平台执行命令下发。
- 进入设备详情页,选择“命令”页签,单击同步命令下发区域的“命令下发”,设置参数并单击“确定”完成命令下发。
- 选择命令:sensor: control_light
- light:ON
- 在 MQTT.fx 客户端查看,平台下发命令接收成功。
- 如下图所示,右下角黑底白字内容,即为客户端接收到的平台下发命令的详细信息。
5 设备接入边缘节点(Modbus)
本章节指导用户实现基于 Modbus 协议的设备接入 IoT 边缘节点。
创建产品(IoTDA)
- 步骤 1 进入设备接入控制台,选择左侧导航栏“产品 ”进入页面。
- 步骤 2 单击右上角的“创建产品”,按照页面提示填写信息。
- 所属资源空间:选择创建边缘节点时,绑定设备接入服务时选择的设备归属资源空间。
- 产品名称:自定义,如 iot_edge_modbus
- 协议类型:Modbus
- 数据格式:JSON
- 厂商名称:自定义,如 Huawei
- 所属行业:无
- 设备类型:填写固定值 modbus_device,必填该字段
- 单击“确定”,创建产品成功。
- 单击“查看详情”,进入产品详情页面。在“模型定义”页签下,单击“上传模型文件”。
- 添加产品模型文件“modbus_profile.zip”,并单击“确定”完成上传。
- 查看服务列表,属性和命令信息如下:
注册设备(IoT Edge)
- 步骤 1 进入 IoT 边缘控制台,选择左侧导航栏的“IoT 边缘>边缘节点”,选择您的边缘节点名称,进入节点详情页。
- 步骤 2 选择“边缘设备”页签,单击“添加边缘设备”,注册 modbus 网关设备,网关作为服务端。
- 所属产品:选择 xxxxxxxmodbus_server
- 设备标识码:自定义,(设备标识码存在唯一性,请勿照抄截图)iotedgemo
- 设备名称:自定义,设备标识码存在唯一性,请勿照抄截图)iotedgemo
- 连接类型:选择 Server,表示该 modbus 网关作为服务端,边缘节点作为客户端
- ip:先填写 127.0.0.1,在配置 NAT 穿越后进行修改
- port:先填写 502,在配置 NAT 穿越后进行修改
- 查看已添加的边缘网关设备,单击“管理子设备”,进入子设备详情页。
- 单击“注册子设备”,根据提示完成子设备注册。
- 选择产品:选择刚创建的 Modbus 协议类型的产品,如 iot_edge_modbus
- 数据采集配置:
- 采集方式:选择“单量测点采集”,即一个指令采集设备下一个属性
- 读功能码:根据设备说明书填写,3
- 写功能码:当设备不支持写寄存器时,填 16
- 寄存器地址:温度属性地址对应 10 进制 1,湿度属性对应地址为 10 进制 0
- 寄存器数量:设备温度和湿度仅占一个寄存器,因此寄存器数量都填写 1
- 交换寄存器内高低字节:false
- 交换寄存器顺序:false
-
缩放因子:根据设备说明书填写,因寄存器中存储值比真实值扩大了 10 倍,因此边缘节点需要将该值缩小 10 倍,因此该值为 0.1
- 添加子设备:
- 设备标识码:自定义,(设备标识码存在唯一性,请勿照抄截图)
- 设备名称:自定义,(设备标识码存在唯一性,请勿照抄截图)
- slaveId:设备地址,参考设备说明书的地址码,为 10 进制 1
- period:10 (数据采集周期,IoT 边缘节点采集 Modbus 设备数据的时间间隔,单位为:秒,最小采集间隔可设置为1秒)
- 单击“确定”,完成子设备注册
配置 NAT 穿越
针对 Modbus 协议接入的设备,部署在边缘节点服务器上的 Modbus Server 会按配置的数据采集周期向本地 PC 上运行的 Modbus Slave 客户端发送数据采集请求。
由于本地 PC 没有公网固定 IP 导致网络不通,Modbus Server 的数据采集请求无法发送成功,所以需要参考如下步骤配置 NAT 穿越,打通数据采集请求网络链路。
- 步骤 1 访问 https://natapp.cn/,使用手机号免费注册,并根据提示完成实名认证。
- 步骤 2 登录后进入会员中心,选择购买隧道 > 免费隧道
- 填写配置信息后,单击“免费购买”。
- 名称:自定义,如:IoT 数采实验 NAT 穿越
- 隧道协议:下拉选择 TCP
- 本地端口:填写固定值,即:502
- 购买完成,进入我的隧道页面,显示查看 authtoken,并记录下来用于后续配置。
- 访问 https://natapp.cn/#download,选择合适版本的客户端进行下载。
- 这里以下载 Windows 64 位版本为例,下载后解压,即可获取到 natapp.exe 可执行文件。
- 访问 https://natapp.cn/article/config_ini,右键单击 config.ini 选择另存为,将文件保存到natapp.exe 同一目录下。
- 打开 config.ini 文件,配置 authtoken 值,并保存关闭。
- 双击运行 natapp.exe。显示 Online 表示运行正常。
- 我的隧道页面,显示为在线:
- 打开命令提示符窗口,执行如下命令,获取域名地址对应的 IP 地址。
- ping server.natappfree.cc
- 其中,server.natappfree.cc 从 natapp 运行界面获取:
- 记录获取到的 IP 地址,示例如下:
- 访问 IoT 边缘控制台,进入边缘节点详情页面。在边缘设备列表页,单击“配置”,修改 Modbus Server 参数。
- 修改 ip、port,并单击“确认”保存。
- port:配置 natapp 代理服务端端口,如:40126
-
ip:配置 natapp 代理服务端域名解析到的 IP 地址,如:112.74.89.58
设备数据采集
- 步骤 1 运行 Modbus Slave 客户端。
- 步骤 2 选择工具栏“Connection > Connect…”,配置 Modbus Slave 监听 ip 和端口
- 单击“Register later”,关闭注册窗口。
- 配置 Modbus Slave 连接参数。
- Connection:Modbus TCP/IP
- IP Address:127.0.0.1
- Port:502
- 单击“OK”保存配置
-
选择工具栏“Setup > Slave Definition”,打开 Slave Definition 配置窗口
- 1) 填写配置参数。
- Slave ID:与上一步注册子设备时的 Slave ID 一致,即配置为 1
- Address:配置的寄存器地址与上一步注册子设备时的数据采集中的寄存器地址配置一致,即配置为 0
- 2) 单击“OK”保存配置。
- 步骤 4 回到主界面,在 Modbus 协议寄存器中配置采集数值。
- 0 地址位:输入起始 Value 为 100,并勾选 Auto increment
- 1 地址位:输入起始 Value 为 200,并勾选 Auto increment
- 等待 2 个数据采集周期,如 20 秒,查看设备采集数据结果。
- 1 分钟后,可以看到 Modbus 子设备在线,并且在设备影子页签可以看到设备上报的数据值。选择“概述”页签,查看最新上报数据:
实验完成,您可以按如下步骤删除在实验过程中,产生在您的华为云帐号下的相关资源。注:所有资源删除动作,在“华北-北京四”区域下进行
- 删除弹性云服务器 ECS
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)