摘要:为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。

本文分享自华为云社区《【华为云IoTEdge开发实战】Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发》,作者: 华为IoT云服务。

为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。IoT边缘平台应用功能有自定义处理设备数据(即数据处理),自定义协议设备快速接入(即协议解析),IT子系统接入(即IT应用),并且支持容器化部署和安装包部署的方式。

1 操作场景

使用ModuleSDK开发插件应用,并以进程方式跑在服务器上。

2 代码解析

代码解析样例:

3 注册节点

注册节点,请参照注册边缘节点

4 设备建模&发放

请参照设备建模&发放

5 项目打包

将集成ModuleSDK进行项目打包。

根据您的需求进行相关代码的开发,并将项目打包,以编辑器IDEA为例:

1.选中项目->右键open Module setting
2.Artifacts->单击+号>JAR->From modules with dependencies->模块选择monitor-app,选择monitorapp的Main入口类,注意MANIFEST.MF位置选择模块根目录->单击apply。

3.单击上方build选项->选择build Artifacts->monitor-app:jar->build
4.打包完成得到monitor-app.jar文件。(如遇到错误(Invalid signature file digest for Manifest main attributes)请使用压缩文件进入metf目录删除.rsa和.mf文件)

6 制作插件包

1.插件包制作。

a.插件包格式要求如下:

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

插件包结构如下:

app.zip
├── ****.jar //可执行jar文件,必须
├── start.sh //启动脚本 必须文件 当前不提供参数方式启动
└── stop.sh //停止脚本 非必须

b.构建插件包。

以monitor-app为例,在项目打包后得到monitor-app.jar

在monitor-app.jar文件的同目录下创建start.sh,内容如下:

function log(){
echo "`date "+%Y-%m-%d %T"`: $1"
}
log "[INFO] start execut process."
#调试时可打开,确认sdk需要的环境能被获取
#echo "${device_id}" > test_enviroment.file
pwd
#更新环境变量,防止找不到java命令。
source /etc/profile
#运行文件在/var/IoTEdge/downloaded-job/run下面
java -jar ./monitor-app.jar > monitor_running.log 2>&1

将monitor-app.jar和start.sh一起压缩得到monitor-app.zip。

注意:

  1. 插件包升级时,会删除运行目录的所有文件,注意持久化文件的存储。插件包的运行路径为{installer_dir}/IoTEdge/downloaded-job/run/{moduleId}/{appVersion}/。
  2. 当前插件包的大小限制为最大500M。
  3. 程序内对于文件的访问使用相对目录访问(因为程序的安装目录是不确定的)。
  4. 程序不允许包含后台运行的程序,可以包含多级进程,所有程序均为start.sh的子进程。
  5. 进程压缩包命名规范:英文字母或者数字或者“_”,”.” ,长度不超过64,不允许出现空格。

说明:

  1. 插件包为一层压缩结构,即插件包的压缩包解压之后直接为start.sh脚本所在目录的结构形式,不能多一层目录。
  2. start.sh脚本为必须脚本,启动时默认调用该脚本进行启动,当前支持root用户以及非root用户(固定为1000用户,非root需要确定是否能够成功依赖系统库)启动,用户可以在start.sh脚本中自由修改自己的启动方式以及环境变量的修改等。
  3. stop.sh为非必须的脚本,但是用户如果需要优雅停止的话,需要在改脚本中书写自己进程的停止方式(文件监控、接口调用等)。如果没有该脚本的话,默认对进程组先发送SIGTERM信号,如果进程组对该信号没有处理,达到最大等待时间则发送SIGKILL信号强制停止。整个停止的最大周期为10s。

2.插件包上传。

a.开通对象存储服务OBS。

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

b.上传进程包。

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

注意:

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

7 添加应用

以安装包部署方式为例,将应用程序打包成安装包文件,并上传到对象存储服务(OBS)。

1.在IoT边缘单击创建应用,进入软件部署配置、运行配置,并确认发布。

2.在左侧导航栏,单击“应用管理”,选择“应用名称”进入页面,查看应用为“已发布”状态。

8 部署应用

在边缘节点安装成功后可部署边缘应用。

操作步骤

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

2.选择左侧导航栏“IoT边缘 > 边缘节点”进入页面。

3.选择您的边缘节点,单击“节点名称”进入节点详情页。

4.在左侧导航栏选择“应用模块 > 模块管理”页签,单击“部署应用”。

图1 部署边缘应用

5.根据页面提示填写参数信息后,单击“确认”。

图2 部署应用

6.弹出“操作成功”对话框,再单击“确认”返回部署边缘应用列表。

图3 确认

7.单击“刷新”,当应用的实例状态由“部署中”转为“运行中”表示部署成功。

只有应用版本是多部署的时候,且运行配置的网络类型是端口映射后,可在部署应用时,或应用后添加端口映射。

运行配置,请参考端点和部署配置

注意:

  • 标准版默认部署sys_edge_hub和sys_edge_agent,高级版默认部署sys_edge_hub。
  • 标准版和轻量版默认部署$edge_omagent,在注册节点过程中可选择是否自动部署。
  • 只有已发布的应用版本允许被部署。
  • 如果应用添加时配置了支持多模块部署 同一个节点下是允许部署多次的。
  • 应用支持的架构和边缘节点架构相同才能够部署成功。
  • 如果应用需要AI加速卡,边缘节点没有AI加速卡将部署失败。
  • 部署应用模块支持升级操作,可选择高版本也可选择低版本,目前只有Agent应用升级失败会回退到原版本。

点击关注,第一时间了解华为云新鲜技术~

Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?的更多相关文章

  1. Java开发如何通过IoT边缘ModuleSDK进行协议转换?

    摘要:使用ModuleSDK开发插件应用,接入其他协议设备(如HTTP请求数据),将其他协议的数据转化为MQTT协议JSON数据上报到IoTDA. 本文分享自华为云社区<[华为云IoTEdge开 ...

  2. 云中树莓派(5):利用 AWS IoT Greengrass 进行 IoT 边缘计算

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  3. 万物智联,腾讯云 IoT 边缘计算揭秘——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:现在是万物互联的时代,智能穿戴设备,智能家居,无人商业,改变了我们的生活方式.预计到2021年,全球物联网设数将达到150亿,超过手机 ...

  4. IoT边缘,你究竟是何方神圣?

    摘要:IoT边缘扮演着纽带的作用,连接边缘和云,将边缘端的实时数据处理,云端的强大计算能力两者结合,创造无限的价值. 本文分享自华为云社区<IoT边缘如何实现海量IoT数据就地处理>,作者 ...

  5. 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介

    ️Reference: IoT 边缘计算系列文章 什么是边缘容器? 边缘容器的概念 边缘容器是分散的计算资源,尽可能靠近最终用户或设备,以减少延迟.节省带宽并增强整体数字体验. 可以访问互联网的设备数 ...

  6. 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad

    前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s ️Reference: IoT 边缘计算系列文章 ...

  7. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  8. 使用JAVA开发微信公众平台(一)——环境搭建与开发接入

    一. 初始微信公众平台 微信公众平台,即我们平时所说的"公众号",曾用名"官方平台"."媒体平台",但最终命名为"公众平台&quo ...

  9. 华为云MVP熊保松谈物联网开发:华为云IoT是首选,小熊派是神器

    摘要:在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间,也得乘风破浪跟上新技术的节奏. 在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间 ...

  10. 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s

    前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 ️Reference: IoT 边缘计算系列文章 Rancher + K3s 简介 Rancher: Kubernetes ...

随机推荐

  1. MQ系列16:MQ实现消息过滤处理

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...

  2. 使用Github Copilot完成代码编写

    上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...

  3. Pinely Round 2 (Div. 1 + Div. 2) (CF1863)

    本来开了某场远古 Div 1,然后学了一堆前置知识至今仍然不会 E.换一场写来得及吗? A. Channel 模拟,略. B. Split Sort Description 给你一个长度为 \(n\) ...

  4. 【Java集合】单列集合Collection常用方法详解

    嗨~ 今天的你过得还好吗? 路途漫漫终有一归, 幸与不幸都有尽头. 在上篇文章中,我们简单介绍了下Java 集合家族中的成员,那么本篇文章,我们就来看看 Java在单列集合中,为我们提供的一些方法,以 ...

  5. 前端脚手架CLI生成模版命令工具(包括,npm包的发布,脚手架的搭建,注意事项,优化等)

    写在前面 这是停更以后,续更的一篇文章. 为什么好长时间都没有更新,因为去其他平台更新了,包括掘金,思否,简书等. 在那些地方感觉没有归属感,有的平台原创审核很麻烦,简书号称可以获得打赏,可是码了几十 ...

  6. JavaScript高级程序设计笔记09 代理与反射

    代理与反射 ES6新增的代理和反射为开发者提供了拦截并向基本操作嵌入额外行为的能力. 具体就是,可以给目标对象定义一个关联的代理对象,而这个代理对象可以作为抽象的目标对象来使用. 在对目标对象的各种操 ...

  7. 机器人的运动范围(dfs)(leetcode 4.8 每日打卡)

    地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外),也不能进入行坐标和列 ...

  8. Java——面向对象(static关键字开始)

    一.static 可以修饰成员变量和成员方法 关键字特点: 随着类的加载而加载: 优先于对象存在: 被类的所有对象共享: 可以通过类名直接调用: 注意事项: 在静态方法中是没有this关键字的 静态的 ...

  9. Modbus 转 PROFIBUS DP 应用场景 PM-160

    1)在网关PROFIBUS DP侧是一个PROFIBUSDP从站,在Modbus串口侧有Modbus主站.Modbus从站.通用模式可选:接口有RS232RS485.RS422三种可选. 2)通信方式 ...

  10. CTT2023 邮寄

    从广州被邮寄到了苏州.还有点感冒有点咳嗽,体温 37 度.还是来了. Day 0 清早坐 xp 的车,早上坐飞机,中午坐高铁,下午坐大巴,风尘仆仆地赶到了苏州. 飞机上有一套省选题要验,看了两眼,T1 ...