thingsboard 和 thingsboard gatway部署
时间: 2025-05-21 15:31:27 浏览: 23
### 关于 ThingsBoard 和 ThingsBoard Gateway 的部署教程
#### 一、ThingsBoard 安装与配置
ThingsBoard 是一个开源物联网平台,支持多种设备连接协议以及数据可视化功能。以下是基于 Docker 的安装方法:
1. **Docker 环境准备**
- 确保已安装 Docker 及其相关组件。
- 使用以下命令拉取官方镜像并启动容器:
```bash
docker run -d --name thingsboard \
-p 9090:9090 \
-e SPRING_DATASOURCE_URL=jdbc:mysql://mysql_host:3306/thingsboard?serverTimezone=UTC&useLegacyDatetimeCode=false \
-e SPRING_DATASOURCE_USERNAME=mysql_username \
-e SPRING_DATASOURCE_PASSWORD=mysql_password \
thingsboard/tb-postgres
```
2. **数据库设置**
- 如果未指定 MySQL 数据库,默认会使用内置 H2 数据库[^3]。
3. **访问 Web 控制台**
- 默认情况下,Web 控制台可通过 `http://<服务器IP>:9090` 访问。
- 初始管理员账户为 `[email protected]`/`tenant`.
---
#### 二、ThingsBoard Gateway 部署
ThingsBoard Gateway 主要用于处理不同通信协议的数据转发至 ThingsBoard 平台。以下是具体步骤:
1. **环境依赖**
- Python 版本需大于等于 3.8。
- 安装 pip 工具以管理 Python 库。
2. **获取源码**
- 前往 GitHub 获取最新版本的 ThingsBoard Gateway 源码:
```bash
git clone https://github.com/thingsboard/thingsboard-gateway.git
cd thingsboard-gateway
```
3. **构建项目**
- 推荐使用 IDE 如 PyCharm 或 IntelliJ IDEA 进行开发调试[^1]。
- 构建完成后可直接运行脚本文件:
```bash
python main.py
```
4. **Docker 方式部署**
- 若希望简化操作流程,可以采用 Docker 部署方案:
```bash
docker run -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 \
--restart always \
thingsboard/tb-gateway
```
5. **网关设备注册**
- 登录 ThingsBoard 后端控制台,在“Devices”页面创建一个新的网关设备实例[^2]。
6. **配置扩展插件**
- 编辑位于 `/config/tb_gateway.yaml` 文件中的参数,定义目标协议及其映射关系。
- 支持 OPC UA, Modbus, MQTT 等主流工业标准接口[^4]。
7. **测试连通性**
- 开启服务后验证消息推送逻辑是否正常工作。
---
#### 三、常见问题排查
- **Python 虚拟环境冲突**
当前环境中可能存在多个版本的解释器,请确认所使用的路径指向正确位置。
- **日志分析困难**
查看存储目录下的 log 文件夹内容以便定位异常原因。
- **网络权限不足**
修改防火墙策略允许必要的端口开放范围。
---
### 示例代码片段
以下是一个简单的自定义扩展实现案例(假设针对 OPC-UA 协议):
```python
from opcua import Client
import logging
logging.basicConfig(level=logging.INFO)
class CustomOpcUaClient(Client):
def __init__(self, url="opc.tcp://localhost:4840"):
super().__init__(url=url)
def connect_and_read(self, node_id):
try:
self.connect()
var = self.get_node(node_id)
value = var.get_value()
return {"node": str(var), "value": value}
except Exception as e:
logging.error(f"Error occurred while reading {node_id}: {str(e)}")
finally:
self.disconnect()
if __name__ == "__main__":
client = CustomOpcUaClient()
result = client.connect_and_read("ns=2;i=2")
print(result)
```
---
阅读全文
相关推荐


















