Metadata-Version: 2.1
Name: device_protocol_sdk
Version: 1.2.13
Summary: 无人设备协议开发SDK
Author: fuhl
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: grpcio >=1.48.2
Requires-Dist: grpcio-tools >=1.48.2
Requires-Dist: paho-mqtt >=1.6.1
Requires-Dist: pydantic >=1.9.0
Requires-Dist: websockets >=10.0
Requires-Dist: shapely >=2.1.2
Requires-Dist: aiohttp >=3.9.5

# Device Protocol SDK

无人机设备协议开发工具包，提供标准化接口实现多类型无人机设备的快速接入。

[![PyPI Version](https://img.shields.io/pypi/v/device-protocol-sdk)](https://pypi.org/project/device-protocol-sdk/)
[![Python Versions](https://img.shields.io/pypi/pyversions/device-protocol-sdk)](https://pypi.org/project/device-protocol-sdk/)

## 功能特性

- 🛠️ **协议无关抽象**：统一各类无人机设备的控制接口
- 🔌 **连接池管理**：自动维护设备连接，支持多设备并行控制
- 🚀 **实时状态推送**：内置WebSocket状态推送工具
- 🔍 **动态协议发现**：运行时自动加载用户协议实现

## ⚠️ 升级 SDK 后必须重启适配器进程

`DevicePusher` 采用**两段式**上报，两条语义不要混：

| 信号 | 时机 | 含义 |
|---|---|---|
| `CommandAck(message="accepted")` | 收到命令**立即** | 命令已受理（主系统 10s 短超时只等这一段） |
| `DeviceMessage(message_type="action_completed")` | 动作**执行结束**后 | 动作真正做完/失败，由 `_report_action_completed()` 上报，metadata 带 `command_id` |

主系统的 DAG 调度器**按 `command_id` 查这条完成上报**来判定 step 终态。所以：

- **适配器作者无需自己发 `action_completed`** —— Pusher 在串行/并行两个分支统一发，
  自己再发一条反而会重复。
- **改了 SDK 就必须重启适配器进程**。仍在跑旧版 SDK 的适配器不会上报
  `action_completed`，step 会白等满 `completion_timeout_seconds`（默认 300s）才判失败，
  期间下游步骤全部不派发。主系统会打 `协议 X 的适配器仍在使用旧版 SDK` 的 warning
  （判据：新版受理 ACK 带 `message="accepted"`，旧版该字段为空 —— 别删这个字面量）。
- 各动作实现的返回值判定口径：`None` / 异常 / `{"error": ...}` / `{"status": "error"}` /
  `{"success": False}` 都算失败（见 `DevicePusher._result_ok`，与主系统
  `WorkflowScheduler._device_result_error` 对齐）。

## 安装

```bash
pip install device-protocol-sdk
