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

别再用默认表格了!手把手教你定制SPSS输出样式,打造专属报告模板

别再用默认表格了!手把手教你定制SPSS输出样式,打造专属报告模板 在数据分析领域,SPSS作为经典工具被广泛应用于市场研究、学术论文和商业决策中。然而,许多专业用户长期被一个问题困扰:系统默认生成的表格样式过于基础…...

从OpenClaw到memU Bot:企业级AI代理的记忆优先架构与实战部署

1. 项目概述:从个人助手到企业级AI代理的跃迁如果你和我一样,是OpenClaw的早期用户,那你一定体验过那种“私人AI管家”带来的便利。它能帮你写邮件、查资料、整理文件,就像一个随时待命的数字伙伴。但当我们尝试在团队内部推广&am…...

解锁网络音视频传输:DistroAV插件从零构建高效工作流

解锁网络音视频传输:DistroAV插件从零构建高效工作流 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 在现代直播制作和视频协作场景中,跨设备高质…...

如何用ImageSearch在千万级图库中秒速找到任何图片:新手终极指南

如何用ImageSearch在千万级图库中秒速找到任何图片:新手终极指南 【免费下载链接】ImageSearch 基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享 项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch 你是否曾因为找不到…...

终极Vim分屏体验:vim-airline轻量级状态栏与标签栏全攻略

终极Vim分屏体验:vim-airline轻量级状态栏与标签栏全攻略 【免费下载链接】vim-airline lean & mean status/tabline for vim thats light as air 项目地址: https://gitcode.com/gh_mirrors/vi/vim-airline vim-airline是一款轻量级的Vim状态栏与标签栏…...

从数学定义到代码实现:深度解析卷积与互相关的本质差异

1. 卷积与互相关的数学定义 很多人第一次接触卷积和互相关时,都会觉得它们长得太像了。确实,从表面上看,它们都是用一个滑动窗口在输入数据上移动,然后进行加权求和。但如果你仔细研究它们的数学定义,就会发现本质上的…...

无国界技术创业:构建全球化产品支持与远程协作体系

1. 从“车库”到“云端”:无国界创业的底层逻辑变迁 十年前,如果你在硅谷创立一家芯片设计工具(EDA)或嵌入式软件公司,头两年的客户拜访路线图大概就是101号公路沿线。工程师可以早上开车去圣何塞的客户办公室&#xf…...

Kotlin原生AI Agent框架Koog:多平台、类型安全与生产级实践

1. 从零到一:为什么我们需要一个Kotlin原生的AI Agent框架?如果你是一个长期在JVM生态,特别是Kotlin世界里摸爬滚打的开发者,过去一年里,你肯定没少跟各种AI SDK打交道。无论是OpenAI的官方库,还是LangChai…...

车载项目氛围灯功能——音乐律动

车载项目里面很多用到音乐律动,就是根据音乐的响度和频率,对应氛围灯的亮度和颜色,让人看起来跟着音乐在闪动。本文记录了从FWK的傅里叶函数获取响度和频率的方法,封装了一下工具类,留着以后使用package com.demo.func…...

C#初步认识/入门基础

一、注释/运行/项目介绍1.注释1.// 双斜杠是单行注释,注释代码不会被执行;/* */是多行注释格式。两种均不会被执行;.///三斜杠一般写在方法前//1111/*111*11*////11112.运行2.运行调试 : 实心三角(运行控制台后会消失…...