我是 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}")
此后,我看到的只是发送到资产的最后一个点。
您遇到的问题(仅将最后一个遥测点发送到资产)可能源于您在循环中管理
ts
(时间戳)和 pos
变量的方式。以下是潜在问题和解决方案的细分:
重用
ts
而不增加:
ts = ts
,它实际上什么也不做。您需要确保每个遥测条目的时间戳正确递增。使用
pos
进行索引:
pos
来索引 route_points_lon
,但您需要确保 pos
已正确初始化并且不超过经度列表的长度。遥测列表初始化:
telemetry
初始化为空列表。发送遥测数据:
这是代码片段的更正版本:
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
列表的长度相等,以避免任何索引错误。