ThingsBoard IoT Gateway是什么

浏览量:1,293

文档日期:2021/10/25
作者:栗浩


1. ThingsBoard IoT Gateway核心概念

ThingsBoard IoT Gateway是一个由ThingsBoard官方原创且开源的物联网软网关使用且仅使用MQTT协议与TB平台(ThingsBoard IoT Platform)进行通讯,为TB平台提供支持更多协议的数据收集功能和可能的设备管理功能,允许各类设备提交数据至TB平台。


2. ThingsBoard官方对Gateway的说明

2.1 什么是ThingsBoard IoT Gateway

Thingsboard IoT Gateway是一个开源的解决方案,它允许你将连接到传统系统和第三方系统的设备与Thingsboard集成。

Thingsboard是一个开源的物联网平台,用于数据收集、处理、可视化和设备管理。如果你是新的平台用户,请参阅什么是Thingsboard?

TB官方常用"Thingsboard"指代TB平台("Thingsboard IoT Platform"),虽然自称开源,但部分重要功能并不开源

2.2 ThingsBoard物联网网关提供以下功能:

  • MQTT连接器:用于控制、配置和收集来自使用现有协议连接到外部MQTT Broker的物联网设备的数据。
  • OPC-UA连接器:从连接到OPC-UA服务器的物联网设备收集数据。
  • Modbus连接器:从通过Modbus协议连接的物联网设备中收集数据。
  • BLE连接器:从使用Bluetooth Low Energy协议连接的物联网设备中收集数据。
  • Request连接器从具有HTTP(S)API端点的物联网设备中收集数据。
  • CAN连接器:从通过CAN协议连接的物联网设备中收集数据。
  • BACnet连接器:从通过BACnet协议连接的物联网设备中收集数据。
  • ODBC连接器:从ODBC数据库收集数据。
  • REST连接器:创建端点并从传入的HTTP请求中收集数据。
  • SNMP连接器:从SNMP管理器收集数据。
  • FTP连接器:从FTP服务器收集数据
  • 自定义连接器:从通过不同协议连接的物联网设备 [^从通过不同协议连接的物联网设备]收集数据。(你可以为需要的协议创建你自己的连接器)。
  • 持久收集数据:保证在网络或硬件故障的情况下的数据交付。
  • 自动重新连接到ThingsBoard集群。
  • 将传入的数据和消息映射统一格式,简单而强大。
    从通过不同协议连接的物联网设备: 默认的自定义连接器仅支持串口(Serial)通信,不符合实际需要。

2.3 TB官宣架构

2.3.1 网关架构图

关于网关官方架构图: 官方的架构图有诸多细节与实际不符,深入了解时请参考本文中的《实际》 。

2.3.2 平台架构图

对平台架构图的解读:

  • 设备/数据源 不通过TB网关,与TB平台直接连接是可能的
  • TB平台仅支持部分协议的通讯,如果 设备/数据源 需要通过其它协议与平台相连,此时需要TB网关
  • TB官方对其网关的解释为"支持Modbus、OPC-UA、BLE、CAN、MQTT、HTTP和其它协议"
  • TB平台支持外部系统以REST APIWebSockets的方式与TB平台交互
  • TB平台支持外部系统以TB平台中的规则引擎(Rule Engine, 有时也被开发人员用Rule Chain(规则链)指代)的方式与TB平台交互
  • 整个架构中,数据的长期持久化存储发生在TB平台的数据库内。TB平台使用的数据库为PostgreSQLTimescale或Cassandra

2.3.3 架构

物联网网关是一个软件组件,旨在运行在支持Python 3.5以上的基于Linux的微型计算机上 [基于Linux的微型计算机上]。ThingsBoard物联网网关的主要组件如上所示。

基于Linux的微型计算机上: 并不是仅基于Linux。由于Python这一编程语言的特性,我们既可以在各操作系统上直接使用Python运行网关代码,也可以在各操作系统中运行被打包成容器的网关。

2.3.4 连接器

该组件的目的是连接到外部系统(如MQTT代理或OPC-UA服务器)或直接连接到设备(如Modbus、BLE或CAN)。一旦连接,连接器要么从这些系统中轮询数据,要么订阅更新。轮询与订阅取决于协议的能力。例如,我们对MQTT连接器使用订阅模式,对Modbus和CAN使用轮询。连接器也能够直接或通过外部系统 [直接或通过外部系统]向设备推送更新。
直接或通过外部系统: 取决于协议、网关连接器的实现、对应协议的设备本身是否支持这么做。

可以使用定制指南 来定义你自己的连接器。
所谓的《定制指南》并不好用,过量的细节并未被解释且与实际可能不符

2.3.5 转换器

转换器负责将数据从特定协议格式转换为ThingsBoard格式转换器是由连接器调用的。转换器通常是针对连接器支持的协议,有上行链路和下行链路[^上行链路和下行链路]转换器。上行链路转换器用于将数据从特定协议转换为ThingsBoard格式。下行链路转换器用于将信息从ThingsBoard格式转换为特定的协议格式。
上行链路和下行链路: 各协议的转换器不一定同时具备上行链路转换器和下行链路转换器。

可以使用定制指南 定义自己的转换器。

2.3.6 事件存储

事件存储用于临时存储由连接器产生的遥测和其他事件,直到它们被传递到 ThingsBoard。事件存储支持两种实现方式:内存队列和持久性文件存储。这两种实现方式都能确保在网络中断的情况下,你的设备数据最终能得到传递。内存队列最大限度地减少了IO操作,但在网关进程重新启动的情况下可能会丢失信息
持久性文件存储在进程重启后仍然存在,但会对文件系统执行IO操作

2.3.7 ThingsBoard客户端

网关通过MQTT协议与ThingsBoard进行通信,并使用这里描述的API。ThingsBoard客户端是一个独立的线程,一旦与ThingsBoard的连接处于活动状态,它就会轮询事件存储并传递消息。
ThingsBoard客户端支持对连接的监控,为提高性能而对事件进行批处理以及许多其他功能。

2.3.8 网关服务

网关服务负责连接器、事件存储和ThingsBoard客户端的启动。该服务收集并定期向ThingsBoard报告有关传入信息和连接设备的统计数据。网关服务保存连接设备的列表,以便在网关重新启动的情况下能够重新订阅设备配置更新。


3. 实际

官方的架构图有诸多细节未被提到甚至与实际不符,经常导致人在阅读时发生理解错误甚至被误导。对于这些细节,以下是更真实也更实际的网关架构图:

关于这些"细节":

  • TB网关中的持久性存储(Persistent Storage)的数据来源为各连接器对网关总控的send_to_storage(connector_name, data_to_send)的调用,并非名为"IoT Gateway"的网关总控
  • 运行时,同一个协议,可能有多个连接器对象甚至连接器类(Connector)。、
  • 如果连接器的实际开发人员不采用特殊设计,各连接器对象的线程(Thread)相互独立[^连接器线程]。
  • 每个连接器对象的配置取决于其配置文件,各协议所使用的连接器对象的名称、数量、相应的连接器类(class)、配置文件名称等四者的信息位于网关配置文件(tb_gateway.yaml)
  • 网关配置文件(tb_gateway.yaml)内并不包含网关日志配置,但启用网关的远程配置时,平台向网关下发的配置却必须包含网关日志配置
  • 与网关相连的"Devices"的范围,在概念上包括了很多常识上可能并不被认为是"设备"的东西,比如:database、webserver、broker

连接器线程: 连接器的线程问题在开发时如果不被注意,确实可能导致各连接器的数据并不安全,TB网关和TB平台对此有专门的处理方式。


4. 参考

ThingsBoard IoT Gateway官方在线文档:https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/

留下评论