{"id":29966272,"url":"https://github.com/thingspanel/tp-protocol-sdk-java","last_synced_at":"2025-08-30T07:11:45.822Z","repository":{"id":296349731,"uuid":"993064801","full_name":"ThingsPanel/tp-protocol-sdk-java","owner":"ThingsPanel","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-30T06:59:18.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-30T08:27:45.584Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThingsPanel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-30T06:44:56.000Z","updated_at":"2025-05-30T06:59:21.000Z","dependencies_parsed_at":"2025-06-03T04:33:29.043Z","dependency_job_id":null,"html_url":"https://github.com/ThingsPanel/tp-protocol-sdk-java","commit_stats":null,"previous_names":["thingspanel/tp-protocol-sdk-java"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ThingsPanel/tp-protocol-sdk-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThingsPanel%2Ftp-protocol-sdk-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThingsPanel%2Ftp-protocol-sdk-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThingsPanel%2Ftp-protocol-sdk-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThingsPanel%2Ftp-protocol-sdk-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThingsPanel","download_url":"https://codeload.github.com/ThingsPanel/tp-protocol-sdk-java/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThingsPanel%2Ftp-protocol-sdk-java/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268639931,"owners_count":24282678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-04T02:00:09.867Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-04T02:31:52.012Z","updated_at":"2025-08-04T02:32:39.965Z","avatar_url":"https://github.com/ThingsPanel.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TP Protocol SDK Java\n\nThingsPanel Protocol SDK for Java，用于快速开发ThingsPanel协议和服务插件的Java版本。\n\n## 功能特性\n\n- 设备配置管理\n- MQTT消息通信\n- HTTP回调处理\n- HTTP API客户端\n- 设备动态认证\n- 服务接入点管理\n- 心跳机制\n- 简单易用的API\n\n## 快速开始\n\n### 完整客户端使用（推荐）\n\n```java\n// 创建完整客户端（包含MQTT和API功能）\nTPClient client = new TPClient(\"tcp://localhost:1883\", \"http://localhost:8080\")\n    .setAuth(\"username\", \"password\")\n    .setClientId(\"my-plugin-001\")\n    .setServiceIdentifier(\"my-service\");\n\n// 连接（会自动发送心跳）\nif (client.connect()) {\n    // 1. 设备动态认证\n    TPAPIClient.APIResponse\u003cMap\u003cString, String\u003e\u003e authResponse = \n        client.deviceDynamicAuth(\"template-secret-123\", \"device-001\");\n    \n    // 2. 获取设备配置\n    TPAPIClient.APIResponse\u003cDevice\u003e configResponse = \n        client.getDeviceConfig(\"device-001\", \"voucher-123\", \"DEV001\");\n    \n    // 3. 发送设备数据\n    String data = \"{\\\"temperature\\\":25.5,\\\"humidity\\\":60}\";\n    client.sendData(\"my-service\", \"device-001\", data);\n    \n    // 4. 订阅下行消息\n    client.subscribe(\"plugin/my-service/devices/+/commands\");\n    \n    // 5. 发送心跳\n    client.sendHeartbeat();\n    \n    client.disconnect();\n}\n```\n\n### MQTT客户端使用\n\n```java\n// 创建客户端\nTPClient client = new TPClient(\"tcp://localhost:1883\")\n    .setAuth(\"username\", \"password\")\n    .setClientId(\"my-device-001\");\n\n// 连接到服务器\nif (client.connect()) {\n    // 发送设备状态\n    client.sendStatus(\"device-001\", \"1\");\n    \n    // 发送设备数据\n    String data = \"{\\\"temperature\\\":25.5,\\\"humidity\\\":60}\";\n    client.sendData(\"my-service\", \"device-001\", data);\n    \n    // 订阅主题\n    client.subscribe(\"plugin/my-service/#\");\n    \n    // 断开连接\n    client.disconnect();\n}\n```\n\n### HTTP回调处理器使用\n\n```java\n// 创建处理器\nTPHandler handler = new TPHandler();\n\n// 设置表单配置处理函数\nhandler.setFormConfigHandler((protocolType, deviceType, formType) -\u003e {\n    Map\u003cString, Object\u003e config = new HashMap\u003c\u003e();\n    List\u003cMap\u003cString, Object\u003e\u003e fields = new ArrayList\u003c\u003e();\n    \n    // 添加配置字段\n    Map\u003cString, Object\u003e field = new HashMap\u003c\u003e();\n    field.put(\"name\", \"host\");\n    field.put(\"type\", \"string\");\n    field.put(\"label\", \"服务器地址\");\n    fields.add(field);\n    \n    config.put(\"fields\", fields);\n    return config;\n});\n\n// 设置设备断开处理函数\nhandler.setDeviceDisconnectHandler((deviceId, voucher) -\u003e {\n    System.out.println(\"设备断开: \" + deviceId);\n});\n\n// 启动HTTP服务器\nhandler.start(8080);\n```\n\n### 设备管理\n\n```java\n// 创建设备\nDevice device = new Device(\"device-001\", \"voucher-123\", \"DEV001\", \"sensor\", \"mqtt\");\n\n// 设置设备配置\nMap\u003cString, Object\u003e config = new HashMap\u003c\u003e();\nconfig.put(\"host\", \"192.168.1.100\");\nconfig.put(\"port\", 1883);\ndevice.setConfig(config);\n\n// 创建子设备\nSubDevice subDevice = new SubDevice(\"sub-001\", \"sub-voucher\", \"SUB001\", \"addr-001\");\nList\u003cSubDevice\u003e subDevices = new ArrayList\u003c\u003e();\nsubDevices.add(subDevice);\ndevice.setSubDevices(subDevices);\n```\n\n## API说明\n\n### TPClient (主客户端)\n\n#### 构造函数\n- `TPClient(String mqttBroker)` - 创建MQTT客户端\n- `TPClient(String mqttBroker, String apiBaseURL)` - 创建完整客户端（MQTT + API）\n\n#### 配置方法\n- `setAuth(String username, String password)` - 设置MQTT认证信息\n- `setClientId(String clientId)` - 设置客户端ID\n- `setServiceIdentifier(String serviceIdentifier)` - 设置服务标识符\n\n#### MQTT功能\n- `connect()` - 连接到MQTT服务器\n- `sendStatus(String deviceId, String status)` - 发送设备状态\n- `sendData(String serviceIdentifier, String deviceId, String data)` - 发送设备数据\n- `subscribe(String topic)` - 订阅主题\n- `disconnect()` - 断开连接\n\n#### API功能\n- `getDeviceConfig(String deviceId, String voucher, String deviceNumber)` - 获取设备配置\n- `deviceDynamicAuth(String templateSecret, String deviceNumber)` - 设备动态认证\n- `getServiceAccess()` - 获取服务接入点信息\n- `sendHeartbeat()` - 发送心跳\n\n### TPAPIClient (API客户端)\n\n- `getDeviceConfig(DeviceConfigRequest)` - 获取设备配置\n- `deviceDynamicAuth(DeviceDynamicAuthRequest)` - 设备动态认证\n- `getServiceAccess(ServiceAccessRequest)` - 获取服务接入点\n- `sendHeartbeat(HeartbeatRequest)` - 发送心跳\n\n### TPHandler (HTTP回调处理器)\n\n- `setFormConfigHandler(FormConfigHandler handler)` - 设置表单配置处理函数\n- `setDeviceDisconnectHandler(DeviceDisconnectHandler handler)` - 设置设备断开处理函数\n- `setNotificationHandler(NotificationHandler handler)` - 设置通知处理函数\n- `start(int port)` - 启动HTTP服务器\n\n### HTTP回调接口\n\n- `/api/v1/form/config` - 获取表单配置\n- `/api/v1/device/disconnect` - 设备断开通知\n- `/api/v1/plugin/notification` - 事件通知\n- `/api/v1/plugin/device/list` - 获取设备列表\n\n### HTTP API接口\n\n- `/api/v1/plugin/device/config` - 获取设备配置\n- `/api/v1/device/auth` - 设备动态认证\n- `/api/v1/plugin/service/access` - 获取服务接入点\n- `/api/v1/plugin/heartbeat` - 发送心跳\n\n### MQTT主题\n\n- `devices/status/{device_id}` - 设备状态上报\n- `plugin/{服务标识符}/devices/{device_id}/datas` - 设备数据上报\n- `plugin/{服务标识符}/#` - 订阅平台数据主题\n\n## 文件结构\n\n```\ntp-protocol-sdk-java/\n├── Device.java          - 设备信息类\n├── SubDevice.java       - 子设备信息类\n├── TPClient.java        - 主客户端（MQTT + API）\n├── TPAPIClient.java     - HTTP API客户端\n├── TPHandler.java       - HTTP回调处理器\n├── Example.java         - 使用示例\n└── README.md           - 说明文档\n```\n\n## 运行示例\n\n```bash\n# 编译所有Java文件\njavac *.java\n\n# 运行完整示例\njava Example\n```\n\n## 功能对比\n\n### 与Go版本功能对比\n\n| 功能 | Go版本 | Java版本 | 状态 |\n|------|--------|----------|------|\n| MQTT客户端 | ✅ | ✅ | 完整实现 |\n| HTTP回调处理 | ✅ | ✅ | 完整实现 |\n| 设备配置获取 | ✅ | ✅ | 完整实现 |\n| 设备动态认证 | ✅ | ✅ | 完整实现 |\n| 服务接入点管理 | ✅ | ✅ | 完整实现 |\n| 心跳机制 | ✅ | ✅ | 完整实现 |\n| 数据类型定义 | ✅ | ✅ | 完整实现 |\n\n### 实现差异\n\n1. **Go版本优势**：\n   - 使用真实的MQTT库（Eclipse Paho）\n   - 更完善的错误处理\n   - 更好的并发支持\n\n2. **Java版本特点**：\n   - 使用Java 11+ HttpClient\n   - 面向对象设计\n   - 简化的API接口\n   - 更好的类型安全\n\n## 注意事项\n\n1. 这是一个功能完整的SDK框架，包含了Go版本的所有主要功能\n2. MQTT功能当前是模拟实现，生产环境需要集成真正的MQTT库（如Eclipse Paho）\n3. HTTP服务器功能需要集成Servlet容器或Spring Boot\n4. JSON解析当前是简化实现，建议使用Jackson或Gson\n5. 生产环境使用时需要添加完善的错误处理、重连机制等\n\n## 依赖建议\n\n实际使用时建议添加以下依赖：\n\n- **MQTT客户端**: Eclipse Paho MQTT Client\n- **HTTP服务器**: Spring Boot Starter Web\n- **JSON处理**: Jackson或Gson\n- **日志框架**: SLF4J + Logback\n\n## License\n\nThis project is licensed under the Apache 2.0","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthingspanel%2Ftp-protocol-sdk-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthingspanel%2Ftp-protocol-sdk-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthingspanel%2Ftp-protocol-sdk-java/lists"}