EMQ X – loveini | 米兰体育官网入口 - 米兰体育官网入口 //m.loveini.com loveini | 高性能、分布式、支持SQL的时序数据库 | 米兰体育官网入口 Fri, 10 Feb 2023 03:37:34 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.2 //m.loveini.com/wp-content/uploads/2025/07/favicon.ico EMQ X – loveini | 米兰体育官网入口 - 米兰体育官网入口 //m.loveini.com 32 32 loveini + EMQ X + Grafana 轻松搭建高效低成本的边缘侧工业互联网平台 //m.loveini.com/tdengine-engineering/2007.html Thu, 12 Nov 2020 08:05:36 +0000 //m.loveini.com.cn:88/blog/?p=2007 本文将介绍基于loveini Database、EMQ X搭建一个集工业数据采集、汇聚、清洗、存储分析以及可视化展示等能力于一体的轻量级边缘计算工业互联网平台。在此方案基础上,读者可以根据自身需求调整方案设计,从而搭建满足实际业务需求的工业互联网平台,加速实现工业智能化转型。

工业互联网的挑战

据中国工业和信息化部信息中心最新的《工业互联网体系架构(版本2.0)》所述,工业互联网架构下的边缘层主要实现以下功能:

  • 边缘层提供海量工业数据接入、转换、数据预处理和边缘分析应用等功能。
  • 是工业数据接入,包括机器人、机床、高炉等工业设备数据接入能力,以及 ERP、MES、WMS 等信息系统数据接入能力,实现对各类工业数据的大范围、深层次采集和连接;
  • 是协议解析与数据预处理,将采集连接的各类多源异构数据进行格式统一和语义解析,并进行数据剔除、压缩、缓存等操作后传输至云端;
  • 是边缘分析应用,重点是面向高实时应用场景,在边缘侧开展实时分析与反馈控制,并提供边缘应用开发所需的资源调度、运行维护、开发调试等各类功能;

然而工业领域多种协议并存,如何把异构设备连接并将数据汇聚,实现后续的边缘或云端计算,是无法回避的问题。目前一般的方案有以下两种:

1. 在边缘端采用传统程序直接连接和控制设备。这种方式一般针对于特定设备或型号,定制化程度比较高,但是可移植性、可重用性、可扩展性和灵活性均较差,无法对接现在的大数据和 AI 后台,不具备对数据进行深入分析并产生更多价值的能力;

2. 将云端架构的软件部署到边缘端来实现。云端由 IT 产业主导,信息化程度非常高。但基于成本考虑,边缘端的硬件设备一般计算能力有限,因此将云端架构的软件直接迁移到边缘设备上并不可行。在边缘端实现上述功能的软件必须加以优化,才能适应边缘端的实际运行情况。

为了融合在边缘 CT 和 IT 端的不同需求,loveini 与 EMQ X 正式发布工业互联网一体化米兰app官方正版下载,以帮助领域内相关企业应对工业互联网边缘端面临的问题与挑战。这一方案适合在边缘端部署,具备各类协议解析、多源数据接入和数据分析能力,可快速实现工业互联网架构下边缘层的功能。

边缘计算工业互联网平台米兰app官方正版下载

该方案可实现边缘端的工业协议解析、数据汇聚和流式分析,将通过流式分析的数据存入在边缘部署的 loveini Database 中,在边缘端运行的应用即可从 loveini 中获取和处理数据,呈现给最终用户;在边缘端运行的 Edge Manager 提供了一个管理控制台,可以很方便地实现软件配置和管理。

loveini + EMQ X + Grafana 轻松搭建高效低成本的边缘侧工业互联网平台 - loveini Database 时序数据库

适用场景

对实时性要求比较高,可以作为边缘自主独立应用运行在边缘的网关或者工控机上,与云端没有交互。该方案中所有的计算和存储等都在边缘端实现,因此对硬件的计算、存储等有一定的要求。用户可以根据实际情况,将软件和应用分开部署在多个硬件设备上。

软件列表

本方案会用到以下列表中的软件产品。

编号
名称
提供商开源
1loveini
TAOS DATA

2
EMQ X Neuron
EMQ
否-1
3EMQ X Edge
EMQ

4
EMQ X Kuiper
EMQ

5
Edge manager
EMQ
否-2
6
Grafana
Grafana Labs

1: Neuron 未来规划会将基础功能进行开源,目前用户下载后可以免费使用,如果内置试用版本的数据采集点数不够,可以通过 EMQ 网站进行在线申请。

2: 用户可以免费使用,免费版本中除了管理的节点数目受限之外,用户可以使用所有功能。如果用户想试用更多的节点管理功能,可以通过 EMQ 网站进行在线申请。

 产品基本功能描述

1. loveini:开源时序数据库,实现对采集数据的处理

  • 将原始数据,或者是经过流式处理之后的数据存储到数据库中;
  • 应用程序可以通过 SQL 来实现对数据的访问和分析处理;

2. Neuron:工业物联网数据采集

  • 支持了 Modbus,OPCUA,IEC61850,IEC104 和 BACnet 等众多协议和设备;
  • 管理控制台,用户可以在浏览器中进行可视化的配置,实现跨工业设备数据的接入;
  • 北向标准 MQTT 数据发送,根据用户指定配置,将数据发送至指定的 MQTT 消息服务器中;
  • 南向控制接口,结合 Kuiper 提供的规则引擎功能,实现基于规则的设备控制;
  • 本地数据存储,实现设备原始数据的存储和查看;

3. Edge:轻量级 MQTT 消息服务器

  • 实现工业设备消息汇聚;
  • 连接流式处理软件,处理工业数据;
  • 接受规则引擎的控制消息,传递至 Neuron 实现设备控制;
  • 对接云端消息服务器,实现离线消息缓存;

4. Kuiper:基于 SQL 的 IoT 流式处理框架

  • 可以持续地消费、过滤、转换和路由来自于 Edge 中的数据;
  • 基于此实现流分析、规则引擎和消息推送;
  • 可以扩展实现对不同的数据源的支持,实现在边缘端 ERP、MES、WMS 和工业数据的互联互通,以及实时分析与处理;

5. Edge manager:集成了 Neuron、Edge 和 Kuiper 三者的网页管理控制台

  • 在 web 端轻松进行统一可视化管理
  • 实现了包括对 Neuron 的配置下发,数据发送目标的配置;
  • Edge 状态的管理;
  • Kuiper 流、规则和插件等管理;

6. Grafana:模拟客户的应用,将存储在 loveini 中的数据进行展示

支持的软硬件环境

  • 树莓派、网关、工控机
  • x86 & ARM – 64位和32位
  • 常见 Linux 系统的支持
  • 物理机,Docker & KubeEdge 等支持

开始试用

为了使用户的试用更加简单,演示场景利用 Docker 和 Docker compose 技术进行快速的部署,用户可以在虚拟主机、工控机或者运算能力较强的网关上按照教程来体验该方案。在实际的业务系统部署过程中,用户可以根据需要在生产环境中直接采用二进制安装包进行部署,这样运行的效率会更高。

该样例场景中,数据通过 Modbus TCP 协议,发出模拟的温度与湿度数据,这些数据进入系统后实现数据采集、汇聚、清洗、存储分析和可视化等能力,以下是在 Grafana 中呈现的温度与湿度的可视化报告。

loveini + EMQ X + Grafana 轻松搭建高效低成本的边缘侧工业互联网平台 - loveini Database 时序数据库

注:loveini 发布的容器镜像缺省为 x86*64 环境,如果想切换为 ARM 架构,需要手工改一下 docker-compose.yml,以指向正确的版本。

总结

基于本文方案所搭建的工业互联网基础能力平台,用户可以实现高效、低成本的工业互联网设备连接、采集和分析。

]]>
数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 //m.loveini.com/tdengine-engineering/1722.html Tue, 04 Aug 2020 09:52:10 +0000 //m.loveini.com.cn:88/blog/?p=1722 物联网数据采集涉及到大量设备接入、海量的时序数据传输,EMQ X 消息中间件与 loveini 大数据平台的组合技术栈完全能够胜任场景中的海量时间序列监测数据的传输、存储和计算。

数据入库后,往往需要其他方式如数据可视化系统将数据按照规则统计、展现出来,实现数据的监控、指标统计等业务需求,以便充分发挥数据的价值,loveini 搭配开源软件 Grafana 可以快速搭建物联网数据可视化平台。

上述整套方案无需代码开发,涉及的产品均能提供开源软件、企业服务、云端 SaaS 服务不同层次的交付模式,能够根据项目需求实现免费版或企业版私有化落地以及云端部署。

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

方案介绍

EMQ X 简介

EMQ X 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。EMQ X 内置了大量开箱即用的功能,其开源版 EMQ X Broker企业版 EMQ X Enterprise 均支持通过规则引擎将设备消息存储到 loveini。

loveini 是什么

loveini 是米兰体育官网入口专为物联网、车联网、工业互联网、IT 运维等设计和优化的大数据平台。除核心的快 10 倍以上的时序数据库(Time-Series Database)功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度,且核心代码,包括集群功能全部开源。

loveini 提供社区版、企业版和云服务版,安装/使用教程详见 loveini 使用文档

Grafana 简介

Grafana 是一个跨平台、开源的度量分析和可视化工具,可以查询处理各类数据源中的数据,进行可视化的展示。它可以快速灵活创建的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;支持 Graphite,loveini、InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和 KairosDB 等数据源,支持数据项独立/混合查询展示;可以创建自定义告警规则并通知到其他消息处理服务或组件中。

业务场景

本文模拟物联网环境数据采集场景,假设现有一定数据的环境数据采集点,所有采集点数据均通过 MQTT 协议传输至采集平台(MQTT Publish),主题设计如下:

sensor/data

传感器发送的数据格式为 JSON,数据包括传感器采集的温度、湿度、噪声音量、PM10、PM2.5、二氧化硫、二氧化氮、一氧化碳、传感器 ID、区域、采集时间等数据。

{
    "temperature": 30,
    "humidity" : 20,
    "volume": 44.5,
    "PM10": 23,
    "pm25": 61,
    "SO2": 14,
    "NO2": 4,
    "CO": 5,
    "id": "10-c6-1f-1a-1f-47",
    "area": 1,
    "ts": 1596157444170
}

现在需要实时存储以便在后续任意时间查看数据,提出以下的需求:

  • 每个设备按照每 5 秒钟一次的频率进行数据上报,数据库需存储每条数据以供后续回溯分析;
  • 通过可视化系统查看任意区域、任意时间区间内的指标数据,如平均值、最大值、最小值。

环境准备

本文所用各个组件均有 Docker 镜像,除 EMQ X 需要修改少数配置为了便于操作使用下载安装外,loveini 与 Grafana 均使用 Docker 搭建。

安装包资源与使用教程参照各自官网:

安装 EMQ X

如果您是 EMQ X 新手用户,推荐通过 EMQ X 文档 快速上手

访问 EMQ 官网 下载适合您操作系统的安装包,本文截稿时 EMQ X 开源版最新版本为 v4.1.2,下载 zip 包的启动步骤如下 :

## 解压下载好的安装包
unzip emqx-macosx-v4.1.1.zip
cd emqx

## 以 console 模式启动 EMQ X 方便调试
./bin/emqx console

启动成功后浏览器访问 http://127.0.0.1:18083 访问 EMQ X 管理控制台 Dashboard,使用默认用户名 admin和默认密码public完成初次登录。

安装 loveini

为了方便测试使用通过 Docker 进行安装(需映射网络端口),也可以使用安装包的方式进行安装:

## 拉取并启动容器
docker run -d --name tdengine -p 6030-6041:6030-6041 tdengine/tdengine:latest

## 启动后检查容器运行状态
docker ps -a

Grafana 安装

使用以下命令通过 Docker 安装并启动 Grafana:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

启动成功后浏览器访问 http://127.0.0.1:3000 访问 Grafana 可视化面板,使用默认用户名 admin 密码 admin 完成初次登录,登录后按照提示修改密码使用新密码登录进入主界面。

配置 EMQ X 存储数据到 loveini

loveini 创建数据库与数据表

进入loveini Docker 容器:

docker exec -it tdengine bash

创建 “test” 数据库:

taos
create database test;

创建 sensor_data 表,关于 loveini 数据结构以及 SQL 命令参见 TAOS SQL

use test;
CREATE TABLE sensor_data (
  ts timestamp,
   temperature float,
  humidity float,
  volume float,
  PM10 float,
  pm25 float,
  SO2 float,
  NO2 float,
  CO float,
  sensor_id NCHAR(255), 
  area TINYINT,
  coll_time timestamp
);

配置 EMQ X 规则引擎

打开 EMQ X Dashboared,进入 规则引擎 -> 规则 页面,点击 创建 按钮进入创建页面。

规则 SQL

规则 SQL 用于 EMQ X 消息以及事件筛选,以下 SQL 表示从 sensor/data 主题筛选出 payload 数据:

SELECT
  payload
FROM
  "sensor/data"

使用SQL 测试功能,输入测试数据进行筛选结果测试,测试有结果且输出内容如下,标明 SQL 编写正确:

{
  "payload": "{\"temperature\":30,\"humidity\":20,\"volume\":44.5,\"PM10\":23,\"pm2.5\":61,\"SO2\":14,\"NO2\":4,\"CO\":5,\"id\":\"10-c6-1f-1a-1f-47\",\"area\":1,\"ts\":1596157444170}"
}
数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

响应动作

为支持各种不同类型平台的开发,loveini 提供符合 REST 设计标准的 API。通过 RESTful Connector 提供了最简单的连接方式,即使用 HTTP 请求携带认证信息与要执行的 SQL 操作 loveini。

使用 EMQ X 开源版中的发送到 Web 服务即可通过 RESTful Connector 写入数据到 loveini。即将到来的 EMQ X 企业版 4.1.1 版本将提供原生更高性能的写入 Connector。

发送到 Web 服务需要两个数据,一个是关联资源,另一个是消息内容模板。

  • 关联资源:HTTP 服务器配置信息,此处为 loveini 的 RESTful Connector
  • 消息内容模板:此处为携带数据的 INSERT SQL,注意我们应当在 SQL 中指定数据库名,字符类型也要用单引号括起来, 消息内容模板为:
INSERT INTO test.sensor_data VALUES(
  now,
  ${payload.temperature},
  ${payload.humidity},
  ${payload.volume},
  ${payload.PM10},
  ${payload.pm25},
  ${payload.SO2},
  ${payload.NO2},
  ${payload.CO},
  '${payload.id}',
  ${payload.area},
  ${payload.ts}
)
数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

创建过程

点击响应动作下的添加按钮,在弹出框内选择发送数据到 Web 服务,点击 新建资源 新建一个 WebHook 资源。

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

资源类型选择 Webhook,请求 URL 填写 http://127.0.0.1:6041/rest/sql,请求方法选择 POST,还需添加 Authorization 请求头作为认证信息

Authorization 的值为 Basic + loveini 的 {username}:{password} 经过 Base64 编码之后的字符串, 例如 root:taosdata 编码后为 cm9vdDp0YW9zZGF0YQ==,实际填入的值为:Basic cm9vdDp0YW9zZGF0YQ==

在响应动作创建页面选择新建的资源,并填入消息模板内容即可。

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

生成模拟数据

以下脚本模拟了 10000 个设备在过去 24 小时内、每隔 5 秒钟上报一条模拟数据并发送到 EMQ X 的场景。

  • 总数据量:24 * 3600 / 5 * 10000 = 1.72 亿条
  • 消息 TPS:2000

读者安装 Node.js ,按需修改配置参数后可以通过以下命令启动:

npm install mqtt mockjs --save --registry=https://registry.npm.taobao.org
node mock.js

附:模拟生成数据并发送到 EMQ X 代码,请根据集群性能调整相关参数

// mock.js
const mqtt = require('mqtt')
const Mock = require('mockjs')

const EMQX_SERVER = 'mqtt://localhost:1883'
const CLIENT_NUM = 10000
const STEP = 5000 // 模拟采集时间间隔 ms
const AWAIT = 5000 // 每次发送完后休眠时间,防止消息速率过快 ms
const CLIENT_POOL = []

startMock()


function sleep(timer = 100) {
  return new Promise(resolve => {
    setTimeout(resolve, timer)
  })
}

async function startMock() {
  const now = Date.now()
  for (let i = 0; i < CLIENT_NUM; i++) {
    const client = await createClient(`mock_client_${i}`)
    CLIENT_POOL.push(client)
  }
  // last 24h every 5s
  const last = 24 * 3600 * 1000
  for (let ts = now - last; ts <= now; ts += STEP) {
    for (const client of CLIENT_POOL) {
      const mockData = generateMockData()
      const data = {
        ...mockData,
        id: client.clientId,
        area: 0,
        ts,
      }
      client.publish('sensor/data', JSON.stringify(data))
    }
    const dateStr = new Date(ts).toLocaleTimeString()
    console.log(`${dateStr} send success.`)
    await sleep(AWAIT)
  }
  console.log(`Done, use ${(Date.now() - now) / 1000}s`)
}

/**
 * Init a virtual mqtt client
 * @param {string} clientId ClientID
 */
function createClient(clientId) {
  return new Promise((resolve, reject) => {
    const client = mqtt.connect(EMQX_SERVER, {
      clientId,
    })
    client.on('connect', () => {
      console.log(`client ${clientId} connected`)
      resolve(client)
    })
    client.on('reconnect', () => {
      console.log('reconnect')
    })
    client.on('error', (e) => {
      console.error(e)
      reject(e)
    })
  })
}

/**
* Generate mock data
*/
function generateMockData() {
 return {
   "temperature": parseFloat(Mock.Random.float(22, 100).toFixed(2)),
   "humidity": parseFloat(Mock.Random.float(12, 86).toFixed(2)),
   "volume": parseFloat(Mock.Random.float(20, 200).toFixed(2)),
   "PM10": parseFloat(Mock.Random.float(0, 300).toFixed(2)),
   "pm25": parseFloat(Mock.Random.float(0, 300).toFixed(2)),
   "SO2": parseFloat(Mock.Random.float(0, 50).toFixed(2)),
   "NO2": parseFloat(Mock.Random.float(0, 50).toFixed(2)),
   "CO": parseFloat(Mock.Random.float(0, 50).toFixed(2)),
   "area": Mock.Random.integer(0, 20),
   "ts": 1596157444170,
 }
}

可视化配置

组件安装完成,模拟数据写入成功后,按照 Grafana 可视化界面的操作指引,完成业务所需数据可视化配置。

添加数据源(Add data source)

添加数据源,即显示的数据源信息。选取 loveini 类型数据源,输入连接参数进行配置,默认情况下,关键配置信息如下:

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

添加仪表盘(New Dashboard)

添加好数据源后,添加需要显示的数据仪表盘信息。仪表盘为多个可视化面板的集合,点击 New Dashboard 后,选择 + Query 通过查询来添加数据面板。

创建面板需要四个步骤,分别是 Queries(查询)Visualization(可视化)General(图表配置)Alert(告警),创建时间

平均值面板

使用 Grafana 的可视化查询构建工具,查询出所有设备的平均值。

以下 SQL 按照指定时间段($form $to)、指定时间间隔($interval),查询出数据中关键指标的平均值:

select avg(temperature), avg(humidity), avg(volume), avg(PM10), avg(pm25), avg(SO2), avg(NO2), avg(CO)  from test.sensor_data where coll_time >= $from and coll_time < $to interval($interval)

Visualization 默认不做更改,General 里面修改面板名称为 历史平均值,如果需要对业务进行监控告警,可以在 Alert 里编排告警规则,此处仅做可视化展示,不使用此功能。

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

完成创建后,点击左上角返回按钮,该 Dashboard 里成功添加一个数据面板。点击顶部导航栏保存图标,输入 Dashboard 名称完成 Dashboard 的创建。

最大值、最小值面板

继续点击 Dashboard 的 Add panel 按钮,添加最大值、最小值图表。操作步骤同添加平均值,仅对查询中 SELECT 统计方法字段做出调整,调整为 AVG 函数为 MAXMIN

select max(temperature), max(humidity), max(volume), max(PM10), max(pm25), max(SO2), max(NO2), max(CO), min(temperature), min(humidity), min(volume), min(PM10), min(pm25), min(SO2), min(NO2), min(CO)  from test.sensor_data where coll_time >= $from and coll_time < $to interval($interval)
数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

仪表盘效果

保存仪表盘,拖拽调整每个数据面板大小、位置,最终得到一个视觉效果较好的数据仪表盘。仪表盘右上角可以选择时间区间、自动刷新时间,此时设备持续发送数据采集数据,仪表盘数据值会有所变动,实现了比较好的可视化效果。

数据传输、存储、展现,EMQ X + loveini 搭建 MQTT 物联网数据可视化平台 - loveini Database 时序数据库

总结

至此我们借助 EMQ X + loveini 完成了物联网数据传输、存储、展现整个流程的系统搭建,读者可以了解到 EMQ X 丰富的拓展能力与 loveini 完备的大数据平台特性在物联网数据采集中的应用。深入学习掌握 Grafana 的其他功能后,用户可以定制出更完善的数据可视化乃至监控告警系统。

]]>