ThingsBoard实战:从零到一,构建你的第一个物联网数据驾驶舱

最近在帮一个做智能农业的朋友搭建监控系统,他们手头有几十个温湿度传感器和土壤墒情仪,数据零零散散地分布在不同的Excel表格里,每次分析都要手动合并,效率低不说,还容易出错。我给他推荐了ThingsBoard,结果他用了不到一周就告诉我:“这东西太方便了,现在所有数据都能在一个页面上实时看到,还能设置报警,再也不用半夜爬起来看数据了。”

如果你也在为物联网设备的数据管理头疼,无论是工业现场的PLC、楼宇里的智能电表,还是实验室里的各种传感器,ThingsBoard都能帮你把这些分散的数据源整合到一个统一的平台上。今天我就结合自己踩过的坑,带你从零开始,用最实际的方式搭建一个可用的ThingsBoard环境,并完成设备接入和数据可视化。

1. 环境准备:避开那些让人抓狂的配置陷阱

很多人一上来就想着用Docker一键部署,这确实方便,但如果你对底层配置不熟悉,一旦出现问题,排查起来会非常困难。我建议第一次部署时,还是从源码编译开始,这样你能清楚地知道每个组件的作用。

1.1 系统与依赖检查

ThingsBoard官方推荐使用Linux系统,Ubuntu 20.04 LTS或CentOS 7是比较稳妥的选择。Windows环境下也能运行,但可能会遇到一些路径和权限问题。

首先检查你的系统是否满足以下最低要求:

  • 内存:至少4GB RAM(生产环境建议8GB以上)
  • 存储:20GB可用空间
  • Java:OpenJDK 11(这是关键,不要用Java 8或更高版本)
  • 数据库:PostgreSQL 11+ 或 TimescaleDB(用于时序数据)

安装Java时最容易出问题的是版本不匹配。我曾经遇到过因为Java版本不对,导致编译时各种奇怪的错误。用下面的命令确认你的Java版本:

java -version

你应该看到类似这样的输出:

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode)

如果版本不对,在Ubuntu上可以用以下命令安装OpenJDK 11:

sudo apt update
sudo apt install openjdk-11-jdk

注意:有些系统可能同时安装了多个Java版本,记得用update-alternatives --config java选择正确的版本。

1.2 数据库配置:时序数据存储的选择

ThingsBoard支持多种数据库组合,但最常见的搭配是:

  • PostgreSQL:存储设备元数据、用户信息、规则链配置等
  • Cassandra/TimescaleDB:存储时序数据(遥测数据)

对于中小规模的应用(设备数<1000,数据点<100万/天),我推荐使用TimescaleDB,它是PostgreSQL的时序数据库扩展,管理起来比Cassandra简单得多。

安装TimescaleDB(以Ubuntu为例):

# 添加TimescaleDB的APT源
echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list

# 导入GPG密钥
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -

# 更新并安装
sudo apt update
sudo apt install timescaledb-2-postgresql-13

安装完成后,需要调整PostgreSQL的配置:

sudo timescaledb-tune --quiet --yes
sudo systemctl restart postgresql

然后创建ThingsBoard需要的数据库和用户:

sudo -u postgres psql

在PostgreSQL命令行中执行:

CREATE DATABASE thingsboard;
CREATE USER thingsboard WITH PASSWORD 'your_strong_password';
GRANT ALL PRIVILEGES ON DATABASE thingsboard TO thingsboard;
\c thingsboard
CREATE EXTENSION IF NOT EXISTS timescaledb;

提示:生产环境一定要用强密码,不要用默认的postgres用户,这是最基本的安全措施。

2. 源码编译与部署:不只是运行,更要理解

直接从GitHub拉取源码编译,虽然耗时较长(第一次可能需要30分钟以上),但能让你对ThingsBoard的架构有更深入的理解。

2.1 获取源码与编译

# 克隆仓库
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard

# 切换到稳定版本(避免使用master分支,可能有未知问题)
git checkout release-3.4.4

# 编译(跳过测试以加快速度)
mvn clean install -DskipTests

编译过程中最常见的两个问题:

  1. Maven依赖下载失败:国内网络访问Maven中央仓库可能很慢,建议配置阿里云镜像。编辑~/.m2/settings.xml:
<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>
  1. 内存不足:编译ThingsBoard需要较多内存,如果遇到java.lang.OutOfMemoryError,可以设置Maven的内存参数:
export MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m"

编译成功后,你会在application/target/目录下找到打包好的文件:

  • thingsboard-3.4.4-boot.jar:单体架构的可执行JAR
  • thingsboard-3.4.4.war:用于部署到Tomcat的WAR包

2.2 配置文件调整

ThingsBoard的配置文件位于application/src/main/resources/目录,但实际部署时,我们通常使用外部配置文件。创建一个新的配置文件目录:

mkdir -p ~/.thingsboard/conf
cp application/src/main/resources/thingsboard.yml ~/.thingsboard/conf/

编辑~/.thingsboard/conf/thingsboard.yml,关键配置如下:

server:
  address: "0.0.0.0"  # 监听所有网络接口
  port: "8080"         # HTTP端口
  
spring:
  datasource:
    driverClassName: "org.postgresql.Driver"
    url: "jdbc:postgresql://localhost:5432/thingsboard"
    username: "thingsboard"
    password: "your_strong_password"
    
thingsboard:
  database:
    ts_type: "timescale"  # 使用TimescaleDB
    ts:
      url: "jdbc:postgresql://localhost:5432/thingsboard"
      username: "thingsboard"
      password: "your_strong_password"

这里有一个容易忽略的细节:数据库连接池配置。默认配置可能不适合高并发场景,建议根据你的设备数量调整:

spring:
  datasource:
    hikari:
      maximum-pool-size: 50          # 最大连接数
      minimum-idle: 10               # 最小空闲连接
      connection-timeout: 30000      # 连接超时(ms)
      idle-timeout: 600000           # 空闲超时(ms)
      max-lifetime: 1800000          # 最大生命周期(ms)

2.3 启动与初始化

使用编译好的JAR文件启动:

java -jar application/target/thingsboard-3.4.4-boot.jar \
    --spring.config.location=file:~/.thingsboard/conf/thingsboard.yml

第一次启动时,ThingsBoard会自动初始化数据库表结构。这个过程可能需要几分钟,请耐心等待。看到以下日志表示启动成功:

2024-01-15 10:30:45,123 [main] INFO  o.t.ThingsboardServerApplication - Started ThingsboardServerApplication in 45.678 seconds (JVM running for 46.123)

现在打开浏览器访问http://你的服务器IP:8080,使用默认账号登录:

  • 用户名:sysadmin@thingsboard.org
  • 密码:sysadmin

重要安全提醒:登录后第一件事就是修改默认密码!在系统设置中创建一个新的管理员账号,然后禁用或修改默认的sysadmin账号。

3. 设备接入实战:MQTT协议深度解析

ThingsBoard支持多种协议接入设备,其中MQTT是最常用的一种。它不仅轻量,而且支持发布/订阅模式,非常适合物联网场景。

3.1 设备创建设备档案

在ThingsBoard中,每个设备都需要先创建"设备档案",这相当于给设备发一个"身份证"。进入"设备"页面,点击"+"添加设备:

  • 名称:给设备起个容易识别的名字,如"车间1-温湿度传感器"
  • 类型:可以按功能分类,如"temperature_sensor"
  • 标签:用于快速筛选和分组,可以添加"车间1"、"温湿度"等标签

创建完成后,ThingsBoard会为设备生成两个重要的凭证:

  • 访问令牌:用于MQTT连接的身份验证
  • 设备ID:设备的唯一标识

把这些凭证保存好,设备端连接时需要用到。

3.2 MQTT连接代码示例

下面是一个Python的MQTT客户端示例,模拟一个温湿度传感器上报数据:

import paho.mqtt.client as mqtt
import json
import time
import random

# ThingsBoard服务器信息
THINGSBOARD_HOST = "你的服务器IP"
ACCESS_TOKEN = "设备的访问令牌"

# 创建MQTT客户端
client = mqtt.Client()

# 设置访问令牌
client.username_pw_set(ACCESS_TOKEN)

def on_connect(client, userdata, flags, rc):
    """连接回调函数"""
    if rc == 0:
        print("连接成功")
    else:
        print(f"连接失败,错误码: {rc}")

def on_publish(client, userdata, mid):
    """发布消息回调函数"""
    print(f"消息已发送,消息ID: {mid}")

# 设置回调函数
client.on_connect = on_connect
client.on_publish = on_publish

# 连接到ThingsBoard
client.connect(THINGSBOARD_HOST, 1883, 60)

# 启动网络循环(非阻塞)
client.loop_start()

try:
    while True:
        # 模拟传感器数据
        temperature = round(20 + random.uniform(-2, 2), 2)
        humidity = round(50 + random.uniform(-10, 10), 2)
        
        # 构建数据负载
        payload = {
            "temperature": temperature,
            "humidity": humidity,
            "active": True
        }
        
        # 发布到遥测主题
        client.publish("v1/devices/me/telemetry", json.dumps(payload), qos=1)
        print(f"已发送数据: {payload}")
        
        # 等待5秒
        time.sleep(5)
        
except KeyboardInterrupt:
    print("程序终止")
finally:
    client.loop_stop()
    client.disconnect()

这段代码有几个关键点需要注意:

  1. QoS级别:MQTT支持三种服务质量级别:

    • QoS 0:最多一次,不保证送达
    • QoS 1:至少一次,保证送达但可能重复
    • QoS 2:恰好一次,保证送达且不重复

    对于物联网数据,通常使用QoS 1就足够了。

  2. 主题格式:v1/devices/me/telemetry是ThingsBoard规定的遥测数据主题,me会自动替换为当前设备的ID。

  3. 数据格式:支持JSON对象或数组格式。如果设备有时间戳,可以这样发送:

{
  "ts": 1673769600000,
  "values": {
    "temperature": 22.5,
    "humidity": 45.3
  }
}

3.3 属性上传与查询

除了遥测数据,设备还可以上传属性(相对静态的数据,如固件版本、地理位置等):

# 上传客户端属性
attributes_payload = {
    "firmware_version": "1.2.3",
    "location": "车间1-东墙",
    "serial_number": "SN2023123456"
}
client.publish("v1/devices/me/attributes", json.dumps(attributes_payload), qos=1)

# 请求共享属性(从服务器端设置的属性)
client.publish("v1/devices/me/attributes/request/1", '{"sharedKeys": "alarm_threshold"}', qos=1)

设备也可以订阅属性更新,当服务器端修改设备属性时,设备能实时收到通知:

def on_message(client, userdata, msg):
    """消息到达回调函数"""
    print(f"收到消息: {msg.topic} {str(msg.payload)}")

# 订阅属性更新
client.subscribe("v1/devices/me/attributes", qos=1)
client.on_message = on_message

4. 规则引擎:让数据流动起来

规则引擎是ThingsBoard最强大的功能之一,它允许你定义数据处理的逻辑链,而无需编写代码。

4.1 规则链基础概念

规则链由多个规则节点组成,每个节点执行特定的操作。数据从输入节点开始,按照连接线流向各个处理节点。

常见的规则节点类型:

节点类型功能描述典型应用场景
消息类型切换根据消息类型路由到不同分支区分遥测数据和属性更新
脚本过滤器使用JavaScript过滤消息只处理特定条件的数据
属性集添加或修改消息属性给数据打标签、添加时间戳
保存遥测存储数据到数据库所有遥测数据的持久化
保存属性存储属性到数据库设备属性的更新
REST API调用调用外部HTTP接口与第三方系统集成
发送邮件发送电子邮件通知报警通知
创建告警生成设备告警阈值超限报警

4.2 实战:温度异常报警规则链

假设我们要监控温度传感器,当温度超过30℃时发送邮件报警。创建规则链的步骤如下:

  1. 添加"消息类型切换"节点:过滤出遥测数据
  2. 添加"脚本过滤器"节点:检查温度是否超过阈值
  3. 添加"创建告警"节点:生成告警记录
  4. 添加"发送邮件"节点:发送通知

关键的是脚本过滤器的代码:

// 检查温度是否超过30℃
if (typeof msg.temperature !== 'undefined') {
    return msg.temperature > 30;
}
return false;

这个脚本会检查消息中是否有temperature字段,并且值是否大于30。只有满足条件的数据才会继续向下流动。

4.3 高级:设备状态监控

除了简单的阈值报警,我们还可以监控设备的在线状态。ThingsBoard提供了"设备活动"事件,当设备断开连接或恢复连接时会触发。

创建一个设备状态监控规则链:

  1. 使用"设备活动事件"节点作为输入
  2. **添加"脚本过滤器"**区分连接和断开事件:
// 判断是连接事件还是断开事件
if (msg.eventType === 'CONNECT') {
    // 设备上线
    return true;
} else if (msg.eventType === 'DISCONNECT') {
    // 设备离线
    return true;
}
return false;
  1. 对于断开事件,可以添加延迟节点(比如5分钟),如果设备在5分钟内没有重连,再触发报警
  2. 添加"保存属性"节点更新设备的最后在线时间
  3. 添加"发送邮件"节点通知运维人员

这样就能实现设备离线报警,并且避免短暂的网络抖动误报。

5. 数据可视化:打造专业级仪表盘

ThingsBoard的可视化功能非常强大,提供了30多种内置组件,还能自定义开发。

5.1 基础仪表盘创建

创建一个温湿度监控仪表盘:

  1. 添加时间序列图表:显示温度变化曲线

    • 数据源:选择你的温度传感器设备
    • 键:选择temperature字段
    • 聚合函数:AVG(平均值)
    • 时间间隔:1分钟
  2. 添加仪表盘组件:显示当前温度

    • 类型:数字卡片
    • 数据源:同上
    • 值:temperature的最新值
    • 单位:°C
  3. 添加报警列表:显示当前活跃的报警

    • 数据源:所有设备
    • 过滤条件:状态 = ACTIVE

5.2 高级功能:地图可视化

如果你的设备有地理位置信息,可以创建地图视图:

  1. 添加地图组件到仪表盘
  2. 配置设备数据源:
    • 选择包含经纬度属性的设备
    • 位置源:从设备属性获取(如latitude, longitude)
  3. 自定义标记图标:根据设备类型或状态显示不同图标
  4. 添加点击事件:点击设备标记时显示详细信息

这里有一个实用的技巧:使用设备属性来存储地理位置信息,而不是每次发送遥测数据都包含经纬度。这样可以减少数据传输量,只在位置变化时更新。

5.3 实时控制面板

除了数据展示,仪表盘还可以实现设备控制。比如创建一个灯光控制面板:

  1. 添加开关组件
  2. 配置RPC命令:
// 开关组件的数据源配置
rpcEnabled: true,
rpcCommand: 'setSwitchState',
rpcValueKey: 'switchState'
  1. 在设备端实现RPC处理:
def on_rpc_request(client, userdata, msg):
    """处理RPC请求"""
    request = json.loads(msg.payload.decode())
    
    if request['method'] == 'setSwitchState':
        # 执行开关操作
        switch_state = request['params']
        print(f"设置开关状态: {switch_state}")
        
        # 返回执行结果
        response = {
            "device": request['device'],
            "id": request['id'],
            "data": {"success": True}
        }
        client.publish(f"v1/devices/me/rpc/response/{request['id']}", 
                      json.dumps(response), qos=1)

# 订阅RPC请求
client.subscribe("v1/devices/me/rpc/request/+", qos=1)

这样用户就可以在仪表盘上直接控制设备,实现真正的双向交互。

6. 性能优化与生产部署

当你的设备数量增加到几百甚至上千时,就需要考虑性能优化了。

6.1 数据库优化

对于TimescaleDB,有几个关键的优化点:

  1. 分区策略:时序数据按时间分区,建议按月或按周分区
-- 创建超表时指定分区间隔
SELECT create_hypertable('ts_kv', 'ts', 
    chunk_time_interval => INTERVAL '7 days',
    create_default_indexes => FALSE);
  1. 索引优化:为常用的查询字段创建索引
-- 设备ID和时间戳的复合索引
CREATE INDEX idx_ts_kv_device_id_ts ON ts_kv (entity_id, ts DESC);

-- 键和时间的索引(如果经常按特定指标查询)
CREATE INDEX idx_ts_kv_key_ts ON ts_kv (key, ts DESC);
  1. 数据保留策略:自动删除旧数据
-- 保留最近90天的数据
SELECT add_retention_policy('ts_kv', INTERVAL '90 days');

6.2 ThingsBoard配置优化

编辑thingsboard.yml中的性能相关配置:

thingsboard:
  transport:
    mqtt:
      # 增加MQTT处理线程数
      netty:
        boss_group_thread_count: 4
        worker_group_thread_count: 16
        
  queue:
    # 调整队列配置
    rule-engine:
      poll-interval: 50
      pack-processing-timeout: 60000
      submit-strategy:
        type: "BURST"
        batch-size: 1000
      processing-strategy:
        type: "SKIP_ALL_FAILURES"
        retries: 3
        failure-percentage: 0
        pause-between-retries: 3
        max-pause-between-retries: 3

6.3 微服务架构部署

对于大规模部署(设备数>5000),建议使用微服务架构。ThingsBoard的微服务架构将不同功能拆分为独立的服务:

  • tb-core:核心服务,处理设备连接、规则引擎等
  • tb-rule-engine:专门处理规则链
  • tb-transport:处理协议转换(MQTT、CoAP、HTTP)
  • tb-web-ui:前端界面服务

部署微服务架构需要一定的运维经验,但能提供更好的扩展性和容错性。每个服务都可以独立扩缩容,比如在设备连接数激增时,可以单独增加tb-transport服务的实例。

7. 安全加固:保护你的物联网平台

物联网平台一旦部署到生产环境,安全就是重中之重。

7.1 网络层安全

  1. 使用HTTPS:配置SSL证书,加密Web界面通信
server:
  ssl:
    enabled: true
    key-store: "/path/to/keystore.p12"
    key-store-password: "your_keystore_password"
    key-store-type: "PKCS12"
    key-alias: "thingsboard"
  1. MQTT over TLS:启用MQTT的TLS加密
# 生成自签名证书(测试用)
openssl req -new -x509 -days 365 -nodes \
  -out /etc/thingsboard/mqttserver.crt \
  -keyout /etc/thingsboard/mqttserver.key

在配置文件中启用:

thingsboard:
  transport:
    mqtt:
      ssl:
        enabled: true
        key-store: "/etc/thingsboard/mqttserver.p12"
        key-store-password: "mqtt_password"

7.2 应用层安全

  1. 强密码策略:修改默认密码,启用密码复杂度要求
  2. 双因素认证:为管理员账号启用2FA
  3. API访问限制:限制API的调用频率
  4. 审计日志:启用操作审计,记录所有重要操作

7.3 数据安全

  1. 数据加密:敏感数据在数据库中加密存储
  2. 访问控制:基于角色的权限管理(RBAC)
  3. 数据隔离:多租户环境下的数据完全隔离

8. 故障排查与日常维护

即使配置得再好,实际运行中也可能遇到问题。这里分享几个我遇到过的典型问题及解决方法。

8.1 设备连接失败

症状:设备无法连接到MQTT服务器

排查步骤:

  1. 检查网络连通性:telnet 服务器IP 1883
  2. 检查ThingsBoard服务状态:systemctl status thingsboard
  3. 查看日志:tail -f /var/log/thingsboard/thingsboard.log
  4. 检查防火墙设置:sudo ufw status

常见原因:

  • 防火墙阻止了1883端口
  • MQTT服务未启动
  • 访问令牌错误

8.2 数据存储异常

症状:设备数据能收到但无法查询历史数据

排查步骤:

  1. 检查数据库连接:sudo -u postgres psql -d thingsboard
  2. 检查磁盘空间:df -h
  3. 查看数据库日志:tail -f /var/log/postgresql/postgresql-13-main.log

常见原因:

  • 数据库磁盘已满
  • TimescaleDB扩展未正确安装
  • 数据库用户权限不足

8.3 性能下降

症状:界面响应慢,数据延迟高

排查步骤:

  1. 监控系统资源:top、htop
  2. 检查数据库性能:pg_stat_statements
  3. 分析慢查询:EXPLAIN ANALYZE

优化建议:

  • 增加数据库内存:shared_buffers = 4GB
  • 优化查询:避免全表扫描
  • 增加索引:对常用查询字段建立索引

8.4 定期维护任务

为了保持系统稳定运行,建议设置以下定期任务:

  1. 每日检查:

    • 服务状态:所有ThingsBoard相关服务是否运行正常
    • 磁盘空间:数据库和日志磁盘使用情况
    • 错误日志:检查是否有新的错误出现
  2. 每周任务:

    • 数据库备份:pg_dump thingsboard > backup.sql
    • 日志清理:删除旧的日志文件
    • 性能分析:检查慢查询,优化索引
  3. 每月任务:

    • 系统更新:安全补丁和版本更新
    • 容量规划:根据增长趋势规划资源扩容
    • 安全审计:检查访问日志,排查异常访问

9. 扩展与集成:让ThingsBoard发挥更大价值

ThingsBoard本身功能已经很强大了,但通过集成其他系统,可以构建更完整的解决方案。

9.1 与消息队列集成

对于高吞吐量的场景,可以将ThingsBoard与Kafka集成,实现数据缓冲和异步处理:

thingsboard:
  queue:
    type: "kafka"
    kafka:
      bootstrap-servers: "localhost:9092"
      topic-properties:
        partitions: 10
        replication-factor: 1
      other-properties:
        acks: "all"
        retries: 3

9.2 与数据分析平台集成

将ThingsBoard的数据实时推送到数据分析平台,如Apache Flink或Spark:

// 在规则链中添加REST API调用节点
var url = "http://flink-jobmanager:8081/jobs";
var data = {
  "temperature": msg.temperature,
  "humidity": msg.humidity,
  "timestamp": Date.now()
};

return {
  url: url,
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify(data)
};

9.3 自定义插件开发

如果内置功能不能满足需求,可以开发自定义插件。ThingsBoard支持两种插件:

  • 规则节点插件:扩展规则引擎功能
  • 小部件插件:扩展仪表盘组件

开发规则节点插件的基本步骤:

  1. 创建Maven项目,添加ThingsBoard依赖
  2. 实现TbNode接口
  3. 打包为JAR文件
  4. 上传到ThingsBoard的插件目录
  5. 在规则链中启用新节点

10. 实际案例:智能农业监控系统

最后分享一个真实的案例,这是我为一个草莓种植园搭建的监控系统。

需求分析:

  • 监控10个大棚的温湿度、土壤湿度、光照强度
  • 自动控制通风、灌溉、遮阳网
  • 异常情况报警(短信+微信)
  • 生产数据统计分析

解决方案:

  1. 设备层:每个大棚部署4个传感器(温湿度、土壤湿度、光照、CO₂)
  2. 传输层:使用LoRa网关收集数据,通过4G上传到ThingsBoard
  3. 平台层:ThingsBoard处理数据、执行规则、提供可视化
  4. 应用层:微信小程序供农户查看数据和控制设备

关键配置:

  • 使用规则链实现智能控制:当温度>28℃且湿度<60%时自动开启喷雾降温
  • 创建日报表:每天自动生成各大棚的环境数据报告
  • 集成短信网关:当设备离线超过30分钟时发送报警短信

实施效果:

  • 人工巡检减少80%
  • 水电消耗降低15%
  • 草莓产量提高12%
  • 质量问题减少30%

这个案例展示了ThingsBoard在实际生产中的价值。它不仅仅是一个数据展示工具,更是连接物理世界和数字世界的桥梁。

我在实际部署中发现,很多用户最初只把ThingsBoard当作一个数据看板,但随着使用的深入,逐渐发现了规则引擎、设备管理、多租户等功能的强大之处。真正用好ThingsBoard的关键是要有清晰的业务逻辑,知道数据从哪里来,要到哪里去,中间需要做什么处理。

如果你刚开始接触ThingsBoard,建议从小规模开始,先接入几个设备,熟悉整个流程,再逐步扩大规模。遇到问题时,多查看官方文档和社区讨论,大多数常见问题都有解决方案。最重要的是保持耐心,物联网系统的搭建和优化是一个持续的过程,需要根据实际运行情况不断调整和完善。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐