# goiot-java-sdk
**Repository Path**: gdouyang/goiot-java-sdk
## Basic Information
- **Project Name**: goiot-java-sdk
- **Description**: goiot java sdk
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-12-23
- **Last Updated**: 2026-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# goiot Java SDK
对接 go-iot 管理端 HTTP API(默认前缀 `/api`)。覆盖登录、产品/设备 CRUD、时序查询、网络配置、WebSocket 事件订阅。
- Java 8+
- 依赖:OkHttp 4.10、Jackson 2.14
- Token 请求头:`x-access-token`
## 引入
尚未发布到中央仓库时,先本地安装:
```bash
mvn clean install
```
```xml
goiot
java-sdk
0.0.1-SNAPSHOT
```
## 初始化
`Goiot.init` 会设置 host、立即登录,并启动后台刷新(默认每 160 秒;失败则重新登录)。默认会话有效期 1 天。host 末尾 `/` 可有可无。
```java
import goiot.Goiot;
import goiot.api.ApiHolder;
import goiot.dto.PageQuery;
import goiot.dto.PageResult;
import goiot.dto.Product;
Goiot.init("http://127.0.0.1:8088", "admin", "123456");
PageResult page = ApiHolder.productApi.page(new PageQuery(1, 10)).getResult();
```
只手动登录、不启用看门狗:
```java
import goiot.GoiotHttp;
import goiot.api.ApiHolder;
import goiot.dto.LoginForm;
GoiotHttp.setHost("http://127.0.0.1:8088");
LoginForm form = new LoginForm();
form.setUsername("admin");
form.setPassword("123456");
form.setExpires(86400); // 秒,可选;不传则服务端默认约 1 小时
ApiHolder.loginApi.login(form);
```
看门狗参数(须在 `Goiot.init` / `WatchDog.init` 之前设置):
```java
WatchDog.refreshIntervalSeconds = 160; // 最小 15
WatchDog.expires = 86400;
```
`WatchDog.init()` 只生效一次。登出:`ApiHolder.loginApi.logout()`。
## 统一响应
所有 HTTP 接口返回 `JsonResp`:
| 字段 | 含义 |
|---|---|
| `success` | 是否成功 |
| `message` | 失败原因 |
| `code` | HTTP 风格状态码(如 200、400) |
| `result` | 业务数据 |
先判断 `success` 再取 `result`。
## 分页
请求 `PageQuery`,响应 `PageResult`。设备/产品列表与属性/日志/事件时序查询共用这套结构。
```java
PageQuery q = new PageQuery(1, 10)
.addCondition("name", PageQuery.Oper.LIKE, "测试");
PageResult page = ApiHolder.deviceApi.page(q).getResult();
// 时序查询可用上一页的 searchAfter 做游标翻页
PageQuery next = new PageQuery(1, 10);
next.setSearchAfter(new ArrayList