当前位置: 首页 > 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, …...

跨设备滚动优化:Scroll Reverser让macOS操作效率提升80%的效率工具

跨设备滚动优化:Scroll Reverser让macOS操作效率提升80%的效率工具 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在当今多设备办公环境中,Mac用户常常面…...

SenseVoice-small语音识别实战案例:教育行业课堂录音自动字幕生成

SenseVoice-small语音识别实战案例:教育行业课堂录音自动字幕生成 1. 项目背景与需求场景 在教育信息化快速发展的今天,越来越多的课堂内容被录制下来用于学生复习、教师培训和质量评估。然而,海量的课堂录音面临着转写效率低、成本高、多语…...

水墨江南模型生成作品效果展示:极简山水与诗意融合

水墨江南模型生成作品效果展示:极简山水与诗意融合 最近试用了不少AI绘画模型,但能真正抓住中式美学神韵的,确实不多。直到我遇见了这个“水墨江南”模型,它生成的作品让我眼前一亮——那种留白的意境、水墨的晕染感,…...

实战应用:基于快马构建多维智能限流系统,精细化管控API访问

在构建现代Web服务时,API限流是保障系统稳定性的重要防线。最近我在处理一个电商平台的流量管控需求时,深刻体会到"rate limit exceeded"不仅是简单的错误提示,更是系统自我保护的关键机制。下面分享如何用InsCode(快马)平台快速搭…...

29、【Agent】【OpenCode】模型配置(OpenCode Zen)(二)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】模型配…...

SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决

SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决 1. 模型简介与核心价值 SeqGPT-560M是阿里达摩院推出的零样本文本理解模型,这个560M参数量的轻量级模型专门针对中文场景优化,无需训练就能直接处理文本分类和信息抽取任…...

3步解决AEUX图层对齐问题的完整指南

3步解决AEUX图层对齐问题的完整指南 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX AEUX作为连接设计工具与After Effects的桥梁,是设计师实现高效工作流的关键。然而在实际…...

OpenClaw团队协作版:ollama-QwQ-32B支持多人任务队列的改造

OpenClaw团队协作版:ollama-QwQ-32B支持多人任务队列的改造 1. 为什么我们需要团队协作版的OpenClaw 上周我们小组遇到了一个典型问题:三个人同时使用同一台机器上的OpenClaw实例时,任务开始互相干扰。最严重的一次,A同事的自动…...

Stateflow进阶:巧用‘历史节点’与‘内部转移’,实现带记忆功能的嵌入式状态机

Stateflow进阶:巧用‘历史节点’与‘内部转移’,实现带记忆功能的嵌入式状态机 在嵌入式系统开发中,状态机设计往往面临一个关键挑战:如何在系统重启或断电后恢复之前的工作状态?传统解决方案通常依赖外部存储或默认状…...

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警 1. 为什么需要自动化网站监控 上周我负责的一个项目突然出了状况——客户官网的产品价格页面被意外修改,导致大量用户投诉。团队花了整整两天才发现问题根源。这件事让我意识到,对于…...