当前位置: 首页 > news >正文

本地编译运行Thingsboard-gateway之python版本——modbus数据采集

1、ideal 我用的是2020版本,这个关系不大,随便
Thingsboard-gateway之python版本源码拉取(老版本是java写的,新版都是python写的)
地址:git clone https://github.com/thingsboard/thingsboard-gateway.git

python        尽量选取3.9以上,我用的python3.11
地址:Welcome to Python.org

2、在正式开始运行前,先配置好环境变量,主要是python

3、安装python的虚拟环境,以便隔离

# 安装virtualenv

pip install virtualenv

激活virtualenv:

在.\venv\Scripts目录下运行activate,类似下面的进入虚拟环境里

同时按照依赖pip install -r requirements.txt

4、到 thingsboard_gateway 目录下运行python tb_gateway.py

cd到thingsboard_gateway目录,再输入python tb_gateway.py回车执行命令

如遇错误ModuleNotFoundError: No module named 'thingsboard_gateway'

pip install  thingsboard_gateway 

启动出现Cannot load GRPC connector! 错误,目前先不管这个

启动后出现下面错误应该是读取的地址没有,增加相应的地址就可以了

modbus_connector 625 - Reading failed for device Temp Sensor function code 4 address 18 unit id 1

pymodbus.exceptions.ModbusIOException: Modbus Error: [Input/Output] [WinError 10054] 远程主机强迫关闭了一个现有的连接

运行正常后如下

5、配置modbus slave

正常后有下面的遥感数据

6、附tb_gateway.json文件

{"thingsboard": {"host": "localhost","port": 1883,"remoteShell": true,"remoteConfiguration": true,"latencyDebugMode": false,"statistics": {"enable": true,"statsSendPeriodInSeconds": 60,"configuration": null,"commands": []},"deviceFiltering": {"enable": false,"filterFile": "list.json"},"maxPayloadSizeBytes": 8196,"minPackSendDelayMS": 50,"minPackSizeToSend": 500,"checkConnectorsConfigurationInSeconds": 60,"handleDeviceRenaming": true,"security": {"type": "accessToken","accessToken": "fUe9wLhHKikn2rZayxxq"},"qos": 1,"checkingDeviceActivity": {"checkDeviceInactivity": false,"inactivityTimeoutSeconds": 200,"inactivityCheckPeriodSeconds": 500},"rateLimits": "DEFAULT_TELEMETRY_RATE_LIMIT","dpRateLimits": "DEFAULT_TELEMETRY_DP_RATE_LIMIT","messagesRateLimits": "DEFAULT_MESSAGES_RATE_LIMIT","deviceMessagesRateLimits": "DEFAULT_MESSAGES_RATE_LIMIT","deviceRateLimits": "DEFAULT_TELEMETRY_RATE_LIMIT","deviceDpRateLimits": "DEFAULT_TELEMETRY_DP_RATE_LIMIT"},"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": true,"serverPort": 9595,"keepAliveTimeMs": 10001,"keepAliveTimeoutMs": 5000,"keepAlivePermitWithoutCalls": true,"maxPingsWithoutData": 0,"minTimeBetweenPingsMs": 10000,"minPingIntervalWithoutDataMs": 5000},"connectors": [{"type": "modbus","name": "test","configuration": "test.json"}]
}

6、附test.json文件

{"master": {"slaves": [{"host": "127.0.0.1","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": [{"tag": "string_read","type": "string","functionCode": 4,"objectsCount": 4,"address": 1},{"tag": "bits_read","type": "bits","functionCode": 4,"objectsCount": 1,"address": 5},{"tag": "16int_read","type": "16int","functionCode": 4,"objectsCount": 1,"address": 7},{"tag": "32int_read_divider","type": "32int","functionCode": 4,"objectsCount": 2,"address": 8,"divider": 10},{"tag": "32int_read","type": "32int","functionCode": 4,"objectsCount": 2,"address": 11},{"tag": "64int_read","type": "64int","functionCode": 4,"objectsCount": 4,"address": 13}],"timeseries": [{"tag": "16uint_read","type": "16uint","functionCode": 4,"objectsCount": 2,"address": 18},{"tag": "32uint_read","type": "32uint","functionCode": 4,"objectsCount": 4,"address": 20},{"tag": "64uint_read","type": "64uint","functionCode": 4,"objectsCount": 1,"address": 24},{"tag": "16float_read","type": "16float","functionCode": 4,"objectsCount": 1,"address": 25},{"tag": "32float_read","type": "32float","functionCode": 4,"objectsCount": 2,"address": 26},{"tag": "64float_read","type": "64float","functionCode": 4,"objectsCount": 4,"address": 28}],"attributeUpdates": [{"tag": "shared_attribute_write","type": "32int","functionCode": 6,"objectsCount": 2,"address": 29}],"rpc": [{"tag": "setValue","type": "bits","functionCode": 5,"objectsCount": 1,"address": 31},{"tag": "getValue","type": "bits","functionCode": 1,"objectsCount": 1,"address": 31},{"tag": "setCPUFanSpeed","type": "32int","functionCode": 16,"objectsCount": 2,"address": 33},{"tag": "getCPULoad","type": "32int","functionCode": 4,"objectsCount": 2,"address": 35}]}]},"slave": {"type": "tcp","host": "127.0.0.1","port": 502,"method": "socket","deviceName": "Modbus Slave Example","deviceType": "default","pollPeriod": 5000,"sendDataToThingsBoard": false,"byteOrder": "LITTLE","wordOrder": "LITTLE","unitId": 0,"values": {"holding_registers": {"attributes": [{"address": 1,"type": "string","tag": "sm","objectsCount": 1,"value": "ON"}],"timeseries": [{"address": 2,"type": "16int","tag": "smm","objectsCount": 1,"value": 12334}],"attributeUpdates": [{"tag": "shared_attribute_write","type": "32int","functionCode": 6,"objectsCount": 2,"address": 29,"value": 1243}],"rpc": [{"tag": "setValue","type": "16int","functionCode": 5,"objectsCount": 1,"address": 31,"value": 22}]},"coils_initializer": {"attributes": [{"address": 5,"type": "8int","tag": "coil","objectsCount": 1,"value": 0}],"timeseries": [],"attributeUpdates": [],"rpc": []}}},"id": "d6e9ec17-f8ef-46f9-ab4b-7ec671ae01df"
}

相关文章:

本地编译运行Thingsboard-gateway之python版本——modbus数据采集

1、ideal 我用的是2020版本,这个关系不大,随便 Thingsboard-gateway之python版本源码拉取(老版本是java写的,新版都是python写的) 地址:git clone https://github.com/thingsboard/thingsboard-gateway.git…...

京东笔试题

和谐敏感词 🔗 题目地址 🎉 模拟 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String s scanner.next();String[] words new String[…...

URP学习(一)

URP是unity出的比较简单的可供改造引擎渲染管线的流程。能实现用较低的代价消耗实现较好的效果。 现记录学习: 一.如何设置URP关键 这步结束后材质会被替换 加package Create/Rendering/URP Universal Rendering Setting设置为urp 材质也需要urp目录下的 几种…...

Linux中修改和查看Redis的内存大小

目录 一:修改redis内存大小1. 编辑配置文件2. 在命令行修改 二:查看redis内存大小1. get maxmemory2. info memory 一:修改redis内存大小 1. 编辑配置文件 sudo vim /etc/redis/redis.conf maxmemory 300MB1、Redis可用内存大小只能是整数&…...

uniapp中的页面跳转

1. uni.navigateTo用于跳转到应用内的某个非tabBar页面,并且会保留当前页面,将其推入页面栈中。 uni.navigateTo({url: path/to/page // 替换为你要跳转的页面路径 }); 2. uni.redirectTo 用于关闭当前页面,重定向到应用内的某个非tabBar页面…...

Redis|延迟双删策略的优点和缺点是什么?

延迟双删策略是什么? 延迟双删策略是一种保证缓存与数据库数据一致性的方法,特别适用于高并发场景下的缓存更新。其核心思想是:在更新数据库时,不仅删除一次缓存,还在短时间后再进行一次延迟删除,以避免并…...

【计算机网络 - 基础问题】每日 3 题(五十二)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...

LogStash架构分析

一、什么是LogStash LogStash 是一个类似实时流水线的开源数据传输引擎,它像一个两头连接不同数据源的数据传输管道,将数据实时地从一个数据源传输到另一个数据源中。在数据传输的过程中,LogStash 还可以对数据进行清洗、加工和整理&#xf…...

2024最新最全【大模型学习路线规划】零基础入门到精通!,大模型学习干货分享,总结的太详细了

第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模型的关键技术和工…...

QT界面开发:图形化设计、资源文件添加

设计界面介绍 此时我们创建项目时就可以选择添加UI选项了。 添加完之后,我们可以看到,文件中多出了一个存放界面文件的目录,下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。 我们点击界面文件中的.ui文件,我们可以…...

科大讯飞:成本降低 60%,性能提升 10 倍,从 ES Loki 到 Apache Doris 可观测性存储底座升级

导读:科大讯飞星际日志中心经历了从 Elasticsearch 到 Loki,再到 Apache Doris 的可观测性存储分析底座升级,支持可观测三大支柱 Log Trace Metrics 的存储与分析,有效解决 Elasticsearch 成本高、Loki 查询慢的问题。Doris 能够在…...

ISO26262在汽车领域的意义

ISO 26262在汽车领域的意义非常重大,主要体现在以下几个方面: 一、提高汽车功能安全性 统一标准:ISO 26262是汽车电子系统的功能安全标准,为汽车制造商、供应商和相关行业提供了统一的框架和指南,确保汽车电子系统和软…...

11. 事件机制

① 事件模式必须基于 PSR-14 去实现。 ② Hyperf 的事件管理器默认由 hyperf/event 实现,该组件亦可用于其它框架或应用,只需通过 Composer 将该组件引入即可,默认已安装。 composer require hyperf/event一、概念 事件模式是一种非常适用于解耦的机制,分别存在以下 3 种角…...

MySQL 本地社区版安装(不登录) mysql官网链接

一、官网下载 官方地址 https://www.mysql.com/downloads/ 打开后先选择downloads 拉到最后选择 MySQL 社区版 然后继续选择社区版 在这此可以选择新版 选择 archives 可以选择其他版本下载 这里选择下面第一个就可以了 直接选择下载 下载后是安装包 直接双击安装 二…...

Redis Search系列 - 第三讲 拼写检查

拼写检查 - Spellchecking & Dict Spellchecking为拼写错误的搜索词提供建议。例如,术语“reids”可能是“redis”的拼写错误版本。 从v1.4开始,Redis Search可以为拼写错误的查询术语(term)生成替代的方案。拼写错误的术语是…...

Golang | Leetcode Golang题解之第492题构造矩形

题目: 题解: func constructRectangle(area int) []int {w : int(math.Sqrt(float64(area)))for area%w > 0 {w--}return []int{area / w, w} }...

Axure重要元件三——中继器函数

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器函数 主要内容:Item、Reperter、TargetItem 1、中继器的函数:Item\Reperter\TargetItem Item item:获取…...

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号,可以选择只下载 2. 进…...

JavaScript 第23章:WebSocket 与实时通讯

在JavaScript中使用WebSocket进行实时通信是一个非常实用且强大的功能。下面我们将详细介绍WebSocket协议的基础知识、如何使用WebSocket对象以及如何构建一个简单的实时通信应用。 WebSocket 协议 WebSocket是一个在单个TCP连接上进行全双工通信的协议。WebSocket使得数据可…...

简单汇编教程10 数组

目录 实践:相加连续的数 数组是在内存中连续的一串变量。我这样说,可能你已经想到的大致的定义了: NUMBERS DW 34, 45, 56, 67, 75, 89 现在我们就定义了一个Number数组,里面存放的连续的六个数字:34, 45, 56, …...

Jsoup在Java中:解析京东网站数据

对于电商网站如京东来说,其页面上的数据包含了丰富的商业洞察。对于开发者而言,能够从这些网站中提取有价值的信息,进行分析和应用,无疑是一项重要的技能。本文将介绍如何使用Java中的Jsoup库来解析京东网站的数据。 Jsoup简介 …...

SQL 干货 | SQL 反连接

最强大的 SQL 功能之一是 JOIN 操作,它提供了一种优雅而简单的方法,将一个表中的每一条记录与另一个表中的每一条记录结合起来。不过,有时我们可能想从一个表中找到另一个表中没有的值。正如我们将在今天的博客文章中看到的,通过包…...

JSON 反对序列化 public final class LocalDateTime 日期格式错误

错误日志为: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDateTime (no Creators, like default construct, exist): no String-argument constructor/factory meth…...

Java 集合

1. 集合框架概述 集合框架(Collection Framework) 是 Java 中为处理一组对象而设计的一套标准化 API,它包括一组通用的接口、实现类和算法。这些接口和类为各种数据结构和操作方法提供了统一的实现方式,使得开发者可以轻松地对数…...

爬虫日常实战

爬取美团新闻信息,此处采用两种方法实现: 注意点:因为此处的数据都是动态数据,所以一定要考虑好向下滑动数据包会更新的情况,不然就只能读取当前页即第一页数据,方法一通过更新ajax数据包网址页数&#xf…...

复写零--双指针

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理分析 三&#xff1a;代码编写 void duplicateZeros3(vector<int>& arr) {int dest -1, cur 0, n arr.size();//1.找到要复写的最后一个数字while …...

跟着小土堆学习pytorch(二)——TensorBoard和Transform

文章目录 一、TensorBoard1.1 add_scalar()1.1,1 报错&#xff1a;TypeError: MessageToJson() got an unexpected keyword argument including_default_value_fields1.1.2 图像重叠1.1.3 代码展示 1.2 add_image()1.2.1 代码 二、transform2.1 介绍——对图片进行一些变化2.2 …...

自由学习记录(10)

Sprite Packer ~Mode & 图集 packer Project Setting经常是金屋藏娇 创建的项目如果不是2d项目&#xff0c;则默认disable打包 编辑模式就是你没点运行看游戏效果&#xff0c;在狼狈敲码创对象写逻辑的那个状态&#xff0c; 运行模式从点了|>之后&#xff0c;就一直…...

Redis提供了专门的命令来实现自增操作

Redis中的自增操作并不是直接通过CAS&#xff08;Compare and Set&#xff09;操作实现的。Redis提供了专门的命令来实现自增操作&#xff0c;这些命令能够确保操作的原子性&#xff0c;而不需要显式地使用CAS机制。 Redis中的自增操作 Redis中的自增操作主要依赖于以下几个命…...

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…...