【开源学习】TB-gateway -- 基本配置与使用

【开源学习】TB-gateway -- 基本配置与使用

  • tb-gateway 安装部署
    • centOS 7 安装(不推荐)
    • Docker 安装(推荐)
  • tb-gateway 通用配置文件
    • 连接配置模块 thingsboard
    • 存储配置模块 storage
    • 远程调用配置模块 grpc
    • 连接器配置模块 connectors
  • tb-gateway 基础使用
    • gateway 连接至 tb
    • mqtt 连接器
      • broker
      • mapping
      • connectRequests
      • disconnectedRequests
      • attributeRequest
      • attributeUpdates
      • serverSideRpc
    • modbus 连接器
      • master
      • slaves
      • attributes
      • timeseries
      • attributeUpdates
      • rpc
      • 参考 -- Modbus functions
      • 参考 -- Data types
    • opcua 连接器
      • server
      • mapping
      • attributes
      • timeseries
      • rpc_methods
      • attributes_updates
  • 自定义连接器
    • 自定义连接器官方示例
    • 自定义连接器配置步骤


更新日志:

  • 20240131 版本:
    • 新增 docker 安装部署时与版本相关的问题;
    • 全部配置文件替换为 tb-gateway 版本 3.4.2,更新配置详解:
      • 主配置文件由 yaml 格式改变为 json 格式配置,可配置内容增加;
      • mqtt 连接器配置内容增加;
      • modbus 连接器配置新增 slave 配置,删除 device 配置;
    • 全部内容重新测试,测试验证图片更新;
    • 新增自定义连接器官方示例的配置测试以及配置步骤总结;
    • 注:3.4 版本 modbus 协议存在问题;3.4.3、3.4.4 版本 opcua 协议存在问题!

tb-gateway 安装部署

官方为 ThingsBoard-Gateway 提供了多种安装部署方案,可以根据不同系统进行安装。

centOS 7 安装(不推荐)

采用 centOS 7 作为部署服务器,具体安装步骤如下(注:采用该方法安装2.7以上版本时存在问题,安装会失败):

  1. 下载 ThingsBoard-Gateway 安装包:

    wget https://github.com/thingsboard/thingsboard-gateway/releases/latest/download/python3-thingsboard-gateway.rpm
    
  2. 使用 yum 工具安装 ThingsBoard-Gateway:

    sudo yum install -y ./python3-thingsboard-gateway.rpm
    
  3. 完成后查看 ThingsBoard-Gateway 的运行状态:

    systemctl status thingsboard-gateway
    

    此时服务运行可能会报错,因为还没有对服务的相关配置进行更改。

Docker 安装(推荐)

服务器安装 docker 后,直接执行以下命令执行安装最新发行版本(本手册版本为 3.4):

docker run -d -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -p 60000-61000:60000-61000 --restart always thingsboard/tb-gateway

其中,-v 指令后冒号之前的文件路径为容器内部文件的挂载位置:

  • ~/.tb-gateway/logs:日志挂载路径;

  • ~/.tb-gateway/extensions:网关扩展目录挂载路径(各种协议连接器);

  • ~/.tb-gateway/config:配置文件挂载路径;

安装完成后,容器将自动启动,此时查看日志将看到网关连接存在错误,需要修改配置文件。

注:使用 docker 进行安装部署时,需要注意 docker 版本问题,不同版本的 docker 可拉取到的最新 tb-gateway 镜像的版本不同! 使用docker --version命令可查看 docker 版本。

  • 使用 docker 版本为 18.03.1-ce 时,tb-gateway 最新版本镜像为 2.9;

  • 使用 docker 版本为时,tb-gateway 最新版本镜像为 3.4.4(截至 2024-01-27);

【2024-01-27】注:版本 3.4.4\3.4.3 在使用 opcua 协议时存在问题。

建议使用 3.4.2 版本!,本文所有测试及配置内容均为 3.4.2 版本。

tb-gateway 通用配置文件

采用 rpm 安装包进行安装的配置文件路径为/etc/thingsboard-gateway/config,使用 docker 安装的配置文件则在宿主机的挂载路径~/.tb-gateway/config。该文件夹内包含有基础配置文件 tb_gateway.json,以及各种协议的配置文件,如 mqtt.json、modbus.json、opcua.json 等。

通用的基础配置文件 tb_gateway.json 用于配置到 thingsboard 平台的连接、存储模式以及各种协议连接器。

连接配置模块 thingsboard

该模块中主要配置网关到平台的连接参数,核心参数包括:

  • host:配置 tb 平台服务器地址;

  • port:配置 tb 平台网关消息接收的端口,默认为 1883(即平台 MQTT 服务器端口);

  • remoteShell:官方未解释,与配置远程 shell 指令相关(后续补充),默认 false;

  • remoteConfiguration:官方未解释,配置是否使用远程配置(3.4.2 以后版本新功能),建议 false;

  • statistics:配置统计收集数据并发送 tb 作为网关设备的属性进行存储(若需要使用的话需要额外的配置文件对要采集的参数进行定义,此处暂不讲解);

    • enable:配置是否启用该功能;

    • statsSendPeriodInSeconds:配置统计收集数据的传输间隔,默认为 3600;

    • configuration:配置采集数据配置文件;

  • deviceFiltering:该功能是可选的,用于配置设备筛选,可以配置筛选允许向 tb 发送数据的设备(若需要使用的话需要额外的配置文件定义筛选设备的规则,此处暂不讲解);

    • enable:配置是否启用该功能;

    • filterFile:配置设备过滤配置文件;

  • maxPayloadSizeBytes:官方未解释,最大的消息负载字节数,默认 1024;

  • minPackSendDelayMS:配置发送数据包之间的延迟,配置过小会导致 CPU 使用量上升;

  • minPackSizeToSend:官方未解释,配置最小的发送数据包大小,默认 500;

  • checkConnectorsConfigurationInSeconds:官方未解释,配置检查连接器配置的时间,默认 60 秒;

  • handleDeviceRenaming:官方未解释;

  • security:安全配置;

    • accessToken:配置 tb 平台上网关设备对应的 token;
  • qos:mqtt 协议消息质量等级,默认为 1;

  • checkingDeviceActivity:该功能是可选的,用于配置监控设备的活动;如果对该部分内容进行了配置,网关将每个一段时间对设备的活动状态进行检查;

    • checkDeviceInactivity:配置是否启用该功能;

    • inactivityTimeoutSeconds:配置设备的活跃超时时间,超过该时间的没有响应的设备将被认为处于非活跃状态,默认 200 秒;

    • inactivityCheckPeriodSeconds:配置设备活跃性检查的周期,默认 500 秒;

存储配置模块 storage

存储配置模块主要用于设置数据发送到 tb 平台之前如何进行保存,即采集数据的持久化配置,tb-gateway 提供了三种持久化的方式,分别为:

  • memory:内存存储,将接收到的数据保存到 RAM 内存中;

  • file:文件存储,将接收到的数据保存到硬盘上;

  • sqlite:sqlite 存储,将接收到的数据保存到 .db 文件中;

通过type参数可以指定上述三种模式,并对各模式中的参数进行配置,网关默认设置为内存存储模式,其可配置参数包括:

  • read_records_count:从存储中获取并发送至 tb 平台的消息数量;

  • max_records_count:存储中可存储的最大消息数量(超出的消息将丢失);

配置示例:

  "storage": {"type": "memory","read_records_count": 100,"max_records_count": 100000}

选用文件存储模式时,其可配置参数包括:

  • data_folder_path

  • max_file_count

  • max_read_records_count

  • max_records_per_file

配置示例:

  "storage": {"type": "file","data_folder_path": "./data/","max_file_count": 10,"max_read_records_count": 10,"max_records_per_file": 10000}

选用 sqlite 存储模式时,其可配置参数包括:

  • data_file_path

  • messages_ttl_check_in_hours

  • messages_ttl_in_days

配置示例:

  "storage": {"type": "sqlite","data_file_path": "./data/data.db","messages_ttl_check_in_hours": 1,"messages_ttl_in_days": 7}

远程调用配置模块 grpc

该模块目前未测试,官方文档未进行解释,待验证;

连接器配置模块 connectors

该模块用于配置要启动的连接器,每一个连接器需要执行下列 3 个参数:

  • useGRPC:可选配置参数,用于配置当前连接器是否开启 rpc 功能,默认为 true;

  • name:指定连接器名称;

  • type:连接器类型;

  • configuration:连接器的配置文件名称;

配置示例:

  "connectors": [{"type": "mqtt","name": "MQTT Broker Connector","configuration": "mqtt.json"},{"type": "modbus","name": "Modbus Connector","configuration": "modbus.json"},{"type": "opcua","name": "OPC-UA Connector","configuration": "opcua.json"}]

tb-gateway 基础使用

gateway 连接至 tb

在修改通用配置文件 tb_gateway.yaml 之前,首先需要在 tb 平台上创建对应的网关设备,如下所示:

在这里插入图片描述

完成网关设备创建后,修改 tb_gateway.yaml 配置文件,配置 host、port 以及 accessToken 字段,分别为 tb 平台的服务地址、tb 平台 MQTT 端口号以及网关设备的访问令牌(设备详情中点击“复制访问令牌”按钮获取,也可自定义,详见 thingsboard 使用手册)。简单的配置示例如下:

{"thingsboard": {"host": "192.168.XX.XXX","port": 1883,"remoteShell": false,"remoteConfiguration": true,"statistics": {"enable": true,"statsSendPeriodInSeconds": 3600},"deviceFiltering": {"enable": false,"filterFile": "list.json"},"maxPayloadSizeBytes": 1024,"minPackSendDelayMS": 200,"minPackSizeToSend": 500,"checkConnectorsConfigurationInSeconds": 60,"handleDeviceRenaming": true,"security": {"type": "accessToken","accessToken": "YqZ0moqfS1srMt4OXDWP"},"qos": 1,"checkingDeviceActivity": {"checkDeviceInactivity": false,"inactivityTimeoutSeconds": 200,"inactivityCheckPeriodSeconds": 500}},"storage": {"type": "memory","read_records_count": 100,"max_records_count": 100000,"data_folder_path": "./data/","max_file_count": 10,"max_read_records_count": 10,"max_records_per_file": 10000,"data_file_path": "./data/data.db","messages_ttl_check_in_hours": 1,"messages_ttl_in_days": 7},"grpc": {"enabled": false,"serverPort": 9595,"keepaliveTimeMs": 10000,"keepaliveTimeoutMs": 5000,"keepalivePermitWithoutCalls": true,"maxPingsWithoutData": 0,"minTimeBetweenPingsMs": 10000,"minPingIntervalWithoutDataMs": 5000,"keepAliveTimeMs": 10000,"keepAliveTimeoutMs": 5000},"connectors": [{"type": "mqtt","name": "MQTT Broker Connector","configuration": "mqtt.json"},{"type": "modbus","name": "Modbus Connector","configuration": "modbus.json"},{"type": "opcua","name": "OPC-UA Connector","configuration": "opcua.json"}]
}

配置完成后保存,并重新启动 tb-gateway 服务。docker 采用以下命令重新启动:

docker restart tb-gateway

rpm 安装使用以下命令重新启动:

systemctl restart thingsboard-gateway

tb 平台设备管理页面查看相应的网关设备状态,状态变更为活跃则网关启动并连接成功,如下图:

在这里插入图片描述

mqtt 连接器

若需要使用 mqtt 连接器连接下层设备,则需要配置 mqtt.json 配置文件,并在 tb_gateway.yaml 启动相应的连接器(打开相应连接器的注释即可)。

mqtt.json 配置文件可配置的内容如下。

broker

该模块用于配置 tb-gateway 到 MQTT broker 服务器的连接,其主要配置属性包括:

  • name:broker 名称,用于日志记录显示等;

  • host:MQTT broker 服务器地址;

  • port:MQTT broker 监听端口;

  • clientId:tb-gateway 连接 MQTT broker 的客户端 id;

  • version:配置 MQTT 协议的 version;

  • maxMessageNumberPerWorker:配置每个 worker 的最大消息数(官方未提及);

  • maxNumberOfWorkers:配置最大 worker 数量(官方未提及);

  • sendDataOnlyOnChange:配置当数据发生变化时才进行转发;

  • security:身份验证配置,用于 tb-gateway 连接 MQTT broker,有 3 种配置模式可供选择:

    • "type": "anonymous":不进行身份验证,配置示例如下:

      "security": {"type": "anonymous"
      }
      
    • "type": "basic":需要配置username以及password用于身份的验证,配置示例如下:

      "security": {"type": "basic","username": "username","password": "password"
      }
      
    • Certificates:采用证书验证,需要配置各个证书的路径,配置示例如下:

      "security":{"caCert": "/etc/thingsboard-gateway/ca.pem","privateKey": "/etc/thingsboard-gateway/privateKey.pem","cert": "/etc/thingsboard-gateway/certificate.pem"
      }
      

broker 配置示例:

  "broker": {"name": "Default Local Broker","host": "192.168.XX.XXX","port": 1883,"clientId": "ThingsBoard_gateway","maxMessageNumberPerWorker": 10,"maxNumberOfWorkers": 100,"security": {"type": "basic","username": "","password": ""}}

mapping

该模块用于配置 tb-gateway 监听的主题,以及将监听数据转换为遥测\属性数据并上报至 tb 平台的格式。mapping是一个列表,其中可以配置子 JSON,每一个都包含一个要监听的主题topicFilter以及消息的转换converter

  • topicFilter:监听的 topic;

  • converter:数据上报格式转换配置;

    • type:传入消息的数据格式,推荐使用json(官方也提供了bytes字节模式和custom自定义模式);

    • deviceNameJsonExpression:从消息中获取设备名称的表达式,用于 tb 平台设备的创建;

    • deviceTypeJsonExpression:从消息中获取设备配置名称的表达式,用于 tb 平台设备的创建;

    • deviceNameTopicExpression:从主题中获取设备名称的表达式,用于 tb 平台设备的创建;

    • deviceTypeTopicExpression:从主题中获取设备配置名称的表达式,用于 tb 平台设备的创建;

    • sendDataOnlyOnChange:配置是否当数据变化时才进行上传,默认为 false;

    • timeout:触发设备断开时间的超时时间;

    • attributes:属性消息列表,包含多个子 JSON,其中的属性的值可以通过特定表达式从设备消息内容当中获取;

      • type:属性的数据类型;

      • key:属性的名称;

      • value:属性的值;

    • timeseries:遥测消息列表,包含多个子 JSON,其中的属性的值可以通过特定表达式从设备消息内容当中获取;

      • type:属性的数据类型;

      • key:属性的名称;

      • value:属性的值;

mapping 配置示例:

  "mapping": [{"topicFilter": "/sensor/data","converter": {"type": "json","deviceNameJsonExpression": "${sensorName}","deviceTypeJsonExpression": "${sensorType}","timeout": 60000,"attributes": [{"type": "string","key": "model","value": "${sensorModel}"},{"type": "string","key": "${sensorModel}","value": "on"}],"timeseries": [{"type": "double","key": "temperature","value": "${temp}"},{"type": "double","key": "humidity","value": "${hum}"},{"type": "string","key": "combine","value": "${hum}:${temp}"}]}},{"topicFilter": "/sensor/+/data","converter": {"type": "json","deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)","deviceTypeTopicExpression": "Thermometer","timeout": 60000,"attributes": [{"type": "string","key": "model","value": "${sensorModel}"}],"timeseries": [{"type": "double","key": "temperature","value": "${temp}"},{"type": "double","key": "humidity","value": "${hum}"}]}}]

数据上报测试:

上述配置中监听了两个主题,分别使用了从消息中获取设备名称、配置和从主题中获取设备名称、配置的方法。

对于从消息中获取设备名称和配置的方法,按照下列主题和消息格式发送设备数据,tb 平台收到对应消息,根据设备名称和配置创建设备,并将属性以及遥测信息进行存储。

在这里插入图片描述

tb 平台查看结果:

在这里插入图片描述
在这里插入图片描述

对于从主题中获取设备名称和配置的方法,按照下列主题和消息格式发送设备数据,tb 平台收到对应消息,根据设备名称和配置创建设备,并将属性以及遥测信息进行存储。

在这里插入图片描述

tb 平台查看结果:

在这里插入图片描述
在这里插入图片描述

connectRequests

该模块用于新设备的连接,通过该模块的配置,网关将接受到新设备的连接并发送至 tb 平台实现设备的创建,同时设备的服务端属性lastConnectTime将更新。

其配置内容与 mapping 中相同,此处不再赘述,配置示例如下:

  "connectRequests": [{"topicFilter": "sensor/connect","deviceNameJsonExpression": "${sensorName}"},{"topicFilter": "sensor/+/connect","deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"}]

设备连接测试:

在这里插入图片描述

disconnectedRequests

该模块用于设备的断开连接,通过该模块的配置,网关将接受到设备断联的信息告知 tb 平台,设备的服务端属性lastDisconnectTime将随之变化(注:设备状态不会实时变化,tb 平台通过定时轮询实现设备状态的改变)。

其配置内容与 mapping 中相同,此处不再赘述,配置示例如下:

  "disconnectRequests": [{"topicFilter": "sensor/disconnect","deviceNameJsonExpression": "${sensorName}"},{"topicFilter": "sensor/+/disconnect","deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"}]

attributeRequest

该模块的配置是可选的,该配置用于设备侧通过网关向 tb 平台发起 rpc 请求,以获取在平台共享属性。其配置内容包括:

  • retain:配置消息是否保留;

  • topicFilter:配置接收设备请求的主题,设备应向该主题发送请求的参数;

  • deviceNameTopicExpression:配置从消息内容中获取设备的名称;

  • attributeNameJsonExpression:配置从消息内容中获取要请求的属性名;

  • topicExpression:配置设备接收请求结果的主题,网关获取到 tb 平台返回的数据后,将从消息中提取相应参数拼接主题并发送消息至该主题;

  • valueExpression:配置设备期望的返回数据的消息格式;

配置示例:

  "attributeRequests": [{"retain": false,"topicFilter": "v1/devices/me/attributes/request","deviceNameJsonExpression": "${sensorName}","attributeNameJsonExpression": "${queryAttribute}","topicExpression": "devices/${deviceName}/attrs","valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"}]

测试示例:

在这里插入图片描述

attributeUpdates

该配置用于订阅设备主动推送的共享属性改变。当配置中的设备的共享属性在 tb 平台端发生修改时,设备可以通过订阅特定主题来及时的获取到对应属性的更改。其配置内容包括:

  • retain:配置消息是否保留;

  • deviceNameFilter:设备名称过滤器,使用正则表达式配置需要监听哪些设备的共享属性变化;

  • attributeFilter:属性名过滤器,使用正则表达式配置要监听的属性名;

  • topicExpression:配置设备接收请求结果的主题,网关获取到 tb 平台返回的数据后,将从消息中提取相应参数拼接主题并发送消息至该主题;

  • valueExpression:用于配置接收属性变化推送的消息格式;

配置示例:

  "attributeUpdates": [{"retain": false,"deviceNameFilter": "sensor.*","attributeFilter": ".*","topicExpression": "sensor/${deviceName}/${attributeKey}","valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"}]

测试示例:

在这里插入图片描述

serverSideRpc

该模块用于配置平台侧通过 tb-gateway 网关向设备传达 rpc 指令,指令存在两种形式,分别为需要回复和不需要回复。该模块的配置内容包括:

  • deviceNameFilter:设备名称过滤器,使用正则表达式配置哪些设备需要接收 rpc 指令;

  • methodFilter:方法名过滤器,使用正则表达式配置需要接收哪些方法的 rpc 指令;

  • requestTopicExpression :请求主题表达式,配置网关接收到 tb 的 rpc 指令后,将指令推送到的主题;

  • responseTopicExpression:响应主题表达式,配置网关订阅的主题,用于接收设备收到 rpc 指令后的响应(对于不需要回复的指令无需配置);

  • responseTimeout:响应超时时间;

  • valueExpression:用于配置网关转发指令给设备的消息格式;

配置示例,分别配置了两种形式的 rpc 指令:

  "serverSideRpc": [{"deviceNameFilter": ".*","methodFilter": "echo","requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}","responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}","responseTimeout": 10000,"valueExpression": "${params}"},{"deviceNameFilter": ".*","methodFilter": "no-reply","requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}","valueExpression": "${params}"}]

测试示例,采用仪表盘的 rpc debug 部件模拟平台向设备发送 rpc 指令(也可以直接调用 API):

需要回复的 rpc 指令测试,需要注意回复主题中的 requestId 需与接收主题当中的保持一致:

在这里插入图片描述

不需要回复的 rpc 指令测试,由网关直接响应已收到:

在这里插入图片描述

modbus 连接器

若需要使用 modbus 连接器连接下层设备,则需要配置 modbus.json 配置文件,并在 tb_gateway.json 启动相应的连接器(打开相应连接器的注释即可)。

modbus.json 配置文件可配置的内容如下(此处主要讲解 modbus tcp 配置)。

注:从3.0版本开始,网关可以作为 Modbus 从站运行。其相关配置在 slave 模块,与 master 模块设置处于并列关系,后续将更新相关配置。

master

该模块中可以定义多个 Modbus slave,每一个 slave 都是一个独立的设备。

配置示例:

"master": {"slaves": [...]
}

slaves

该模块中配置相关的设备信息,实际上就是一个 Modbus slave,其为一个列表,其中可配置多个设备,对于每一个设备,都需要配置如下参数:

  • host:配置 Modbus server 地址;

  • port:配置 Modbus server 连接端口号;

  • type:配置连接类型,包括 tcp、udp 以及 serial 三种模式;

  • method:连接方式,可选择 socket 或者 rtu;

  • timeout:配置连接到 Modbus server 的超时时间,单位为秒;

  • byteOrder:配置寄存器字节的读取顺序,默认为 LITTLE;

  • wordOrder:配置读取多个寄存器时的顺序,默认为 LITTLE;

  • retries:配置是否进行重试,默认为 true;

  • retryOnEmpty:配置数据为空时是否进行重试,默认为 true;

  • retryOnInvalid:配置失败时是否进行重试,默认为 true;

  • pollPeriod:配置数据的拉取周期;

  • unitId:当前 slave 的 Id;

  • deviceName:设备名称,即注册到 tb 平台上的设备名称;

  • sendDataOnlyOnChange:配置是否仅数据变化时发送数据,默认为 true;

  • connectAttemptTimeMs:等待连接周期,单位为毫秒;

  • connectAttemptCount:尝试连接次数,默认为 5;

  • waitAfterFailedAttemptsMs:连接失败后尝试再次连接的等待时间,单位为毫秒;

  • attributes:配置网关向外转发的属性属性;

  • timeseries:配置网关向外转发的遥测数据;

  • attributeUpdates:配置订阅 tb 平台的属性变化;

  • rpc:rpc 指令相关配置;

配置示例如下:

    "slaves": [{"host": "192.168.XX.XXX","port": 502,"type": "tcp","method": "socket","timeout": 35,"byteOrder": "LITTLE","wordOrder": "LITTLE","retries": true,"retryOnEmpty": true,"retryOnInvalid": true,"pollPeriod": 5000,"unitId": 1,"deviceName": "Temp Sensor","sendDataOnlyOnChange": true,"connectAttemptTimeMs": 5000,"connectAttemptCount": 5,"waitAfterFailedAttemptsMs": 300000,"attributes": [...],"timeseries": [...],"attributeUpdates": [...],"rpc": [...]}]

attributes

该模块主要用于配置网关向外转发的属性,配置内容包括:

  • tag:设置属性的 key 值;

  • type:设置属性的类型,可参照本节末尾的属性对应表;

  • functionCode:设置Modbus 函数功能码,可参照本节末尾提供的功能码表;

  • address:设置要读取的起始寄存器位置;

  • registerCount:设置要读取的寄存器数量;

配置示例如下:

        "attributes": [{"tag": "testAttribute","type": "32int","functionCode": 3,"registerCount": 2,"address": 0}]

配置测试:

在这里插入图片描述

在 tb 平台端可以看到对应属性:

在这里插入图片描述

timeseries

该模块主要用于配置网关向外转发的遥测数据,其配置内容与上一小节的 attributes 完全一致,此处不再赘述。

配置示例:

        "timeseries": [{"tag": "testTimeserie1","type": "32int","functionCode": 3,"registerCount": 2,"address": 0},{"tag": "testTimeserie2","type": "64uint","functionCode": 3,"registerCount": 4,"address": 2},{"tag": "testTimeserie3","type": "bytes","functionCode": 3,"registerCount": 1,"address": 6}]

配置测试:

在这里插入图片描述

在 tb 平台端可以看到对应遥测数据:

在这里插入图片描述

attributeUpdates

该模块主要用于配置 tb 平台修改设备的共享属性之后,平台主动推送更改至网关,网关回根据此处的设置将数据更改保存在指定的寄存器,其配置内容与 attributes 完全一致,此处不再赘述,不同的是tag属性配置的是共享属性的属性名。

配置示例:

        "attributeUpdates": [{"tag": "shared_attribute_write","type": "32int","functionCode": 16,"objectsCount": 2,"address": 29}]

配置测试:

在这里插入图片描述
在这里插入图片描述

rpc

该模块用于配置 tb 平台发送 rpc 指令以设置或获取对应寄存器的数据,其配置内容与 attributes 完全一致,此处不再赘述,不同的是此处的tag属性配置的是 tb 端发送请求的方法名。

配置示例:

        "rpc": [{"tag": "setValue","type": "16int","functionCode": 6,"objectsCount": 1,"address": 31},{"tag": "getValueBytes","type": "bytes","functionCode": 3,"objectsCount": 1,"address": 31}]

配置测试,可以通过 tb 部件库提供的 rpc debug 工具测试,也可以直接调接口测试:

在这里插入图片描述

参考 – Modbus functions

Modbus function codeDescription
Read data
1Read Coils
2Read Discrete Inputs
3Read Multiple Holding Registers
4Read Input Registers
Write data:
5Write Coil
6Write Register
15Write Coils
16Write Registers

参考 – Data types

TypeFunction codeObjects countNote
string3-41-…Read bytes from registers and decode it (‘UTF-8’ coding).
bytes3-41-…Read bytes from registers.
bits1-41-…Read coils. If objects count 1 - result will be interpret as a boolean, else the result will be an array with bits.
16int3-41Integer 16 bit.
16uint3-41Unsigned integer 16 bit.
16float3-41Float 16 bit.
32int3-42Integer 32 bit.
32uint3-42Unsigned integer 32 bit.
32float3-42Float 32 bit.
64int3-44Integer 64 bit.
64uint3-44Unsigned integer 64 bit.
64float3-44Float 64 bit.

opcua 连接器

若需要使用 opcua 连接器连接下层设备,则需要配置 opcua.json 配置文件,并在 tb_gateway.json 启动相应的连接器(打开相应连接器的注释即可)。

opcua.json 配置文件可配置的内容如下。

server

该模块用于配置与 opcua server 的连接,其配置内容包括:

  • name:配置 OPC-UA server 名称;

  • url:配置 OPC-UA server 的 url 地址;

  • timeoutInMillis:配置连接到 OPC-UA server 的超时时间;

  • scanPeriodInMillis:配置扫描服务器的周期;

  • disableSubscriptions:配置是否禁用订阅,默认为 false,开启后,网关将订阅感兴趣的节点并等待数据更新;如果为false,网关将以 scanPeriodInMillis 为周期重新扫描 OPC-UA 服务器;

  • subCheckPeriodInMillis:配置检查订阅的周期;

  • showMap:配置在扫描时是否展示节点;

  • security:配置安全策略,可在 Basic128Rsa15、Basic256、Basic256Sha256 进行选择;

  • identity:配置身份验证模式;

    • type: anonymous:匿名认证;

          "identity": {"type": "anonymous"}
      
    • type: username:用户名密码认证;

          "identity": {"username": "user","password": "5Tr0nG?@$sW0rD"}
      
    • type: cert.PEM:证书认证,其中mode字段可选择SignSignAndEncrypt

          "identity": {"type": "cert.PEM","caCert": "etc/thingsboard-gateway/ca.pem","privateKey": "etc/thingsboard-gateway/private_key.pem", "cert": "etc/thingsboard-gateway/cert.pem","mode": "SignAndEncrypt","username": "user","password": "5Tr0nG?@$sW0rD"}
      
  • mapping:进行设备以及数据上报相关信息;

配置示例:

  "server": {"name": "OPC-UA Default Server","url": "192.168.XX.XXX:53530/OPCUA/SimulationServer","timeoutInMillis": 5000,"scanPeriodInMillis": 5000,"disableSubscriptions": false,"subCheckPeriodInMillis": 100,"showMap": false,"security": "Basic128Rsa15","identity": {"type": "anonymous"},"mapping": [...]}

mapping

该模块主要用于配置点位与设备的对应关系,以及配置设备上报的属性、遥测等数据格式等。其配置内容包括:

  • deviceNodePattern:配置设备节点的表达式,用于查找对应节点;

  • deviceNamePattern:配置设备名称的表达式,用于在 tb 平台创建设备;

  • attributes:配置属性上报消息内容;

  • timeseries:配置遥测数据上报消息内容;

  • rpc_methods:配置 rpc 指令相关内容;

  • attributes_updates:配置属性更新订阅相关内容;

配置示例:

    "mapping": [{"deviceNodePattern": "Root\\.Objects\\.Simulation","deviceNamePattern": "OPC-UA Device","attributes": [...],"timeseries": [...],"rpc_methods": [...],"attributes_updates": [...]}]

attributes

该模块用于配置设备属性上报的相关内容,其配置内容包括:

  • key:配置上报属性的名称;

  • path:配置上报属性的值的存储路径;

配置示例:

        "attributes": [{"key": "Triangle","path": "${ns=3;i=1007}"}]

配置测试:

在这里插入图片描述

tb 平台可观察到设备创建并且属性上报成功:

在这里插入图片描述

timeseries

该模块用于配置设备遥测数据上报的相关内容,其配置内容与 attributes 相同,此处不再赘述。

配置示例:

        "timeseries": [{"key": "Counter","path": "${ns=3;i=1002}"},{"key": "Random","path": "${ns=3;i=1003}"}]

配置测试,此处配置方法与 attributes 完全相同,直接查看 tb 平台上报结果:

在这里插入图片描述

rpc_methods

该模块主要用于配置远程 rpc 的方法以及参数,可配置内容包括:

  • method:配置 rpc 方法名供 tb 平台端调用;

  • arguments:配置方法参数,若不配置则接收远程调用的传参;

该模块功能笔者未测试成功,此处给出官方提供的配置示例:

        "rpc_methods": [{"method": "multiply","arguments": [2,4]}]

官方提供的内置 rpc 方法 get\set 来获取\设置属性及遥测数据的方法:

在这里插入图片描述

attributes_updates

该模块用于配置 tb 端设备共享属性的更新订阅,配置内容包括:

  • attributeOnThingsBoard:指定要订阅的 tb 平台设备的属性名称;

  • attributeOnDevice:指定上述属性更新时最新值的存放节点;

配置示例:

        "attributes_updates": [{"attributeOnThingsBoard": "MyDeviceName","attributeOnDevice": "Root\\.Objects\\.Simulation\\.MyDeviceName"}]

配置测试:

在这里插入图片描述

opc server 模拟器查看相应节点值是否随之更新:

在这里插入图片描述

自定义连接器

自定义连接器官方示例

tb-gateway 提供了自定义连接器的示例,该示例允许网关从串口采集数据并将数据处理后形成属性或者遥测数据上报到 tb 平台。

测试使用 tb-gateway 版本为 3.4.2,使用本地源码启动,计算机串口采用虚拟串口工具进行模拟,采用串口调试工具进行数据的发送。

本地源码启动时,需注意:

  • 应注释 tb_gateway_service.py 文件第 193 行的self.__modify_main_config()方法,该方法会读取当前计算机的名称作为连接到 tb 平台的 accessToken,导致主配置文件 tb_gateway.json 中配置的 accessToken 失效,造成鉴权失败问题;

  • 官方提供的自定义连接器示例 custom_serial_connector.py 中,未实现父类的get_config(self)方法,需手动实现。如下配置即可:

        def get_config(self):return self.__config
    
  • 官方提供的自定义连接器示例 custom_serial_connector.py 中,run()方法中第 132 行判断中止字符时,修改为下列字符,否则程序一直在此循环内执行:

    while not self.stopped and received_character != b'n':  # We will read until receive LF symbol
    

官方提供的示例测试如下:

首先修改主配置文件 tb_gateway.json,配置地址、端口、密钥以及 connectors 模块:

  "connectors": [{"name": "Custom Serial Connector","type": "serial","configuration": "custom_serial.json","class": "CustomSerialConnector"}]

设置自定义连接器的配置文件 custom_serial.json,其中的配置与自定义连接器的处理相关,后期都可以自定义使用,此处不展开讲解,可参考如下进行配置:

{"name": "Custom serial connector","devices": [{"name": "CustomSerialDevice1","type": "default","port": "COM2","baudrate": 9600,"converter": "CustomSerialUplinkConverter","telemetry": [{"type": "byte","key": "humidity","untilDelimiter": "\\r"}],"attributes": [{"key": "SerialNumber","type": "string","fromByte": 4,"toByte": -3}],"attributeUpdates": [{"attributeOnThingsBoard": "attr1","stringToDevice": "value = ${attr1}\n"}]}]
}

配置完成后,运行 tb_gateway.py 以启动网关。

配置测试:本地使用虚拟串口工具模拟两个串口 COM1 以及 COM2:COM1 连接串口调试工具,该串口与 COM2 串口连接,COM2 串口被网关占用。如下所示:

在这里插入图片描述

向端口发送数据48\r2430947595\n,自定义连接器将根据转换逻辑进行处理,并封装成标准的格式(由配置文件进行定义,转换逻辑实现)发送至 tb 平台:

在这里插入图片描述
在这里插入图片描述

自定义连接器还提供了设备共享属性更新主动的功能,如下所示:tb 平台对应设备的共享属性更新后,平台通过网关将数据推送至设备,即 COM2 串口,COM2 与 COM1 串口相连,故 COM1 串口收到相应的数据。

在这里插入图片描述

自定义连接器配置步骤

  1. 编辑自定义连接器的配置文件,配置的内容与连接器以及转换器的处理逻辑有关,配置完成后将文件放置 config 文件夹;

  2. 编辑连接器,连接器需要继承官方提供的 Connector 类,用于配置设备的连接;

  3. 编辑转换器,转换器需要继承官方提供的 Converter 类,用于配置设备数据到网关转发数据的格式转换逻辑;

  4. 在 extensions 文件夹中新建文件夹,将自定义的连接器、转换器放在该文件夹内,并添加带有 Licensed 头的__init__.py文件;

  5. 在主配置文件 tb_gateway.json 的连接器模块中配置自定义的连接器,配置内容如下:

    • name:配置连接器名称;

    • type:配置连接器类型,需设置为 extensions 文件夹中存放自定义连接器、转换器的文件夹名称;

    • configuration:配置文件名称;

    • class:配置自定义转换器的类名;

    配置示例如下:

      "connectors": [{"name": "Custom Serial Connector","type": "serial","configuration": "custom_serial.json","class": "CustomSerialConnector"}]
    
  6. 启动网关,进行测试验证即可;

感谢您阅读本文,如果您在阅读过程中发现了任何错误或不准确的内容,请与我联系并提供反馈,我将尽快进行更正和修正。

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

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

相关文章

数据恢复之道:DevicData-P-XXXXXXXX勒索病毒的预防与恢复攻略

尊敬的读者&#xff1a; 随着科技的发展&#xff0c;网络安全问题愈发突出&#xff0c;而勒索病毒作为其中的一种恶意软件&#xff0c;正不断演进成为威胁用户数据安全的严重问题。本文将深入介绍.DevicData-P-XXXXXXXX勒索病毒的特征&#xff0c;提供被感染文件的恢复方法&am…

jupyter python笔记杂乱

问题产生的原因: 无法执行sess.run()的原因是tensorflow版本不同导致的&#xff0c;tensorflow版本2.0无法兼容版本1.0 解决办法: tf.compat.v1.disable_eager_execution() 确保tf’2能运行tf1的代码 notebok打开指定文件夹 直接解决

落地PC ,AI的“iPhone时刻”要来了?

在AI技术浪潮持续翻涌的背景下&#xff0c;近段时间&#xff0c;不断有声音强调“2024年将是AIPC元年”。 为了奔赴这一可以预见的未来&#xff0c;产业链上下游的企业也“干劲十足”。品牌商方面&#xff0c;2024年的国际消费电子展&#xff08;CES&#xff09;上&#xff0c…

Linux 文件IO

目录 linux下的文件分类&#xff1a; 文件描述符原理&#xff1a;&#xff08;底层原理&#xff0c;可跳过&#xff09; 虚拟文件系统&#xff1a; 内存中的inode与磁盘中的inode open函数 函数原型&#xff1a; 形参列表&#xff1a; 代码&#xff1a; close函数 er…

Vue_Router_守卫

路由守卫&#xff1a;路由进行权限控制。 分为&#xff1a;全局守卫&#xff0c;独享守卫&#xff0c;组件内守卫。 全局守卫 //创建并暴露 路由器 const routernew Vrouter({mode:"hash"//"hash路径出现#但是兼容性强&#xff0c;history没有#兼容性差"…

一分钟在SpringBoot项目中使用EMQ

先展示最终的结果: 生产者端: RestController RequiredArgsConstructor public class TestController {private final MqttProducer mqttProducer;GetMapping("/test")public String test() {User build User.builder().age(100).sex(1).address("世界潍坊渤…

中国建设银行,这年终奖噶噶高!!!!(含算法原题)

国企年终 今天刷到一个近期帖子:「中国建设银行&#xff0c;这年终奖噶噶高!!!!」 先撇去具体内容不看&#xff0c;能在自然年的 月初&#xff0c;就把去年的奖金发了的企业&#xff0c;首先值得一个点赞。 再细看内容&#xff0c;年终奖是一个 字头的 位数。 由于国企通常没…

burp靶场--xss下篇【16-30】

burp靶场–xss下篇【16-30】 https://portswigger.net/web-security/all-labs#cross-site-scripting 实验16&#xff1a;允许使用一些 SVG 标记的反射型 XSS ### 实验要求&#xff1a; 该实验室有一个简单的反射型 XSS漏洞。该网站阻止了常见标签&#xff0c;但错过了一些 S…

Excel没有内置统计字数功能,但可以用一些变通的方法

是否需要计算Excel工作簿中某个单元格或单元格范围内的单词数? 出于多种原因,你可能需要计算文本数据中的字数。也许你有逗号分隔的列表,需要计算每个列表中的项目数。 不幸的是,Excel没有内置的单词计数方法。但是有一些聪明的方法可以得到你需要的结果。 这篇文章将向…

三步实现 Sentinel-Nacos 持久化

一、背景 版本&#xff1a;【Sentinel-1.8.6】 模式&#xff1a;【Push 模式】 参照官网介绍&#xff1a;生产环境下使用Sentinel &#xff0c;规则管理及推送模式有以下3种模式&#xff1a; 比较之后&#xff0c;目前微服务都使用了各种各样的配置中心&#xff0c;故采用Pus…

springboot综合案例(一)

文章目录 前言项目开发流程需求分析库表设计编码环节环境搭建mybatis的配置jsp模版引擎的配置日志的配置基本项目工程的配置 功能实现用户注册实现验证码功能实现用户注册 用户登录功能员工列表实现员工信息增删查改员工增加信息员工修改信息删除员工信息 前言 我具体用一个小…

【springboot图书个性化推荐系统】

前言 &#x1f31e;博主介绍&#xff1a;✌全网粉丝15W,CSDN特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战&#xff0c;以及程序定制化开发、全栈…

WindTerm 安装使用教程

一、WindTerm 功能介绍 WindTerm 是一款 Github 上开源的 SSH 终端工具&#xff0c;它是完全可以比肩 MobaXterm 工具的。其支持的系统及功能如下&#xff1a; 功能支持&#xff1a; SSHTelnetShellTCPSerialSFTPCmdPowerShellGit 二、WindTerm 官网下载 有两种获取方法&…

SpringBoot集成MongoDB(3)|(MongoTemplate的List操作)

SpringBoot集成MongoDB&#xff08;3&#xff09;|&#xff08;MongoTemplate的List操作&#xff09; 文章目录 SpringBoot集成MongoDB&#xff08;3&#xff09;|&#xff08;MongoTemplate的List操作&#xff09;[TOC] 前言一、场景说明一、向数组字段添加元素二、从数组中删…

机器学习 低代码 ML:PyCaret 的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

VirtualBox中Ubuntu硬盘扩容

1.选中要扩容的虚拟机点击属性按钮&#xff0c;选择存储后点击控制器&#xff1a;STAT右边的 按钮 2.创建虚拟硬盘 在弹出框中选择创建按钮&#xff0c;选择VDI后点击下一步按钮 选择动态分配后点击下一步按钮 3.设置文件位置和大小 选择要保存的虚拟硬盘文件路径&#xff0c…

会计试算平衡

目录 一. 试算平衡的意义二. 试算平衡的原理和内容三. 试算平衡表 \quad 一. 试算平衡的意义 \quad ①验证错误 ②便于编制会计报表 试算表根据各分类账借贷余额汇总编制而成&#xff0c;依据试算表编制会计报表将比直接依据分类账来编制更为方便,拥有大量分类账的企业尤为便捷…

basic CNN

文章目录 回顾卷积神经网络卷积卷积核卷积过程卷积后图像尺寸计算公式&#xff1a;代码 padding代码 Stride代码 MaxPooling代码 一个简单的卷积神经网络用卷积神经网络来对MINIST数据集进行分类如何使用GPU代码 练习 回顾 下面这种由线形层构成的网络是全连接网络。 对于图像…

分治 (地毯填补问题)

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里&#xff0c;有一座宫殿。宫殿里有个四四方方的格子迷宫&#xff0c;国王选择驸马的方法非常特殊&#xff0c;也非常简单&#xff1a;公主就站在其中一个方格子上&#xff0c;只要谁能用地毯将除公主站立的地方外的所有地…

万户 ezOFFICE DocumentEdit_unite.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…