【华为云IoTEdge开发实战】通过C#集成IoT边缘ModuleSDK全教程

举报
一个柠檬 发表于 2022/12/06 14:22:47 2022/12/06
【摘要】 一、 方案概述IoT边缘基于ModuleSDK开发应用实现数据处理或自定义驱动时,分为开发和使用两个部分。开发操作开发说明App应用的开发利用DcClient进行自定义的业务处理App应用的使用将应用打包上传至云,部署到节点,连接子设备查看应用工作状态二、 前提条件开发环境要求:安装.Net开发环境(仅支持.NET and .NET Core 2.0及以上版本,建议使用.Net 6.0版本)...

一、 方案概述

IoT边缘基于ModuleSDK开发应用实现数据处理或自定义驱动时,分为开发和使用两个部分。

开发操作

开发说明

App应用的开发

利用DcClient进行自定义的业务处理

App应用的使用

将应用打包上传至云,部署到节点,连接子设备查看应用工作状态

二、 前提条件

  • 开发环境要求:安装.Net开发环境(仅支持.NET and .NET Core 2.0及以上版本,建议使用.Net 6.0版本)。

  • 开发工具:Visual Studio 或者 Rider

三、 实操步骤

1 创建工程

本文以 Visual Studio 2017 作为项目开发IDE。

  1. 新建工程

    打开Visual Studio > 文件 > 新建 > 项目 > 选择新建.Net Core控制台应用,这里创建一个名为ModuleSDK-Demo的工程进行下面的实践。

  2. 添加本地Nuget包源

    打开Visual Studio > 工具 > Nuget包管理器 > 程序包管理器设置,在弹出的窗口中新增一个可用程序包源,"源"为ModuleSDK对应的NuGet包所在的本地路径。

  3. 为工程导入Nuget包

    在Visual Studio的解决方案资源中,右键单击"依赖项",选择"管理Nuget程序包"。

    选择上一步添加的本地包源作为"程序包源",然后选择"浏览"选项卡,在列表中选择该包,然后单击安装。

    注意:如果需要升级SDK,可参考2将新版本ModuleSDKd的NuGet包放入同一目录下,待NuGet包管理器自动识别后,根据界面提示进行SDK更新操作即可。

    ----结束

2 开发代码

根据需要进行相关代码的开发,具体参见开发教程

3 项目构建发布

  1. 修改构建类型

    Visual Studio > 生成 > 配置管理器,将"活动解决方案配置"选择为"Release"。

  2. 项目发布

    Visual Studio > 生成 > 发布 ModuleSDK-Demo

    单击配置按钮,将弹出"配置文件设置"窗口,可根据您实际使用的开发环境进行配置。

    配置完成后单击"发布"按钮,即可在您设定的目标位置看到类似下图的发布文件

    ----结束

4 制作镜像包或插件包

镜像包打包

  1. 构建需要打包的项目

    构建项目,此处示例,构建好的文件存放在目录 /home/ModuleSDK-Demo 下

  2. 安装docker

    请确认您使用的系统已经安装Docker(Docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程

  3. 制作镜像

    1. 搜索基础镜像。

      docker search dotnet

    2. 根据您的工程配置,选择合适的镜像。

      注意:镜像需要集成与您的工程配置兼容的.Net运行环境,下文使用的.Net版本仅作演示。

    3. 拉取镜像。

      docker pull mcr.microsoft.com/dotnet/runtime:2.1

      说明:mcr.microsoft.com/dotnet/runtime:2.1 镜像是微软提供的镜像,非华为公司发布,且华为公司未提供任何官方镜像。该镜像在此仅做示例,华为对该镜像的安全性不作保证,强烈建议用户自己封装镜像!

    4. 编写 Dockerfile 制作镜像。

      创建 Dockerfile,内容示例如下(具体可参考编写高效的Dockerfile )。

      须知:下面提供了ModuleSDK-Demo镜像构建样例,仅作示例展示,请按需修改。

      # 基础镜像来源
      FROM mcr.microsoft.com/dotnet/runtime:2.1

      # 指定工作目录
      WORKDIR /app

      # 拷贝工程二进制文件和相关文件(即项目构建发布的产物)
      COPY ModuleSDK-Demo/ /app

      ENTRYPOINT ["dotnet", "ModuleSDK-Demo.dll"]

    5. 构建镜像

      docker build -t modulesdk-demo:1.0.0 -f Dockerfile .

    6. 查看打包完成的镜像

      docker images

      可以看到modulesdk-demo这个镜像已经制作完成。

      REPOSITORY TAG IMAGE ID CREATED SIZE
      modulesdk-demo 1.0.0 85ed3c3dc738 8 minutes ago 182MB

    说明:上述步骤演示的是直接拷贝已编译好的工程文件来构建镜像,您也可以采取在构建镜像时编译的方式,具体可参照.Net 官方文档的指引。

  4. 镜像上传

    1. 上传镜像

      镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)

    2. 获取 SWR 登录指令

      获取登录指令请参照获取指令

      说明:访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的AK/SK将用于登录。

    3. 登录 SWR 仓库

      docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]

      可以直接从控制台获取登录命令,如下图。


      说明:
      镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com
      例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com
    4. 修改镜像所属组织

      修改镜像的组织名,以便推送到个人组织内。

      docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号]
      例如
      docker tag modulesdk-demo:1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0

    5. 上传镜像

      docker push [镜像仓库地址/所属组织/镜像名:版本号]
      例如
      docker push swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0

    6. 我的镜像查看上传结果

    7. 上传镜像后请在 SWR 将镜像设置为公开。

      查看镜像详情:

      编辑镜像:

      设置为公开:

      说明:这一步很重要,关系到后面能否正常部署应用。

      ----结束

插件包打包

  1. 插件包制作

    1. 插件包格式要求

      插件包仅支持.tar.gz 、.tar或者 .zip格式。

      插件包结构如下:

      ModuleSDK-Demo.zip

      ├── ModuleSDK-Demo.*** // 可执行文件
      ├── ***.dll // 外部库文件,在构建发布时产生,可能会有多个
      ├── start.sh // 启动脚本 必须文件 当前不提供参数方式启动
      └── stop.sh // 停止脚本 非必须

      说明:ModuleSDK-Demo.*** 为可执行文件,类型可能为.dll或.exe,取决于您的工程发布配置。下文将以ModuleSDK-Demo.dll为例。

    2. 添加启动脚本

      在可执行文件ModuleSDK-Demo.dll的同一目录下创建启动脚本start.sh,内容示例如下,可根据您的需要进行修改。

      function log(){
      echo "`date "+%Y-%m-%d %T"`: $1"
      }
      log "[INFO] start execut process."
      pwd
      dotnet ModuleSDK-Demo.dll > ModuleSDK_demo_running.log 2>&1
    3. 打包插件包

      压缩文件得到ModuleSDK-Demo.zip。

  2. 插件包上传

    1. 开通对象存储服务OBS

      进程包上传方式需要开通对象存储服务OBS,请参考对象存储服务 OBS_快速入门

    2. 上传进程包

      上传方式请参照对象存储服务(OBS)

      注意:请设置桶策略为【公开读】,如未设置请前往“OBS首页 > 单击桶ID > 访问权限控制 > 桶策略中设置”。

      ----结束

5 添加应用

添加边缘应用具体请参考添加应用

说明:提供两种不同的部署方式,请根据需要选择合适的部署方式。

容器化部署

  1. 软件部署配置

    部署方式选择容器化部署,选择上传到SWR服务的镜像,如未发现镜像,请检查镜像是否为公开,设置镜像为公开方式:容器镜像服务SWR->我的镜像->单击镜像ID进入详情->右上方编辑。
    容器规格与高级配置请根据您的需要进行配置。

    表1 部署配置

    参数名称

    说明

    部署方式

    容器化部署:在边缘节点是以Docker容器运行;添加容器化部署的应用需先确保容器镜像已上传到容器镜像服务(SWR),且设置其类型为“公开”,例如图 容器规格配置所示。
    安装包部署:在边缘节点是以进程形式运行;添加安装包部署的应用需先确保安装包已按照打包规范进行压缩打包,并上传到对象存储服务(OBS)

    安装包部署

    部署方式为安装包部署时,填写您此前上传到对象存储服务OBS中的安装包地址。

    容器镜像

    部署方式为容器化部署时,参考表 选择镜像输入方式填写。


    表2 选择镜像输入方式

    参数名称

    说明

    手动输入

    输入镜像地址:统一在容器镜像服务(SWR)中管理。

    点击选择

    选择镜像:选择需要部署的镜像,单击“确认”。
    • 我的镜像:展示了您在容器镜像服务中创建的所有镜像。

    • 他人共享:展示了其他用户共享的镜像。

    版本:选择需要部署的镜像版本。


  2. 运行配置

    输入端点、输出端点与demo中代码定义的端点一一对应,由于本例演示的是数采模块,因此不对端点进行配置。

    部署配置请根据您的需要进行选择。

    说明:
    输入输出端点是非必需配置的,当有数据流转时需要配置,如OT应用(数据处理)。
    驱动类应用和IT应用一般不需要配置。
  3. 配置确认

    说明:建议直接点击“立即发布”,方便后面直接部署应用的时候,能够获取到最新版本。

    ----结束

安装包部署

  1. 软件部署配置

    部署方式选择安装包部署,"安装包地址"为{桶名/对象名}。如桶名为:Demo,对象名为:ModuleSDK-Demo.zip, 则安装包为obs://Demo/ModuleSDK-Demo.zip。

    容器规格与高级配置请根据您的需要进行配置。

  2. 运行配置

    输入端点、输出端点与demo中代码定义的端点一一对应,由于本例演示的是数采模块,因此不对端点进行配置。

    部署配置请根据您的需要进行选择。

    说明:
    输入输出端点是非必需配置的,当有数据流转时需要配置,如OT应用(数据处理)。
    驱动类应用和IT应用一般不需要配置。
  3. 配置确认

    说明:建议直接点击“立即发布”,方便后面直接部署应用的时候,能够获取到最新版本。

    ----结束

6 发布应用

应用创建之后需要发布才允许在节点部署。若您在上一节已经单击"立即发布",则可以跳过本节的内容。

操作步骤

  1. 访问IoT边缘,单击“立即使用”进入IoT边缘控制台。

  2. 选择左侧导航栏“IoT边缘 > 应用管理”,选择“应用名称”进入应用详情页。

  3. 单击右上角“发布”按钮。

    说明:可在创建应用时可勾选【立即发布】进行发布。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。