【转载】 EdgeX Foundry试运行
原文地址:
https://www.cnblogs.com/charlieroro/p/14843335.html
=============================================================
简介

EdgeX Foundry是一个由Linux基金会发起的,且厂商中立的开源IoT边缘计算项目。它可以采集来自多个源的数据,并将这些数据转发到一个中央系统。EdgeX Foundry支持多种IoT设备使用的协议,如BACNET、OPC-UA、MQTT和REST。EdgeX Foundry由一系列运行在容器中的微服务构成,微服务之间使用REST API接口进行交互。
可以将EdgeX 作为一个上层服务和设备之间的媒介,例如,某个设备使用了BACNET协议,但上层服务并不支持该协议,此时可以使用EdgeX 将上层服务的REST API转换为设备期望的协议和格式。
可以使用EdgeX 提供的规则功能,基于输入创建动作触发逻辑,如当值A大于X式,执行一个pre-set命令。
通常会把EdgeX Foundry 安装在离传感器或产生数据较近的位置,如一个边缘网关应用附近。因此可能会安装上千个EdgeX,每个EdgeX负责各自数据的采集、转换和转发工作。
更完整的介绍,参见官方文档
安装
版本发布
可以在wiki上查看EdgeX的发布情况,当前最新版本名为Hanio,下一个版本名为Ireland。本次使用的版本为Hanio。
最好使用已经发布的版本,官方的master分支可能不大稳定
部署
官方提供了使用docker-compose的安装方式。官方git仓库提供了所有版本的docker-compose文件,使用分支名区分:

EdgeX 提供了两个可视化工具:portainer和edgex-ui-go。portainer相当于一个简单的容器管理平台,edgex-ui-go相当于一个设备管理平台。
下载并运行docker-compose.yml即可,结果如下,最后两个就是可视化工具portainer和edgex-ui-go
查看设备
执行如下命令查看已有的设备:
# curl http://127.0.0.1:48082/api/v1/device
更多参见EdgeX的官方API文档。
创建设备
下面创建两种设备:
传感器集群:生成温度和湿度数据一般设备:使用REST接口,支持命令
后续使用两种方式创建设备:
- 手动方式:使用单独的REST命令创建传感器集群
- 脚本方式:使用Python脚本创建一般设备
EdgeX使用设备配置文件作为添加新设备的简单方法。设备配置文件是一个描述设备、数据格式以及支持的命令的模板,它是一个文本文件,以YAML的格式上传到EdgeX,并在后续创建新设备时引用。一种设备类型只能有一个配置文件。
传感器集群
使用EdgeX Foundry REST APIs手动创建该设备,也可以使用脚本方式创建。下面使用Postman发送REST 请求,步骤如下:
- 创建值描述信息
- 上传设备配置文件
- 创建设备
每一步操作都会用一个相同的主机IP地址,以及一个端口号。不同的端口号代表不同的微服务,例如:
- 48080:edgex-core-data
- 48081:edgex-core-metadata
- 48082:edgex-core-command
创建值描述信息
值描述信息会告诉EdgeX转发的数据格式以及数据的标签。本例中,值描述信息分别给出了温度和湿度的值。
首先创建与湿度有关的值描述,可以看到最后返回了一个id
# curl -X POST http://127.0.0.1:48080/api/v1/valuedescriptor -d '{
"name": "humidity",
"description": "Ambient humidity in percent",
"min": "0",
"max": "100",
"type": "Int64",
"uomLabel": "humidity",
"defaultValue": "0",
"formatting": "%s",
"labels": [
"environment",
"humidity"
]
}'
83d8ba2c-d12e-4531-99e6-213c3c84a895
创建与温度有关的值描述:
# curl -X POST http://127.0.0.1:48080/api/v1/valuedescriptor -d '{
"name": "temperature",
"description": "Ambient temperature in Celsius",
"min": "-50",
"max": "100",
"type": "Int64",
"uomLabel": "temperature",
"defaultValue": "0",
"formatting": "%s",
"labels": [
"environment",
"temperature"
]
}'
0a8f5637-db7d-4108-8f48-03a116ad8726
可以使用
curl http://127.0.0.1:48080/api/v1/valuedescriptor|jq
查看已创建的值描述。
上传设备配置文件
下载设备配置文件并上传,可以看到也返回了一个Id'
# curl --location --request POST 'http://127.0.0.1:48081/api/v1/deviceprofile/uploadfile' --form 'file=@"/home/sensorClusterDeviceProfile.yaml"'
01373409-433d-4775-b7e1-4ede47daab80
可以使用
curl http://127.0.0.1:48081/api/v1/deviceprofile|jq
查看上传的设备配置文件:
创建设备
在创建设备之前需要注意以下两点:
- 设备(REST设备)依赖名为"edgex-device-rest"的设备服务
- 创建设备时使用的
profile.name字段必须与上传的设备配置文件中的name字段"SensorCluster"相同
执行如下命令创建设备:
# curl -X POST http://127.0.0.1:48081/api/v1/device -d '{
"name": "Temp_and_Humidity_sensor_cluster_01",
"description": "Raspberry Pi sensor cluster",
"adminState": "unlocked",
"operatingState": "enabled",
"protocols": {
"example": {
"host": "dummy",
"port": "1234",
"unitID": "1"
}
},
"labels": [
"Humidity sensor",
"Temperature sensor",
"DHT11"
],
"location": "Tokyo",
"service": {
"name": "edgex-device-rest"
},
"profile": {
"name": "SensorCluster"
}
}'
a687ea40-13ca-4ed3-bb00-140ae84344a1
向EdgeX Foundry发送数据
向EdgeX Foundry发送温度和湿度数据:
# curl --request POST 'http://127.0.0.1:49986/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/temperature' --header 'Content-Type: text/plain' --data-raw '23' # curl --request POST 'http://127.0.0.1:49986/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/humidity' --header 'Content-Type: text/plain' --data-raw '33'
使用
curl http://127.0.0.1:48080/api/v1/event/count/Temp_and_Humidity_sensor_cluster_01
查看该设备上的事件数:

读取传入的数据
# curl -X GET http://localhost:48080/api/v1/reading/device/Temp_and_Humidity_sensor_cluster_01/100|jq
[
{
"id": "b72e2fde-fe8c-41ed-baa4-dab0155bc53d",
"created": 1622629900723,
"origin": 1622629900721518000,
"device": "Temp_and_Humidity_sensor_cluster_01",
"name": "humidity",
"value": "33",
"valueType": "Int64"
},
{
"id": "07b596c3-248a-4800-b0f6-6d5cb58964b6",
"created": 1622629813141,
"origin": 1622629813139238100,
"device": "Temp_and_Humidity_sensor_cluster_01",
"name": "temperature",
"value": "23",
"valueType": "Int64"
},
...
]
到此为止,数据已经传入到EdgeX Foundry,短时间内会保存在Redis DB中。由于数据不会在边缘设备中保存太久,因此需要配置如何导出数据。
导出数据
EdgeX 为多种云服务和应用提供了exporters,为了简化,下面使用社区提供的配置将EdgeX的数据发送到公开的MQTT broker(基于Hive MQ)。
下载docker-compose.yml并运行,按照前面的方式添加设备(可能需要清除docker volume)。操作步骤可以见exporting-data。这样在公开的MQTT broker上就可以看到自己发送的数据。

可以在consul的Key/Value中设置

执行
docker logs -f edgex-app-service-configurable-rules
就可以查看数据发送日志:
level=DEBUG ts=2021-06-02T14:54:39.641349729Z app=AppService-rules-engine source=runtime.go:59 msg="Processing message: 1 Transforms"
level=DEBUG ts=2021-06-02T14:54:39.642895079Z app=AppService-rules-engine source=outputdata.go:38 msg="Setting output data"
level=DEBUG ts=2021-06-02T14:54:42.359115397Z app=AppService-rules-engine source=runtime.go:59 msg="Processing message: 1 Transforms"
level=DEBUG ts=2021-06-02T14:54:42.359264279Z app=AppService-rules-engine source=outputdata.go:38 msg="Setting output data"
level=DEBUG ts=2021-06-02T14:55:36.565067194Z app=AppService-rules-engine source=runtime.go:59 msg="Processing message: 1 Transforms"
level=DEBUG ts=2021-06-02T14:55:36.565268032Z app=AppService-rules-engine source=outputdata.go:38 msg="Setting output data"
总结
EdgeX后续的Roadmap如下,其中下个版本Ireland将会把API从v1升级为v2:
'Barcelona': October 2017
'California': July 2018
'Delhi': November 2018
'Edinburgh': July 2019
'Fuji': November 2019
'Geneva': ~ April 2020
'Hanoi': ~ October 2020
'Ireland': ~ June 2021
'Jakarta': ~ November 2021
'Kamakura': ~ April 2022
本文只是一个EdgeX的试用,并没有深入讲解内部实现。总体上看EdgeX可以看作是运行在边缘设备周边的适配器,负责协议转换和数据的临时存储等。后续如果有机会涉及此方面工作再深入研究。
感谢Linux基金会以及该项目的贡献者。
参考
【转载】 EdgeX Foundry试运行的更多相关文章
- EdgeX Foundry试运行
EdgeX Foundry试运行 简介 EdgeX Foundry是一个由Linux基金会发起的,且厂商中立的开源IoT边缘计算项目.它可以采集来自多个源的数据,并将这些数据转发到一个中央系统.Edg ...
- 手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备
作者 连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,Kubernetes.容器等云原生技术爱好者,SuperEdge 优秀贡献者. 王冬,腾讯云研发工程师,专注于 Kubernetes. ...
- edgex简述
一.概述 Edgex foundry是一个Linux 基金会运营的开源边缘计算物联网软件框架项目,该项目的核心是基于与硬件和操作系统完全无关的参考软件平台建立的互操作框架,使能即插即用的组件生态系统, ...
- 树莓派使用Docker部署EdgeX(jakarta版本)
使用Docker部署EdgeX 老师安排我搞边缘计算,搞了很久都没能明白边缘计算是什么,甚至对其兴趣不大,前一阵弄好了lorawan网关,该做网关内部的边缘计算了,发现自己已经慢慢地学了进去,总是想要 ...
- 读懂SAP Leonardo物联网平台
读懂SAP Leonardo物联网平台 https://blog.csdn.net/weixin_42137700/article/details/81903290 本文比较系统.全面地介绍了SAP ...
- 关于k8s这项大动作,预示着边缘计算迎来“开源”发展的新周期……
在文章<最近在边缘计算领域,发生了一件足以载入物联网史册的大事…>我曾经提到Kubernetes(简称K8s)将从超大规模云计算环境,被带入到物联网边缘计算场景中. 事情有了新进展,从本周 ...
- 国外物联网平台(7):FogHorn
国外物联网平台(7) ——FogHorn 马智 引言: 据外媒在本月20日报道,硅谷初创公司FogHorn正在与谷歌合作以简化工业物联网应用的部署.本文对FogHorn的技术.产品.应用和生态进行了分 ...
- edgex0.7.1_1.0.1的X86编译和交叉编译
一. X86编译 1. 安装zeromq库 根据setup script安装: wget https://github.com/zeromq/libzmq/releases/download/v4.2 ...
- 我们建了一个 Golang 硬核技术交流群(内含视频福利)
目录 目录 Golang 是什么? 我们为什么选择 Golang? Golang 是云时代的宠儿! 我们搞了一场 Golang 入门直播 Golang 是什么? Golang 是谷歌 2009 年发布 ...
- 白话边缘计算解决方案 SuperEdge
一.SuperEdge的定义 引用下SuperEdge开源官网的定义: SuperEdge is an open source container management system for edge ...
随机推荐
- UDP 发送两遍对比一致能绝对判定发送过程成功传递完整数据吗
UDP 发送两边对比一致,能确定数据传输无错误吗 对比两条相同数据的MD5 这样做可行吗
- C#开发的目录图标更改器 - 开源研究系列文章 - 个人小作品
因为有一些项目保存在文件夹里,然后想着用不同的图标来显示该文件夹,但是Windows提供的那个修改文件夹的操作太麻烦,需要的操作太多(文件夹里鼠标右键,属性,自定义,更改图标,选择文件,选择图标,点击 ...
- OpenWrt安装配置Tailscale
什么是tailscale? Tailscale就是基于Wireguard的一个联网工具,无需公网地址,通过去中心化,实现各个节点之间点对点的连接.配置简单友好,支持的各类平台和客户端. 相比较其他组网 ...
- Spring Data JPA 学习笔记1 - JPA与Spring Data
标记[跳过]的未来完善 1 理解JPA 1.1 什么是持久化? 当一个软件关闭的时候,软件内储存的状态数据还能在下次开启时被恢复,这就是持久化.对象持久化是指每个独立的对象的生命周期都能不依赖应用程序 ...
- OAuth + Security - 2 - 资源服务器配置
PS:此文章为系列文章,建议从第一篇开始阅读. 资源服务器配置 @EnableResourceServer 注解到一个@Configuration配置类上,并且必须使用ResourceServerCo ...
- linux查看端口命令 lsof netstat
[root@VM-4-3-centos /]# lsof -i:8881COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnode 15526 roo ...
- CAEmitterLayer动画的开始和结束
有个需求,要求模仿微信做表情下雨的动画,一开始想用CAEmitterLayer,实现的代码如下: //期望:显示特效五秒后结束特效 UIImage *image = [UIImage imageNam ...
- 鸿蒙生态伙伴SDK市场正式发布,驱动千行百业鸿蒙原生应用开发
6月21-23日,华为开发者大会(HDC 2024)在东莞举办.在22日举办的[鸿蒙生态伙伴SDK]论坛中,正式发布了[鸿蒙生态伙伴SDK市场](以下简称:伙伴SDK市场),伙伴SDK市场是为开发者提 ...
- Oracle 三种分页方法
Oracle的三层分页指的是在进行分页查询时,使用三种不同的方式来实现分页效果,分别是使用ROWNUM.使用OFFSET和FETCH.使用ROW_NUMBER() OVER() 1.使用ROWNUM ...
- 【基础计算】ESDF栅格距离图计算并行加速版
前言与参考 这一部分仅为路径规划源码及论文GPIR的一个小部分,但是有代码实现,第一次看的时候有些懵,所以特此记录:主要是设置好了栅格地图后,添加了障碍物后,对其的欧式距离计算和梯度计算等.原代码中为 ...