feat(detection): 将检测结果通过MQTT发送而不是HTTP请求
- 移除原有的HTTP POST请求逻辑
- 添加MQTT客户端连接检查
- 构造ai/task/{taskid}/achievement主题用于发布消息
- 使用json.dumps序列化负载数据并确保ASCII字符正确处理
- 添加MQTT消息发布状态检查和错误处理
- 记录MQTT消息发送成功或失败的日志信息
- 当MQTT客户端未连接时跳过消息发送并记录警告
main
parent
8fa0757c3a
commit
44daee9f95
|
|
@ -822,14 +822,23 @@ class DetectionThread(threading.Thread):
|
|||
if self.latest_drone_data:
|
||||
payload["drone_info"] = self.latest_drone_data
|
||||
|
||||
headers = {"Content-Type": "application/json"}
|
||||
# 设置较短的超时时间
|
||||
response = requests.post(self.res_api, json=payload, headers=headers, timeout=5)
|
||||
# 发送MQTT消息
|
||||
if self.mqtt_client and self.mqtt_connected:
|
||||
try:
|
||||
# 构造MQTT主题
|
||||
mqtt_topic = f'ai/task/{self.taskid}/achievement'
|
||||
|
||||
if response.status_code == 200:
|
||||
logger.debug(f"已上传帧至 MinIO: {object_path} | 耗时: {time.time() - start_time:.2f}s")
|
||||
# 发布消息
|
||||
result = self.mqtt_client.publish(mqtt_topic, json.dumps(payload, ensure_ascii=False))
|
||||
|
||||
if result.rc == mqtt.MQTT_ERR_SUCCESS:
|
||||
logger.debug(f'已上传帧至 MinIO: {object_path} | MQTT消息已发送到主题: {mqtt_topic} | 耗时: {time.time() - start_time:.2f}s')
|
||||
else:
|
||||
logger.warning(f"API调用失败: {response.status_code} - {response.text}")
|
||||
logger.warning(f'MQTT消息发送失败: {mqtt.error_string(result.rc)}')
|
||||
except Exception as e:
|
||||
logger.error(f'MQTT消息发送异常: {str(e)}')
|
||||
else:
|
||||
logger.warning('MQTT客户端未连接,跳过消息发送')
|
||||
except requests.exceptions.Timeout:
|
||||
logger.warning(f"API调用超时: {self.res_api}")
|
||||
except Exception as e:
|
||||
|
|
|
|||
Loading…
Reference in New Issue