IOTCS+Ekuiper搭建物联网边缘计算平台

背景介绍

IOTCS 是专为物联网平台而设计的工业智能网关。自从 2020 年 10 月以来,我们从需求调研,设计,定型,研发,测试经过漫长的沉淀与孵化,最终顺利实现工业智能网关最初的设想。我们凭借创新设计理念、快捷的安装以及部署、易用的扩展编程接口和强大的产品性能博得了相关用户的青睐。

af2703bccf1b87d484504a1adda0476b.jpeg

本文介绍如何使用IOTCS快速搭建边缘计算平台,通过简单修改几行配置文件,就可以快速搭建一个基于 IOTCS + MQTT SERVER + Ekuiper + TDengine 边缘计算平台。架构如下图:

69f3053602be65fb8c67fcfc8e9628f9.png

边缘计算方案整体测试技术选型:

  • Prosys OPCUA 模拟器

  • IOTCS 自研物联网网关

  • MQTT SERVER =》 mosquitto

  • ekuiper => LF Ekuiper 边缘计算平台

  • 数据存储 =》 TDengine

  • 操作系统=> ubuntu 【共两台虚拟机:1.ubuntu destop 2. ubuntu server】

搭建流程及详细说明:

一、安装Prosys OPCUA 模拟器

【注:我们以用OPC UA驱动作为案例讲解】

  • 下载Prosys 模拟器,地址如下:

https://www.prosysopc.com/products/opc-ua-simulation-server/
  • 提供版本型号

ff96431ed02e69769878ef628dd21fab.png

  • 下载完成后,在ubuntu desktop 操作系统上安装

sudo chmod u+x ./prosys-opc-ua-simulation-server-linux-x64-5.2.2-9.sh
sudo ./prosys-opc-ua-simulation-server-linux-x64-5.2.2-9.sh

8ca0cfb0bd5f15d6af842ed94ad7c149.png

最终界面如下图:

5306fb7316f09e7bf9529d48bc926aaa.png

  • Prosys OPC UA Simulation Server设置【确保模拟服务器处在running状态】

52b1a2637951945f15426d78f37e4a4c.png

上图红框说明有两个模式

第一个是基本模式 【指界面tab界比较少,比较简洁】

第二个是专家模式 【指界面tab界比较多,比较复杂】

  • 添加模拟变量信息

cdcd98352f4fdda3cba5fde220b1da2a.png

  • 查看OPC UA 模拟器Endpoints 信息,方便客户端连接测试

ff19f2760ce4337c8c36168e4de35065.png

endpoint:opc.tcp://<ip>:53530/OPCUA/SimulationServer
#修改opcua地址,如下图
opc.tcp://192.168.233.153:53530/iotcs
  • Prosys OPC UA 设置完成后,验证配置是否正确

二、安装IOTCS

IOTCS软网关相关功能如下,例如:

1、采集配置

    a、驱动管理

    b、设备管理

    c、设备变量管理

2、规则引擎

    a、规则列表

    b、资产管理

3、设备日志

4、用户管理

【以在ubuntu server 上安装为例】

  • 使用docker方式安装IOTCS

docker run --restart always --name iigateway -dit -p 8001:8001 -p 9001:9001iotcs/igateway:0.6.1
  • 使用tar.gz方式安装IOTCS

 1、下载Linux运行环境:安装.net core3.1

 2、官方下载地址:

https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-3.1.24-linux-x64-binaries

3、安装运行环境

tar -zxvf aspnetcore-runtime-3.1.24-linux-x64.tar.gz -C /opt/netcoresdk/
ln -s /opt/netcoresdk/ /usr/local/bin
验证是否安装成功:dotnet --info

 4、下载release 版本,将压缩包解压到指定的位置

进入到App目录后,执行如下命令:dotent IOTCS.EdgeGateway.Server.dll
  • 安装IOTCS WebUI

sudo apt install git
#将web ui 界面文件下载到指定的目录
git clone https://github.com/IOT-CS/WEB.git
#安装nginx 
docker run -dit -p 80:80 --restart=always  --name iotcs-nginx -v/opt/iotcs_web/WEB:/usr/share/nginx/html:rw  nginx:1.20.1-alpine

1418c00aacb10db38d504a9a806655cb.png

修改web ui 配置文件【修改api IP 地址和websocket ip 地址】

vim /opt/iotcs_web/WEB/static/api_config.js

e0558d71ba03701c1521274daa92a7c6.png

 修改完成后,重启web ui nginx docker

  • 登录WEB UI

  登录地址:http://<ip>/#login

747b78fd90f4f6d937958fc4ee5d9a7e.png

3be50f2a0385148752503bc10cf4f312.png

注:如看到上述界面代表安装成功了。详细请参看官网

首先配置南向设备功能

  • 配置驱动管理,如下图:

a47157699a16ba6253aecdd5c443975c.png

驱动名称:给当前驱动建立一个名称

驱动类型:选择驱动,本次测试使用的OPCUA

  • 添加设备组,如下图:

3f5492873db6e3eab176d3bb0e901c08.png

首先,需要添加设置组,设备组有两个参数:

设备组名称:给设备组建立一个名称。

采集周期:当前分组下面所有设备都是按照此周期采集。

  • 添加分组设备,如下图

4f4ba21cb68e4af915fdca9f8315a2a5.png

添加设备有四个参数:

父级:指的是当前设备所属的分组,下拉框选择。

Topic: 为当前采集设备设定一个主题名,同MQ里主题有相似用处。

设备名称: 为当前设备设定一个名称。

驱动名称:选择当前设备的驱动,用于采集数据。

  • 设置OPC UA 采集地址,如下图:

142a3a4201b0a8e231164fdc717ee1aa.png

注:如果是PLC,可能参数会更多。目前软网关只支持OPC UA。(西门子PLC系列,三菱PLC,MTConnect, Modbus等都在陆续加入,敬请期待)

  • 添加设备点位,如下图:

1b963bb1fb17df09c99cf78d8f54666c.png

选择分组,然后选择设备,最后点击添加点位,参数如下:

变量名:指的是字段名称

地址:目前是OPC UA 所以指的是NodeID ,如果是PLC ,那么就是PLC 地址。

注:以上采集配置已经配置完成。

其次,配置北向数据导出功能【规则引擎配置】

  • 配置资源

6ba99d2e87cd79b4c7e8317e0ede9199.png

本次以MQTT为例,配置MQTT 服务器相关参数

  • 配置规则

【开源版规则引擎相对简单,主要支持两种功能,MQTT导出功能,HTTP导出功能】

3f51c30cec653c8e4db86dde3cc0d9f7.png

三、安装 mosquitto 作为mqtt 服务器【在ubuntu server 上面安装】

  • 拉取镜像

docker pull eclipse-mosquitto:latest
  • 查看镜像

docker images
  • 建立配置目录

mkdir -p /opt/mosquitto/config
mkdir -p /opt/mosquitto/data
mkdir -p /opt/mosquitto/log
  • 建立配置文件,大部分教程缺少:listener 1883

vim /opt/mosquitto/config/mosquitto.conf
# 写入以下内容
persistence true
persistence_location /opt/mosquitto/data
log_dest file /opt/mosquitto/log/mosquitto.log
listener 1883
allow_anonymous true 【此参数设置为true后,连接mqtt 可以匿名连接】
  • 为目录授权

chmod -R 644 /opt/mosquitto
  • Docker 启动

docker run -dit --restart=always --name=mosquitto --privileged -p 1883:1883 -p 9002:9001 -v
/opt/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v
/opt/mosquitto/data:/mosquitto/data -v
/opt/mosquitto/log:/mosquitto/log eclipse-mosquitto:latest

8ff6d5d7510a70e8613f7fde2bf38038.png

  • 生成密码

#进入容器
docker exec -it 6acdb4238f69 sh
#对于passworf_file,可以复制一份模板,或者创建一个空文件
touch /mosquitto/config/pwfile.conf
chmod -R 755 /mosquitto/config/pwfile.conf
# 使用mosquitto_passwd命令创建用户,第一个test是用户名,第二个test2022是密码
mosquitto_passwd -b /mosquitto/config/pwfile.conf test test2019
  • 验证mqtt server 服务【使用MQTT client 测试】

a0ac081b46d09dc2727a282d9cfe675d.png

四、安装Ekuiper

  • 下载ekuiper 镜像

docker pull lfedge/ekuiper:1.5-alpine
  • 运行docker

docker run -p 9081:9081 -d --restart=always --name kuiper -e
MQTT_SOURCE__DEFAULT__SERVER="tcp://192.168.233.152:1883" lfedge/ekuiper:1.5-alpine
  • 验证ekuiper 是否真正的从mqtt server 订阅数据

#进入ekuiper docker 容器内部
docker exec -it kuiper /bin/sh
#执行如下SQL
./bin/kuiper create stream demo '(speed bigint) WITH (FORMAT="JSON",
DATASOURCE="test_opcua")'
#查询
./bin/kuiper query
select * from demo;

b18ef5642c23ed1d0cdfab51d1acd15c.png

进入查询命令后,再执行如下图红框里的SQL语句【过滤温度超过30度的数据】

b62bb643dc6a58df54c8c78696c84401.png

现在我们通过MQTT client 连接MQTT server 发送数据,然后验证ekuiper query 是否有数据显示【使用MQTT client 推数据到MQTT 然后再看数据是否能被 ekuiper 过滤】

a96afc6b19db66d8ff44d4bd68c56b0e.png

五、验证IOTCS 从OPCUA 模拟器当中采集数据 ---> MQTT server ---> ekuiper,如下图:测试只采集了一个变量

  • Prosys OPC UA 设置变量

cbc5a24d1f45ae11f3f68b75c18406f7.png

  • IOTCS 配置设备变量

9b414b2a5cd7662719d108dceb5f58b4.png

  • 查看ekuiper

62c8e4031b10eb4ffeb663c1fdf9386f.png

  • ekuiper 安装tdengine 插件有两步必须处理

第一步下载tdengine 插件,解压到相应的目录,如图:

0a25d3f74b1da4b81a8c8ef8f776eb50.png

第二步将上述两个文件上传到对应的目录

install.sh脚本需要docker cp {containerID} install.sh kuiper:/kuiper

然后在docker 容器内部执行install.sh

tdengine@1.5.0.so 需要放入到上面建立docker 数据卷目录

第三步验证插件是否安装成功

curl http://127.0.0.1:9081/plugins/sinks/tdengine

5f61160ead468d1564730d2b2ca584eb.png

六、安装TDengine 【操作系统是ubuntu server】

  • 第一种通过apt-get 安装方式

  • 可以使用 apt-get 工具从官方仓库安装

  • 安装包仓库

wget -qO - http://repos.taosdata.com/tdengine.key | sudo apt-key add -
echo "deb [arch=amd64] http://repos.taosdata.com/tdengine-stable stable main" |
sudo tee /etc/apt/sources.list.d/tdengine-stable.list
  • 执行完上述两条命令后会生产一个包管理文件

ef4e55172c556d9f09f56a201eec0027.png

  • 使用 apt-get 命令安装

sudo apt-get update
apt-cache policy tdengine
sudo apt-get install tdengine

1f67d8913fd908158c84f41ae556af1d.png

  • 验证tdengine 数据库是否正常

systemctl status ta
  • 第二种通过安装包方式安装【推荐使用第二种】

  • 下载对应的安装包,我们测试安装的是TDengine 2.2.2.0

2e4d4aa9ff9268971ac52c68fa7a1f03.png

  • 对下载的安装包进行安装

dpkg -i TDengine-server-2.2.2.0-Linux-x64.deb

7303509af59fd8fb411ec63b6595d3d1.png

  • 启动数据库服务

systemctl start taosd
#查看是否启动成功
systemctl status taosd
#启动成功后,我们使用TDengine 命令行 (CLI)操作数据库。
taos

5471003aba48c9de01e5e654c7a2f633.png

注:如果像上图这样,说明已经安装成功并且可以操作数据库。

七、ekuiper 数据导入tdengine

  • 创建数据库、表,参考以下文档:

create database demo;
use demo;
create table t (ts timestamp, speed int);
  • 创建流

curl --location --request POST 'http://192.168.233.152:9081/streams' --header
'Content-Type:application/json' --data '{"sql":"create stream demoStream(speed bigint)WITH ( DATASOURCE = \"test_opcua\", FORMAT = \"json\");"}'
  • 创建规则

curl --location --request POST 'http://192.168.233.152:9081/rules' --header 'ContentType:application/json'
--data '{"id":"demoRule","sql":"SELECT * FROMdemoStream;","actions":[{"tdengine":{"provideTs":true,"tsFieldName":"ts","port":0,"ip":"127.0.0.1","database":"demo","table":"t","fields":["ts","speed"]}}]}'
  • 删除规则使用API

curl --location --request DELETE http://192.168.233.152:9081/rules/demoRule
  • 确定数据是否写入到tdengine

96f4528e931ca356ee17b0c902065073.png

注:下一篇文章准备 IOTCS+ekuiper + tdengine + grafana 实现端到端的解决方案

项目开源地址:

//IOTCS
https://github.com/IOT-CS
https://gitee.com/wittqueen/IOTCS//WEB配置
https://github.com/IOT-CS/WEB
https://gitee.com/wittqueen/WEB

项目演示地址:

http://47.108.190.157:8080/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMX 使用指南一 Java Management Extensions

1. 什么是 JMX JMX&#xff0c;全称 Java Management Extensions&#xff0c;是在 J2SE 5.0 版本中引入的一个功能。提供了一种在运行时动态管理资源的框架&#xff0c;主要用于企业应用程序中实现可配置或动态获取应用程序的状态。JMX 提供了一种简单、标准的监控和管理资源的…

多种方法实现自适应布局

最近切了几个手机端的网页&#xff0c;第一次切的是美团的首页&#xff0c;为了自适应不同的手机分辨率&#xff0c;需要用到自适应布局&#xff0c;切图的时候是用的第一中方法&#xff0c;用到了定位&#xff0c;后来查找了一些其他方法&#xff0c;现在就介绍几种自适应布局…

hivesql优化的深入解析

转载&#xff1a;https://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job&#xff0c;一个Map Reduce Job又有Map&#xff0c;Reduce&#xff0c;Spill&#xff0c;Shuffle&#xff0c;Sort等多个阶段&#xff0c;所以针对Hive查询的优化可以大致…

如何用一行 CSS 实现 10 种现代布局

现代 CSS 布局使开发人员只需按几下键就可以编写十分有意义且强大的样式规则。上面的讨论和接下来的帖文研究了 10 种强大的 CSS 布局&#xff0c;它们实现了一些非凡的工作。 01. 超级居中&#xff1a;place-items: center 对于第一个“单行”布局&#xff0c;让我们解决所有 …

在.NET 6.0中使用不同的托管模型

本章是《定制ASP NET 6.0框架系列文章》的第六篇。在本章中&#xff0c;我们将讨论如何在ASP NET 6.0中自定义托管宿主。比如&#xff0c;托管选项和不同类型的托管&#xff0c;并了解一下IIS上的托管。限于篇幅&#xff0c;本章只是一个抛砖迎玉。本章涵盖主题包括&#xff1a…

TypeScript 与 JavaScript 的区别

TypeScript 是 JavaScript 的一个超集&#xff0c;支持 ECMAScript 6 标准&#xff08;ES6 教程&#xff09;。TypeScript 由微软开发的自由和开源的编程语言。TypeScript 设计目标是开发大型应用&#xff0c;它可以编译成纯 JavaScript&#xff0c;编译出来的 JavaScript 可以…

IO 和NIO的区别

1.IO和NIO的区别 NIO就是New IO在JDK1.4中引入。 IO和NIO有相同的作用和目的&#xff0c;但实现方式不同&#xff0c;NIO主要用到的是块&#xff0c;所以NIO的效率要比IO快不少。 在Java API中提供了两套NIO&#xff0c;一套针对标准输入输出NIO&#xff0c;另一套就是网络编程…

PerfView专题 (第四篇):如何寻找 C# 中程序集泄漏

一&#xff1a;背景 前两篇我们都聊到了非托管内存泄漏&#xff0c;一个是 HeapAlloc &#xff0c;一个是 VirtualAlloc&#xff0c;除了这两种泄漏之外还存在其他渠道的内存泄漏&#xff0c;比如程序集泄漏&#xff0c;这一篇我们就来聊一聊。二&#xff1a;程序集也会泄漏&am…

站立会议第九天

1.站立会议内容 昨天我们成功的将图片插进去了&#xff0c;在这里&#xff0c;图片是使用的png格式&#xff0c;长知识了。我们今天要继续把界面再优化一下。 照片&#xff1a; 2.任务展板 3.燃尽图 转载于:https://www.cnblogs.com/bk1246788/p/6852935.html

学习nginx 下面只是简单的配置文件

2019独角兽企业重金招聘Python工程师标准>>> #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } …

实现城市治理一网统管,必须这 4 个关键技术

导读&#xff1a;要实现城市治理一网统管&#xff0c;必须具备以下四个关键技术&#xff1a;城市状态一网感知、城市数据一网共享、信息流转三屏联动、虚实映射数字孪生。 作者&#xff1a;郑宇 来源&#xff1a;大数据DT&#xff08;ID&#xff1a;hzdashuju&#xff09; 01…

实现生成订单30分钟未支付,则自动取消

目录 了解需求 方案 1&#xff1a;数据库轮询 思路 实现 优点 缺点 方案 2&#xff1a;JDK 的延迟队列 思路 实现 优点 缺点 方案 3&#xff1a;时间轮算法 思路 实现 优点 缺点 方案 4&#xff1a;redis 缓存 思路一 实现一 解决方案 思路二 实现二 优…

CA周记-.NET MAUI in GCR 月报(2022年8月)

.NET MAUI 正式版本发布已经三个月了&#xff0c;有小伙伴希望我们有一些关于 .NET MAUI 相关的本地化内容以及开源项目介绍&#xff0c;接下来从8月开始&#xff0c;我希望用月报的形式和大家分享 .NET MAUI 在中国的活动&#xff0c;学习资源&#xff0c;优秀的开源项目&…

一文读懂研发效能洞察的五大流动指标

作者 | 张乐 目录 1 数字化时代&#xff0c;软件研发本身也要数字化 2 流框架及五大流动指标 1. 流动速率 2. 流动时间 3. 流动负载 4. 流动效率 5. 流动分布 3 研发过程中的常见瓶颈及解决思路 1. 稀缺的专家或资源&#xff0c;导致流动受阻 2. 缺乏自动化或工程能…

RabbitMQ队列

RabbitMQ是什么&#xff1f; RabbitMQ是一个在AMQP基础上完整的&#xff0c;可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&…

《ASP.NET Core 6框架揭秘实例》演示[14]:日志的进阶用法

为了对各种日志框架进行整合&#xff0c;微软创建了一个用来提供统一的日志编程模式的日志框架。《ASP.NET Core 6框架揭秘》实例演示[13]&#xff1a;日志的基本编程模式》以实例演示的方式介绍了日志的基本编程模式&#xff0c;现在我们来补充几种“进阶”用法。[本文节选《A…

什么是云原生,云原生技术为什么这么火?

文章目录 一、开篇浅谈二、云计算是什么三、云原生是什么四、云计算的四个层次 4.1 IaaS&#xff08;基础架构即服务&#xff09;4.2 PaaS&#xff08;平台即服务&#xff09;4.3 SaaS&#xff08;软件即服务&#xff09;4.4 DaaS&#xff08;数据即服务&#xff09;五、云原生…

PerfView专题 (第五篇):如何寻找 C# 托管内存泄漏

一&#xff1a;背景 前几篇我们聊的都是 非托管内存泄漏&#xff0c;这一篇我们再看下如何用 PerfView 来排查 托管内存泄漏 &#xff0c;其实 托管内存泄漏 比较好排查&#xff0c;尤其是用 WinDbg&#xff0c;毕竟C#是带有丰富的元数据&#xff0c;不像C下去就是二进制。二&a…

DevOps及DevOps常用的工具介绍

目录 1. 什么是 DevOps2. DevOps 概念的起源 2.1. 单体架构 瀑布模式2.2. 分布式架构 敏捷开发模式 2.2.1. 多人协同开发问题2.2.2. 多机器问题2.2.3. 开发和运维角色的天生对立问题2.3. 微服务架构 DevOps3. DevOps 到底是什么4. DevOps 常用的工具 4.1. Jenkins4.2. Kuber…

2018年SIAF 广州国际工业自动化技术及装备展览会下周隆重开幕

同期研讨活动聚焦行业未来趋势&#xff0c;探索技术发展及实际应用层面。 华南最重要的工业自动化行业盛会之一&#xff0c;SIAF广州国际工业自动化技术及装备展览会&#xff0c;将于2018年3月4至6日在广州中国进出口商品交易会展馆隆重开幕。为期三天的展会将再度与广州国际模…