edgex简述(代码片段)

embedded-linux embedded-linux     2022-12-09     700

关键词:

一.概述

Edgex foundry是一个Linux 基金会运营的开源边缘计算物联网软件框架项目,该项目的核心是基于与硬件和操作系统完全无关的参考软件平台建立的互操作框架,使能即插即用的组件生态系统,统一市场,加速物联网方案的部署。EdgeX Foundry 使有意参与的各方在开放与互操作的物联网方案中自由协作,无论他们是使用公开标准或私有方案。

EdgeX Foundry微服务集合构成了四个微服务层及两个增强的基础系统服务,四个微服务层包含了从物理域数据采集到信息域数据处理等一系列的服务,另外两个基础系统服务为该四个服务层提供支撑服务。

四个微服务层从物理层到应用层依次为:设备服务层(device service),核心服务层(core service),支持服务层(supporting service),开放服务层(export service)。

两个增强基础服务:security和system Management。

技术图片

在edgex中区分南北向:South Side和North Side

South Side:All IoT 设备、传感器、执行器等数据的来源端。

North Side:云端(the Cloud),数据在这里存储、汇聚、分析、整合等。

二.Core Services

核心服务层包含下列组件:

Core data:负责采集南向设备层数据,并向北向服务提供数据服务。a persistence repository and associated management service for data collected from the south side objects.

Command:负责向南向设备发送命令。a service that facilitates and controls actuation requests from the north side to the south side.

Metadata:负责设备自身能力描述,提供配置新设备并将它们与其拥有的设备服务配对的功能。

a repository and associated management service of metadata about the objects that are connected to EdgeX Foundry. Provides the capability to provision new devices and pair them with their owning device services.

Registry&config:负责服务注册与发现,为其他EdgeX Foundry微服务提供关于EdgeX Foundry内相关服务的信息,包括微服务配置属性。采用开源consul实现。

provides other EdgeX Foundry microservices with information about associated services within EdgeX Foundry and microservices configuration properties (i.e. - a repository of initialization values).

Registry&config微服务向EdgeX Foundry框架范围的微服务提供集中式管理,主要包含两个方面:

?Edgex Foundry框架范围内所有微服务的配置参数与操作参数;

?Edgex Foundry框架范围内所有微服务的位置与状态;

当每个edgex微服务启动时,都应该向registry&config注册自己,以便registry&config之后可以ping其他微服务以准确获取相关微服务的健康状况,从而为edgex或第三方提供权威的微服务状态信息。

三.Supporting Services

支持服务(SS)层包含广泛的微服务,该层微服务主要提供边缘分析服务和智能分析服务。 此外,该层还为EdgeXmicorservices提供支持功能,如日志记录,调度和数据清理(清理)。

规则引擎,警报和通知微服务 在SS层内,因为它们在Core Services层上运行。 本地分析功能(目前仅以简单的规则引擎实现基本的分析功能)也位于此层。

四.Export Services

在必要情况下,EdgeX Foundry需要可以独立于其他系统运行。Edgex Foundry所依存的网关通常会在独立非联网环境下部署,同时监管一组传感器或设备。当网关在不联网环境下运行时,其监管的传感器及设备是不受外界环境监管或控制的。因此EdgeX Foundry在不连接北向应用的情况下,是可以长时间独立运行的。不过EdgeX Foundry收集的数据总归还是需要定期或不定期的传输给北向应用(通常为云端系统)。开放服务层就是为实现数据的传输。开放服务层提供了一组微服务实现以下功能:

● 北向应用可以在网关注册,并获取其感兴趣的南向设备的数据;

● 通知数据何时被发往何地;

● 通知数据传输格式;

本层提供的微服务:

Client Registration

Distribution

五.Device Services

设备服务层负责与南向设备交互。设备服务是与南向设备或物联网对象交互的边缘连接器,包括各种传感器、执行器等。

设备服务可以同时服务于一个或多个设备(传感器,致动器等)。 DS管理的“设备”可能不是简单的单一物理设备。它可能是EdgeX Foundry的另一个网关(以及该网关的所有设备),设备管理器或设备聚合器,充当设备或设备集合。

设备服务层的微服务通过每个物联网对象本身的协议与设备,传感器,执行器和其他物联网对象进行通信。DS层将由IoT对象生成和传递的数据转换为常见的EdgeX Foundry数据结构,并将转换后的数据发送到Core Services Layer以及EdgeX Foundry其他层的其他微服务。

六.系统服务层

系统服务包含安全基础服务和系统管理服务,目前服务不完善。

七.应用

可通过edgex提供的容器体验edgex服务,参照https://docs.edgexfoundry.org/Ch-Walkthrough.html。

1)安装完docker和docker-compose后,执行如下命令完成镜像下载和启动:

wget https://raw.githubusercontent.com/edgexfoundry/developer-scripts/master/compose-files/docker-compose.yml
docker-compose up -d

技术图片

一段时间后,所有相关服务都启动成功:

~/edgex/0.7.1_docker$ docker-compose up -d
Creating network "071_docker_edgex-network" with driver "bridge"
Creating edgex-support-rulesengine ... done
Creating edgex-files               ... done
Creating edgex-core-consul         ... done
Creating edgex-mongo               ... done
Creating edgex-config-seed         ... done
Creating edgex-support-logging     ... done
Creating edgex-core-data             ... done
Creating edgex-support-notifications ... done
Creating edgex-core-metadata         ... done
Creating edgex-export-client         ... done
Creating edgex-core-command          ... done
Creating edgex-support-scheduler     ... done
Creating edgex-export-distro         ... done
~/edgex/0.7.1_docker$ docker-compose ps
           Name                          Command               State                                                     Ports                                                 
------------------------------------------------------------------------------------------------------------------------------------------
edgex-config-seed             /bin/sh -c /edgex/cmd/conf ...   Exit 0                                                                                                          
edgex-core-command            /core-command --consul --p ...   Up       0.0.0.0:48082->48082/tcp
edgex-core-consul             docker-entrypoint.sh agent ...   Up       8300/tcp, 8301/tcp, 8301/udp, 8302/tcp, 8302/udp,
 0.0.0.0:8400->8400/tcp, 0.0.0.0:8500->8500/tcp,0.0.0.0:8600->8600/tcp, 8600/udp
edgex-core-data               /core-data --consul --prof ...   Up       0.0.0.0:48080->48080/tcp, 0.0.0.0:5563->5563/tcp
edgex-core-metadata           /core-metadata --consul -- ...   Up       0.0.0.0:48081->48081/tcp, 48082/tcp
edgex-export-client           /export-client --consul -- ...   Up       0.0.0.0:48071->48071/tcp
edgex-export-distro           /export-distro --consul -- ...   Up       0.0.0.0:48070->48070/tcp, 0.0.0.0:5566->5566/tcp
edgex-files                   /bin/sh -c /usr/bin/tail - ...   Up                                                                                                              
edgex-mongo                   docker-entrypoint.sh /bin/ ...   Up       0.0.0.0:27017->27017/tcp
edgex-support-logging         /support-logging --consul  ...   Up       0.0.0.0:48061->48061/tcp
edgex-support-notifications   /support-notifications --c ...   Up       0.0.0.0:48060->48060/tcp
edgex-support-rulesengine     /bin/sh -c java -jar -Djav ...   Up       0.0.0.0:48075->48075/tcp
edgex-support-scheduler       /support-scheduler --consu ...   Up       0.0.0.0:48085->48085/tcp

consul服务对外提供web服务,可通过hostip:8500访问管理服务。

此外,edgex有专门的ui项目:https://github.com/edgexfoundry/edgex-ui-go,运行如下命令启动:

docker run -it -d -p 4000:4000 --name edgex-ui-go edgexfoundry/docker-edgex-ui-go:0.1.1

可通过hostip:4000访问,user/passwd均为admin。

2)参考https://docs.edgexfoundry.org/Ch-Walkthrough.html进行API walkthrough测试,将例子API中localhost改为主机的IP地址,比如 http://localhost:48081/api/v1/addressable 修改为

http://192.168.134.144:48081/api/v1/addressable。 

可在主机192.168.134.144上搭建mosquitto服务器,并订阅主题a/b/c:

mosquitto_sub -t a/b/c

Register an Export Client时需要将mqtt broker配置为上文搭建的mosquitto代理服务器,MQTT topic配置为 a/b/c

POST to http://192.168.134.144:48071/api/v1/registration
"name":"MyMQTTTopic","addressable":"name":"MyMQTTBroker","protocol":"TCP","address":"192.168.134.144","port":1883,"publisher":"EdgeXExportPublisher","user":"wang","password":"mypass","topic":"a/b/c","format":"JSON","enable":true,"destination":"MQTT_TOPIC"

发送数据:

POST to http://192.168.134.144:48080/api/v1/event
"device":"countcamera1","readings":["name":"humancount","value":"12","name":"caninecount","value":"30"]

mosquitto也会接受到相应数据:

"id":"5cd13e6b0e3608000187ec7e","pushed":0,"device":"countcamera1","created":1557216875909,"mo,"event":null,"readings":["id":"5cd13e6b0e3608000187ec7f","pushed":0,"created":1557216875909,"ntcamera1","name":"humancount","value":"12","id":"5cd13e6b0e3608000187ec80","pushed":0,"created":0,"device":"countcamera1","name":"caninecount","value":"30"]

八.Walk Through

1.准备工作

安装docker、docker-compose,并成功拉取edgex相关官方镜像,执行如下命令停止并清除edgex容器及数据。

docker-compose down
sudo rm /var/lib/docker/volumes/docker_* -rf
systemctl restart docker

2.启动edgex相关服务,不启动任何device相关服务(包含device-virtual)。

可通过修改docker-compose.yml注释掉Device Services、UIs、Tooling所有服务。

docker-compose up -d

主机IP地址为192.168.134.144,可通过如下命令确认edgex容器中目前没有设备数据:

# curl http://192.168.134.144:48080/api/v1/event
[]

3.注册设备服务和设备的地址

注册设备服务:

POSTtohttp://192.168.134.144:48081/api/v1/addressable
BODY:"name":"camera control","protocol":"HTTP","address":"172.20.0.1","port":49977,"path":"/cameracontrol","publisher":"none","user":"none","password":"none","topic":"none"

注册设备:

POSTtohttp://192.168.134.144:48081/api/v1/addressable
BODY:"name":"camera1 address","protocol":"HTTP","address":"172.20.0.1","port":49999,"path":"/camera1","publisher":"none","user":"none","password":"none","topic":"none"

注意:修改了主机IP和docker IP,需要根据测试环境配置。docker IP指向edgex docker容器的gateway,可通过docker inspect edgex-mongo查看。

POST成功后,会收到注册ID,形如:

5cd4e6479f8fc2000172aba4

可通过 GET to http://192.168.134.144:48081/api/v1/addressable获取刚注册的信息。

4.注册数据描述

注册humancount、caninecount、depth、duration、cameraerror数据,用于描述设备相关数据及错误。

POSTtohttp://192.168.134.144:48080/api/v1/valuedescriptor
BODY:"name":"humancount","description":"people count","min":"0","max":"100","type":"I","uomLabel":"count","defaultValue":"0","formatting":"%s","labels":["count","humans"]
POSTtohttp://192.168.134.144:48080/api/v1/valuedescriptor
BODY:"name":"caninecount","description":"dog count","min":"0","max":"100","type":"I","uomLabel":"count","defaultValue":"0","formatting":"%s","labels":["count","canines"]
POSTtohttp://192.168.134.144:48080/api/v1/valuedescriptor
BODY:"name":"depth","description":"scan distance","min":"1","max":"10","type":"I","uomLabel":"feet","defaultValue":"1","formatting":"%s","labels":["scan","distance"]
POSTtohttp://192.168.134.144:48080/api/v1/valuedescriptor
BODY:"name":"duration","description":"time between events","min":"10","max":"180","type":"I","uomLabel":"seconds","defaultValue":"10","formatting":"%s","labels":["duration","time"]
POSTtohttp://192.168.134.144:48080/api/v1/valuedescriptor
BODY:"name":"cameraerror","description":"error response message from a camera","min":"","max":"","type":"S","uomLabel":"","defaultValue":"error","formatting":"%s","labels":["error","message"]

同样返回注册ID。

5.注册设备Profile

Device Profile定义设备,包含设备类型、设备数据、设备支持的命令等。

POSTtohttp://192.168.134.144:48081/api/v1/deviceprofile/uploadfile
No headers
FORM-DATA:
key: “file”
value: EdgeX_CameraMonitorProfile.yml

同样返回注册ID

6.注册设备服务

POSTtohttp://192.168.134.144:48081/api/v1/deviceservice
BODY:"name":"camera control device service","description":"Manage human and dog counting cameras","labels":["camera","counter"],"adminState":"unlocked","operatingState":"enabled","addressable":"name":"camera control"

7.模拟设备

POSTtohttp://192.168.134.144:48081/api/v1/device
BODY:"name":"countcamera1","description":"human and dog counting camera #1","adminState":"unlocked","operatingState":"enabled","addressable":"name":"camera1 address","labels":["camera","counter"],"location":"","service":"name":"camera control device service","profile":"name":"camera monitor profile"

8.核实设备和服务

GETtohttp://192.168.134.144:48081/api/v1/deviceservice
GETtohttp://192.168.134.144:48081/api/v1/device

返回注册的设备和服务。

9.执行命令

列出设备支持的命令:

GETtohttp://192.168.134.144:48082/api/v1/device/name/countcamera1

列出设备支持的数据:

GETtohttp://192.168.134.144:48080/api/v1/valuedescriptor

核对当前没有数据发送或接受到:

GETtohttp://192.168.134.144:48080/api/v1/event/count

修改depth:

PUTtohttp://localhost:48082/api/v1/device/<systemspecificdeviceid>/command/<systemspecificcommandid>
PUT to http://192.168.134.144:48082/api/v1/device/5cd4ec699f8fc2000172abad/command/5cd4eaeb9f8fc2000172aba8
BODY:"depth":"9"

因为没有设备,执行失败,可通过log确认程序执行过:

dockerlogsedgex-core-command
INFO: 2019/05/10 03:34:37 Issuing PUT command to: http://172.20.0.1:49977/api/v1/devices/5cd4ec699f8fc2000172abad/scandepth
ERROR: 2019/05/10 03:34:37 Put http://172.20.0.1:49977/api/v1/devices/5cd4ec699f8fc2000172abad/scandepth: dial tcp 172.20.0.1:49977: getsockopt: connection refused

10.发送数据

模拟发送数据:

POSTtohttp://192.168.134.144:48080/api/v1/event
BODY:"device":"countcamera1","readings":["name":"humancount","value":"5","name":"caninecount","value":"3"]

读取数据:

GETtohttp://192.168.134.144:48080/api/v1/event/device/countcamera1/10
GET to http://192.168.134.144:48080/api/v1/event/count
GET to http://192.168.134.144:48080/api/v1/reading/name/humancount/10

11.注册远端接收客户端

主机搭建mosquitto服务器,并监听a/b/c主题。

POST to http://192.168.134.144:48071/api/v1/registration
"name":"MyMQTTTopic","addressable":"name":"MyMQTTBroker","protocol":"TCP","address":"192.168.134.144","port":1883,"publisher":"EdgeXExportPublisher","user":"wang","password":"mypass","topic":"a/b/c","format":"JSON","enable":true,"destination":"MQTT_TOPIC"

此时发送的数据moquitto也会接收到相关数据。

 

参考:

1.edgex官网文档

2.edgex-go github

3.edgex容器https://hub.docker.com/u/edgexfoundry/

4.EdgeX Foundry边缘计算框架简介

5.在树莓派3b+上运行edgex 

edgex(10):xubuntu-22linux系统安装edgex2.1相关服务,服务都比较小,下载启动速度快。(代码片段)

目录前言1,关于EdgeX2.12,安装docker和docker-compse环境2,使用docker-compose启动edgex2.1版本2,启动之后访问consule服务,访问EdgeX后台界面4,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/fre 查看详情

edgex(10):xubuntu-22linux系统安装edgex2.1相关服务,服务都比较小,下载启动速度快。(代码片段)

目录前言1,关于EdgeX2.12,安装docker和docker-compse环境2,使用docker-compose启动edgex2.1版本2,启动之后访问consule服务,访问EdgeX后台界面4,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/fre 查看详情

edgex(15):在edgex环境下配置ekuiper规则引擎服务,配置规则处理device-virtual发送的数据,并转发给http服务(代码片段)

目录前言1,关于ekuiper规则引擎2,使用EdgeX进行相关开发。3,在edgex管理端上面进行操作:4,或者升级到最新的ui:2.2.0也可以解决问题5,主要是利用redis的topic订阅发布消息6,编写beego的http服务接收数... 查看详情

edgex:使用最新的edgex2.0在ubuntu上进行部署,替换私服地址nexus3.edgexfoundry.org成docker官方地址,解决下载问题。有了新ui界面(代码片段)

目录前言1,关于EdgeX2.02,安装docker和docker-compose3,安装使用文档4,发现一个问题,新的yml使用了nexus3.edgexfoundry.org私服地址,网速特别慢切换成docker官方地址5,新系统uihttp://127.0.0.1:4000/#/dashboar 查看详情

edgex:使用最新的edgex2.0干啥,硬件是一方面,重要的另外一方面是软件的匹配,也要做好相关的开发,新的apiv2接口学习,实现设备的注册服务的注册(代码片段)

目录前言1,关于edgex2.02,使用2.0httpapi注册3,swaggerHTTPAPI4,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/freewebsys/category_9437788.html本文的原文连接是:https://blog.csdn.net/freeweb 查看详情

edgex(12):摄像头使用device-onvif-camera服务接入edgex,参考官方视频,需要稍微操作下就可以接入成功,然后通过参数就可以获得tp-link摄像头的rtsp地址。(代码片段

目录前言1,关于EdgeX加入摄像头2,首先要增加docker-compose依赖3,设置device-onvif-camera的tp-link摄像头用户名密码4,认证完成之后就可以测试接口了,支持Get、Set有些接口有问题5,使用总结前言相关EdgeXFoundry... 查看详情

edgex(13):edgex官方的摄像头demo-app,接入摄像头可以控制摄像头的上下左右方向,创建openvino的目标检测跟踪服务,并成功接受到相关坐标数据,可以直接做边缘计算了。(代码片段)

目录前言1,关于EdgeX的demo-app例子2,使用:makeinstall-edge-video-analytics安装操作3,使用makerun-edge-video-analytics启动镜像,开启端口80804,创建摄像头-应用,这个才是处理配置的界面,端口597505&#x 查看详情

edgex(11):通过研究openvino项目发现一个好东西,cvat项目数据标注工具,可以使用docker-compose进行本地部署,本地局域网中使用,也非常安全(代码片段)

目录前言1,关于CVAT项目2,使用docker-compose进行本地部署3,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/freewebsys/category_9437788.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/detai 查看详情

edgex(11):通过研究openvino项目发现一个好东西,cvat项目数据标注工具,可以使用docker-compose进行本地部署,本地局域网中使用,也非常安全(代码片段)

目录前言1,关于CVAT项目2,使用docker-compose进行本地部署3,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/freewebsys/category_9437788.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/detai 查看详情

edgex(11):通过研究openvino项目发现一个好东西,cvat项目数据标注工具,可以使用docker-compose进行本地部署,本地局域网中使用,也非常安全(代码片段)

目录前言1,关于CVAT项目2,使用docker-compose进行本地部署3,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/freewebsys/category_9437788.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/detai 查看详情

docker与k8s概念简述(代码片段)

Docker与K8s概念八股文Docker常规题K8s简答题1、简述etcd及其特点?2、简述etcd适应的场景?3、简述什么是Kubernetes?4、简述Kubernetes如何实现集群管理?5、简述Kubernetes的优势、适用场景及其特点?6、简述K8s相关基... 查看详情

cf1435游记(代码片段)

目录CF1435游记AFindingSasuke题意简述解题思路参考代码BANewTechnique题意简述题目分析参考代码CPerformEasily题意简述题目分析参考代码DShurikens题意简述题目分析参考代码ESolomidOracle题意简述题目分析参考代码总结CF1435游记第一次AKdiv2,... 查看详情

androidrecyclerview使用简述(代码片段)

RecyclerView使用简述前言正文一、创建项目二、RecyclerView基本使用①item布局和适配器②显示数据③添加Item点击事件④添加Item子控件点击事件⑤添加长按事件⑥多个子控件点击事件三、RecyclerView+ViewBinding使用①适配器②显示数... 查看详情

androidrecyclerview使用简述(代码片段)

RecyclerView使用简述前言正文一、创建项目二、RecyclerView基本使用①item布局和适配器②显示数据③添加Item点击事件④添加Item子控件点击事件⑤添加长按事件⑥多个子控件点击事件三、RecyclerView+ViewBinding使用①适配器②显示数... 查看详情

edgex(16):边缘计算,工业4.0,golang开发,使用apacheplc4x项目对plc设备进行modbus协议对接,实现读取和发送代码学习中(代码片段)

目录前言1,关于ApachePLC4X2,使用golang代码进行读写操作plc设备3,总结前言相关EdgeXFoundry全部分类:https://blog.csdn.net/freewebsys/category_9437788.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/details/127585739未经博主... 查看详情

简述深浅拷贝原理(代码片段)

//数组浅拷贝vararr=["xjz","is","a","superman"];//slicevarnew_arr=arr.slice();new_arr[0]="zxb";console.log("before:"+arr);console.log("after:"+new_arr);//concatvarnew_arr=arr.concat();new_arr[0]="bb";consol 查看详情

简述radiogroup和radiobutton的使用(代码片段)

简述RadioGroup和RadioButton的使用在项目中有身份选择的选项,需要用到RadioGroup和RadioButton,这里做个记录,和大家交流一下。话不多说,一起看代码 XML代码 <RadioGroupandroid:id="@+id/login_radiogroup"android:layout_width="wrap_content"andr... 查看详情

简述:():|:&;:代码的意义(代码片段)

面试题:请简述以下shell代码的意义,并说明运行此段代码会对服务器产生什么影响?:():|:&;:分析这么看不直观,加个壳看的就清楚了#!/bin/bash:():|:&;:还看不明白么?那么好,我们言归正传!shell... 查看详情