如何在 Thingsboard 中打印路线

问题描述 投票:0回答:1

我是 Thinsboard 的新手。目前,我创建了一个仪表板,其中显示 2 个位置(枢纽)和一辆车。但是,我正在尝试显示一条路线,但我不确定如何显示。

我目前的方法如下:

我基于JSON创建一个路由,如下:

 "route":{
            "name": "Route for Working Plan 1",
            "num_route": 0,
            "pos":  0,
            "arrival_time": "",
            "departure_time": "",
            "arr_veh_weight": 0.0,
            "dep_veh_weight": 0.0,
            "arrive_veh_items": 0,
            "dep_veh_items": 0,
            "accu_distance_km": 0.0,
            "point_List":
              "(41.6721, -0.8899), (41.6705, -0.8902), (41.6688, -0.8904), (41.6672, -0.8907), (41.6656, -0.8909), (41.6639, -0.8912), (41.6623, -0.8914), (41.6607, -0.8917), (41.6590, -0.8919), (41.6574, -0.8922), (41.6558, -0.8924), (41.6542, -0.8927), (41.6525, -0.8929), (41.6509, -0.8932), (41.6493, -0.8934), (41.6476, -0.8937), (41.6460, -0.8939), (41.6444, -0.8942), (41.6427, -0.8944), (41.6411, -0.8947)"
        }

然后,我使用时间戳发送遥测数据:

 telemetry = []

        ts = int(time.time() * 1000)
        for route_point in route_points_lat:
            ts = ts

            telemetry.append({
                "ts": ts,
                "values": {
                    "latitude": route_point,
                    "longitude": route_points_lon[pos]
                }
            })

            pos += 1
            ts += 1000
 
            ...
        try:
            route_point_tb_asset = API.find_asset(route.name)
            send_telemetry_asset(token, route_point_tb_asset.id.id, telemetry)
            print(f"Telemetry properly sent to {route.name}")

此后,我看到的只是发送到资产的最后一个点。

如何实现路线显示?我想要的是这样的: enter image description here

python iot thingsboard
1个回答
0
投票

您遇到的问题(仅将最后一个遥测点发送到资产)可能源于您在循环中管理

ts
(时间戳)和
pos
变量的方式。以下是潜在问题和解决方案的细分:

潜在问题

  1. 重用

    ts
    而不增加

    • 在你的循环中,你有
      ts = ts
      ,它实际上什么也不做。您需要确保每个遥测条目的时间戳正确递增。
  2. 使用

    pos
    进行索引:

    • 您正在使用
      pos
      来索引
      route_points_lon
      ,但您需要确保
      pos
      已正确初始化并且不超过经度列表的长度。
  3. 遥测列表初始化:

    • 确保在循环开始之前将
      telemetry
      初始化为空列表。
  4. 发送遥测数据:

    • 确保在完全填充遥测数据后发送遥测数据,而不是在一次迭代后发送。

修改后的代码示例

这是代码片段的更正版本:

import time

# Assuming route_points_lat and route_points_lon are defined and have the same length
route_points_lat = [41.6721, 41.6705, 41.6688, 41.6672, 41.6656]  # Example latitudes
route_points_lon = [-0.8899, -0.8902, -0.8904, -0.8907, -0.8909]  # Example longitudes

telemetry = []

# Initialize timestamp
ts = int(time.time() * 1000)

# Ensure pos starts at 0
pos = 0

# Loop through latitude points
for route_point in route_points_lat:
    telemetry.append({
        "ts": ts,
        "values": {
            "latitude": route_point,
            "longitude": route_points_lon[pos]
        }
    })

    # Increment pos for longitude indexing
    pos += 1
    
    # Increment timestamp by 1000 milliseconds (1 second)
    ts += 1000 

# Sending telemetry after building the complete list
try:
    route_point_tb_asset = API.find_asset(route.name)
    send_telemetry_asset(token, route_point_tb_asset.id.id, telemetry)
    print(f"Telemetry properly sent to {route.name}")
except Exception as e:
    print(f"Error sending telemetry: {e}")

做出的关键更改

  • 时间戳管理:时间戳现在会随着每次迭代正确递增。

  • 位置索引

    pos
    变量正确递增,以确保其正确索引到经度列表中。

  • 遥测构建:遥测数据在发送前完整构建,避免发送不完整的数据。

通过这些调整,您的代码现在应该发送所有遥测点,而不仅仅是最后一个。确保

route_points_lat
route_points_lon
列表的长度相等,以避免任何索引错误。

© www.soinside.com 2019 - 2024. All rights reserved.