云服务器内容精选
-
镜像包打包 构建需要打包的项目 构建项目,此处示例,构建好的文件存放在目录 /home/ModuleSDK-Demo 下 安装docker 请确认您使用的系统已经安装Docker(Docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程。 制作镜像 搜索基础镜像。 docker search dotnet 根据您的工程配置,选择合适的镜像。 镜像需要集成与您的工程配置兼容的.Net运行环境,下文使用的.Net版本仅作演示。 拉取镜像。 docker pull mcr.microsoft.com/dotnet/runtime:2.1 mcr.microsoft.com/dotnet/runtime:2.1 镜像是微软提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证,强烈建议用户自己封装镜像! 编写 Dockerfile 制作镜像。 创建 Dockerfile,内容示例如下(具体可参考编写高效的Dockerfile )。 下面提供了ModuleSDK-Demo镜像构建样例,仅作示例展示,请按需修改。 # 基础镜像来源FROM mcr.microsoft.com/dotnet/runtime:2.1# 指定工作目录WORKDIR /app# 复制工程二进制文件和相关文件(即项目构建发布的产物)COPY ModuleSDK-Demo/ /appENTRYPOINT ["dotnet", "ModuleSDK-Demo.dll"] 构建镜像 docker build -t modulesdk-demo:1.0.0 -f Dockerfile . 查看打包完成的镜像 docker images 可以看到modulesdk-demo这个镜像已经制作完成。 REPOSITORY TAG IMAGE ID CREATED SIZEmodulesdk-demo 1.0.0 85ed3c3dc738 8 minutes ago 182MB 上述步骤演示的是直接复制已编译好的工程文件来构建镜像,您也可以采取在构建镜像时编译的方式,具体可参照.Net 官方文档的指引。 镜像上传 上传镜像 镜像上传需要使用镜像容器服务(SWR),首先需要开通 容器镜像服务 (SWR)。开通及使用请参照容器 镜像服务 (SWR)。 获取 SWR 登录指令 获取登录指令请参照获取指令。 访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的AK/SK将用于登录。 登录 SWR 仓库 docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址] 可以直接从控制台获取登录命令,如下图。 镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com 例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com 修改镜像所属组织 修改镜像的组织名,以便推送到个人组织内。 docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号] 例如: docker tag modulesdk-demo:1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0 上传镜像 docker push [镜像仓库地址/所属组织/镜像名:版本号] 例如: docker push swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0 在我的镜像查看上传结果 上传镜像后请在 SWR 将镜像设置为公开。 查看镜像详情: 编辑镜像: 设置为公开: 这一步很重要,关系到后面能否正常部署应用。
-
edge.h的接口函数介绍 所有接口函数定义的数据结构均呈现在edge_struct.h头文件中。 1. 初始化 接口描述: int edge_init(const char* workdir) 接口功能: 初始化sdk的工作环境,加载证书、读取配置等 表13 参数说明 参数名称 类型 参数描述 示例 workdir workdir 初始化文件所在目录,conf目录所在的目录,conf是存放证书文件以及日志配置的目录 conf在/code/api_test/workdir目录下,就填写/code/api_test/workdir 2. 注册回调接口 接口描述: int edge_set_callbacks(ST_MODULE_CBS* module_cbs, ST_DEVICE_CBS* device_cbs) 接口功能: 注册回调接口,登录、子设备添加、删除、设备消息、设备命令等都是异步通知的,故需要注册对应的处理函数。 表14 参数说明 参数名称 类型 参数描述 module_cbs ST_MODULE_CBS 模块回调函数结构体 device_cbs ST_DEVICE_CBS 设备回调函数结构体 表15 ST_MODULE_CBS模块相关的回调函数说明 参数名称 类型 参数描述 pfn_shadow_cb FN_SHADOW_ARRIVED* 模块影子回调函数类型,模块的配置可以使该接口接收 pfn_command_cb FN_COMMAND_ARRIVED* 发送到模块的命令的接收函数声明, pfn_connected FN_SDK_CONNECTED SDK连接到边缘hub的回调函数声明 pfn_disconnected FN_SDK_DISCONNECTED SDK和边缘hub断链的回调函数声明 表16 ST_DEVICE_CBS子设备相关的回调函数 参数名称 类型 参数描述 pfn_device_message_cb FN_MESSAGE_ARRIVED* 子设备消息回调 pfn_device_command_cb FN_COMMAND_ARRIVED* 子设备命令回调 pfn_device_event_cb FN_DEVICE_EVENT_ARRIVED* 子设备事件回调 pfn_sub_device_add_cb FN_SUB_DEVICE_ADD_ARRIVED* 子设备添加通知回调 pfn_sub_device_deleted_cb FN_SUB_DEVICE_DELETED_ARRIVED* 子设备删除通知回调 pfn_on_start_scan_cb FN_START_SCAN_ARRIVED* 收到子设备扫描通知回调 pfn_device_properties_set_cb FN_DEVICE_PROPERTIES_SET_ARRIVED* 收到子设备属性设置通知回调 pfn_device_properties_get_cb FN_DEVICE_PROPERTIES_GET_ARRIVED* 收到子设备属性获取通知回调 pfn_device_shadow_cb FN_DEVICE_SHADOW_ARRIVED* 收到子设备影子
-
edge.h回调函数说明 模块影子数据回调 函数描述: typedef EDGE_RETCODE (FN_SHADOW_ARRIVED)(const char* shadow, unsigned int shadow_len); 函数功能: 当下发模块配置时,通过此函数通知到用户,用户应用的配置也通过此函数通知。 表2 参数说明 参数名称 类型 参数描述 示例 shadow char* 模块影子数据(json字符串),第三方应用下发用户的配置数据 { “config”:”test” } shadow_len unsigned int 影子数据的长度 - 命令下发回调 函数描述: typedef EDGE_RETCODE (FN_COMMAND_ARRIVED)(const char* command_name, const char* device_id, const char* service_id, const char* request_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用户命令下发通知,设备命令下发即使用此函数声明。 表3 参数说明 参数名称 类型 参数描述 command_name char* 设备命令名称,在设备关联的产品模型中定义。 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 service_id char* 设备的服务ID,在设备关联的产品模型中定义 request_id char* {request_id}用于唯一标识这次请求,响应该命令时需要带上。 body char* json字符串,设备命令的执行参数,具体字段在设备关联的产品模型中定义 body_len unsigned int - 消息下发回调 函数描述: typedef EDGE_RETCODE (FN_MESSAGE_ARRIVED)(const char* message_id, const char* message_name, const char* device_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用于消息下发通知,平台使用此接口承接平台下发给设备的自定义格式的数据。 表4 参数说明 参数名称 类型 参数描述 message_id char* 消息名称 message_name char* 消息的唯一标识 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 body char* 消息内容。 body_len unsigned int 消息长度 事件下发回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_EVENT_ARRIVED)(const char* device_id, const char* body, unsigned int body_len); 函数功能: 此函数声明用于事件下发通知,平台使用此接口承接平台下发给设备的自定义格式的数据。 表5 参数说明 参数名称 类型 参数描述 示例 device_id char* 命令对应的目标设备ID,命令下发对应的最终目标设备 - body char* 事件内容。 { "object_device_id":"deviceId", "services":[ { "service_id":"serviceTest", "event_id":"eventTest", "event_type":"eventTypeTest", "event_time":"time", "paras":{ "test":"test" } } ] } body_len unsigned int 消息长度 - 子设备添加回调 函数描述: typedef EDGE_RETCODE (FN_SUB_DEVICE_ADD_ARRIVED)(const char* addSubDeviceInfo, unsigned int body_len); 函数功能: 此函数声明用于通知子设备添加,使用此接口承接平台添加成功子设备的通知。 表6 参数说明 参数名称 类型 参数描述 示例 addSubDeviceInfo char* 添加成功的子设备信息,具体格式见示例 {"devices": [{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }],"version":1} body_len unsigned int 长度 - 子设备删除回调 函数描述: typedef EDGE_RETCODE (FN_SUB_DEVICE_DELETED_ARRIVED)(const char* deleteSubDeviceInfo, unsigned int body_len); 函数功能: 此函数声明用于通知子设备删除,使用此接口承接平台删除成功子设备的通知。 表7 参数说明 参数名称 类型 参数描述 示例 deleteSubDeviceInfo char* 删除成功的子设备信息,具体格式见示例 {"devices": [{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }],"version":1} body_len unsigned int 长度 - 子设备扫描回调 函数描述: typedef EDGE_RETCODE (FN_START_SCAN_ARRIVED)(const char* protocol, const char* channel, const char* parentDeviceId,const char* scan_setting, unsigned int body_len); 函数功能: 此函数声明用于通知网关扫描子设备。 表8 参数说明 参数名称 类型 参数描述 protocol char* 协议 channel char* 通道信息 parentDeviceId char* 父设备ID scan_setting char* 扫描设备 body_len unsigned int 配置长度 子设备属性设置回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_PROPERTIES_SET_ARRIVED)(ST_PROPERTY_SET* sub_device_property_set); 函数功能: 此函数声明用于接收平台对子设备的属性设置。 表9 参数说明 参数名称 类型 参数描述 示例 sub_device_property_set ST_PROPERTY_SET* 属性设置 参见edge.h 子设备属性获取回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_PROPERTIES_GET_ARRIVED)(ST_PROPERTY_GET* sub_device_property_get); 函数功能: 此函数声明用于接收平台获取子设备的属性。 表10 参数说明 参数名称 类型 参数描述 示例 sub_device_property_get ST_PROPERTY_GET* 属性设置 参见edge.h 子设备影子回调 函数描述: typedef EDGE_RETCODE (FN_DEVICE_SHADOW_ARRIVED)(ST_DEVICE_SHADOW* sub_device_shadow); 函数功能: 此函数声明用于接收平台设置子设备的影子。 表11 参数说明 参数名称 类型 参数描述 示例 sub_device_property_get ST_DEVICE_SHADOW* 属性设置 参见edge.h 自定义topic 消息通知 回调 函数描述: typedef EDGE_RETCODE (FN_CUSTOMIZED_MESSAGE_ARRIVED)(const char* topic, const char* payload, unsigned int len); 函数功能: 此函数声明用于接收平台设置子设备的影子。 表12 参数说明 参数名称 类型 参数描述 topic char* 自定义topic payload char* 消息内容 len unsigned int 消息长度
-
如何使用 OT应用使用步骤: 将创建好的应用部署到节点。部署请参照应用部署。 添加设备进行测试(添加设备请参考设备接入边缘节点)。 可以利用MQTT.fx软件模拟设备接入调试。 驱动应用使用步骤: 将创建好的应用部署到节点。部署请参照应用部署。 添加网关。 添加设备进行测试(添加设备请参考设备接入边缘节点)。 可以利用Modbus Slave软件模拟设备接入调试。 IT应用使用步骤: 注册节点,绑定工业资源包。 创建API网关。 将apigw系统组件和创建的应用部署到节点。 使用postman进行调试验证。 父主题: 开发指导
-
安装包部署 添加边缘应用-应用配置 部署方式选择安装包部署 添加边缘应用-软件和运行配置 ”安装包地址”为{桶名/对象名}。 如桶名为edge-monitor,对象名为monitor-app.zip, 则安装包为edge-monitor/monitor-app.zip。 添加边缘应用-端点和部署配置同容器化部署 根据需要进行配置。 输入端点输出端点与demo中的设置对应,如monitor-app中输入与输出端点设置为input和output,则配置为: 输入端点:input。 输出端点:output。 输入输出端点是非必需配置的,当有数据流转时需要配置,如OT应用(数据处理)。 驱动类应用和IT应用一般不需要配置。 建议直接勾选“立即发布”,方便后面直接部署应用的时候,能够获取到最新版本。
-
场景说明 开发应用驱动集成ModuleSDK进行OT数采。(此示例以采集OPCUA为示例) 在节点部署集成了ModuleSDK应用驱动。 配置好数据源模板(可自定义)。 在平台进行数据源配置,以及点位配置下发。 集成ModuleSDK应用驱动对平台下发的配置进行处理。 通过下发信息获取数据源连接,以及点位信息进行数据周期采集。 最后运用ModuleSDK的客户端进行点位数据周期上报。 父主题: 集成ModuleSDK进行数据采集
-
操作场景 开发应用驱动集成ModuleSDK进行OT数采。(此示例以采集OPCUA为示例) 在节点部署集成了ModuleSDK应用驱动。 配置好数据源模板(可自定义)。 在平台进行数据源配置,以及点位配置,下发。 集成ModuleSDK应用驱动对平台下发的配置进行处理。 通过下发信息获取数据源连接,以及点位信息进行数据周期采集。 最后运用ModuleSDK的客户端进行点位数据进行周期上报。 父主题: 集成ModuleSDK进行OT数采
-
如何使用 OT应用使用步骤: 1. 将创建好的应用部署到节点。部署请参照应用部署。 2. 添加设备进行测试(添加设备请参考设备接入边缘节点)。 可以利用MQTT.fx软件模拟设备接入调试。 驱动应用使用步骤: 1. 将创建好的应用部署到节点。部署请参照应用部署。 2. 添加网关。 3. 添加设备进行测试(添加设备请参考设备接入边缘节点)。 可以利用Modbus Slave软件模拟设备接入调试。 IT应用使用步骤: 1.注册节点,绑定工业资源包。 2.创建API网关。 3.将apigw系统组件和创建的应用部署到节点。 4.使用postman进行调试验证。 父主题: 开发指导
-
使用场景 场景挑战 设备采集的数据信息量庞大但只需部分有效数据。部署在节点下的设备需要在本地判断情况以及时进行控制。 设备使用的协议不能接入边缘计算。 节点下的IT子系统众多,接入时不便于管理,配置繁琐。子系统采集的数据需要传输到用户的北向应用。 解决方案 通过开发集成ModuleSDK的应用,您可以: 使用ModuleSDK提供的AppClient开发OT应用对需要上传到云端的信息进行过滤上传。OT应用可以在本地对设备进行命令的下发。 使用ModuleSDK提供的DriverClient开发驱动应用进行协议转换。 使用ModuleSDK提供的ItClient开发IT应用实现子系统与云端配置的自动同步,也可以实现云端对子系统的配置管理。云端可以通过IT应用实现对子系统数据的采集。
-
简介 为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。IoT边缘平台应用功能有自定义处理设备数据(即数据处理),自定义协议设备快速接入(即协议解析),IT子系统接入(即IT应用),并且支持容器化部署和安装包部署的方式。 集成ModuleSDK开发的应用被称为插件应用,其最终将被通过云部署到边缘节点。 集成ModuleSDK的应用分为: OT应用:数据处理类型的应用,实现了总线回调接口,IoT边缘云服务为OT应用提供总线对接能力、设备反向控制(命令)能力。 驱动应用:协议转换类型的应用,可将使用自定义协议的设备接入边缘计算。 IT应用:实现工业子系统接入的应用,实现了对子系统配置同步、反向调用接口、以及数据采集能力。 集成了SDK的应用称为插件,华为云市场提供了插件上架功能。您可以将开发的集成了SDK的应用上传到华为云市场来获取收益,也可以在华为云市场下载使用第三方插件。
-
协议转换(驱动应用) 驱动提供子设备管理和数据上报功能。 子设备管理功能包括子设备增删和配置子设备数据采集协议。设备的增删有两种形式,一是在云端增删,通过集成驱动SDK,可以接收到北向应用管理子设备的回调,即北向应用通过IoTEdge创建/删除设备时,自定义驱动应用可以接收到事件回调,在边侧进行设备接入及协议解析。二是在本地增删,自定义驱动应用也提供本地页面进行设备管理,驱动应用通过SDK上报设备添加/删除通知到云端IoTEdge,将边侧的设备管理操作同步到云端。 数据上报功能可以将设备状态和设备数据上报到云端。 驱动提供本地Portal对子设备进行管理,包括子设备数据采集协议相关配置;驱动将设备状态和设备数据上报到云端。 本地Portal增删设备时,通过子设备发现事件上报增删的设备,IoT Edge在云侧增删设备,增删的设备信息通过子设备增删事件通知到驱动 北向应用NA提供设备管理界面,调用IoTEdge接口增删设备,通过子设备增删事件通知到驱动。 北向应用在增加设备时指定设备数据采集协议相关配置。 父主题: 架构介绍
-
证书文件 在设备和对接边缘节点场景中,需要在设备侧集成相应证书。 资源包名 描述 下载路径 ModuleSDK(java) 利用ModuleSDK开发插件在边侧进行协议转换、设备上传的数据处理、接入IT子系统。 ModuleSDK(Java版) ModuleSDK(C) Module SDK是开发边缘运行应用(插件)所必须的工具包,提供数据处理、协议转换、IT子系统接入等功能,开发完成后,通过选择打包方式来决定是容器化部署还是进程化部署。 ModuleSDK_C_latest(包括x86_64, arm32, arm64版本,下载后解压选择对应版本) ModuleSDK(C#) 利用ModuleSDK开发插件在边侧进行数据采集等功能。 ModuleSDK_ CS harp MQTT.fx MQTT.fx是MQTT设备模拟软件。 MQTT.fx下载地址 plt-device-ca 设备通过mqtts协议与边缘节点建立连接时,该证书用于校验边缘节点的身份。 证书文件 Modbus Slave Modbus Slave是Modbus Slave设备模拟软件。 Modbus Slave下载地址
-
内部架构 模块SDK用于开发运行在边缘节点中的应用,包括数据处理应用(简称应用,例如数据清洗)和协议驱动(简称驱动,例如EdgeAccess)。 图1 边缘设备接入和应用开发能力架构图 部署在边缘节点中的第三方应用和第三方驱动使用模块SDK进行开发。 图2 模块SDK调用流程图 基本调用流程如图2所示。 基于ModuleSDK-C开发应用实现数据的云边同步,主要分为开发和使用两个部分。 开发操作 开发说明 SDK应用的开发 按照SDK提供的Demo进行自定义应用开发。 SDK应用的使用 将应用打包上传至华为云,部署到节点。连接子设备查看应用工作情况。 ModuleSDK-C提供了以下头文件,用户可根据需求引用相应的头文件: 头文件 说明 edge.h 实现基本的回调函数和接口函数 edge_daemon.h 实现所有证书、鉴权相关接口 edge_driver.h 驱动模块,用于开发驱动接入设备,驱动需实现网关回调函数 edge_error.h 错误码定义 edge_struct.h 所有可能使用到的头文件定义 edge_dc_driver.h 数采驱动模块,用于开发数采驱动接入点位数据,驱动需实现相关回调函数 父主题: 集成ModuleSDK(C)
-
生成可执行文件 需要Linux开发环境,可利用CLion远程调试或者将工程打包到Linux服务器上编译生成可执行文件 编译生成可执行文件(MyCApp),可以通过CLion之间编译生成,也可以通过在Linux服务器上通过命令行生成。 下面提供在Linux服务器使用命令行生成的方法。 cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" ./-- The C compiler identification is GNU 4.8.5-- Detecting C compiler ABI info-- Detecting C compiler ABI info - done-- Check for working C compiler: /usr/bin/cc - skipped-- Detecting C compile features-- Detecting C compile features - done-- Configuring done-- Generating done-- Build files have been written to: /home/MyCApp makeConsolidate compiler generated dependencies of target MyCApp[100%] Built target MyCApp 可以在目录下找到生成的可执行文件,即MyCApp。 父主题: 开发指导
-
InnerClient::startModuleShadow 启动模块影子,设置收到影子回调并触发获取影子动作,该函数适用于AppClient、DriverClient、DcDriver。 函数描述 public void startModuleShadow(ModuleShadowNotificationCallback callback) throws IllegalArgumentException
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格