From 48f26e8ef8c6483a92eeef77876147243de371fc Mon Sep 17 00:00:00 2001 From: KremeCN <3265494849@qq.com> Date: Sat, 22 Aug 2026 12:02:45 +0800 Subject: [PATCH] chore: initial commit --- docs/ABSDK接口部分_0630.md | 408 ++++++++++++++++++++++++++++++++++++ docs/ABSDK接口部分_0630.xls | Bin 0 -> 52224 bytes docs/requirement_spec.md | 15 ++ 3 files changed, 423 insertions(+) create mode 100644 docs/ABSDK接口部分_0630.md create mode 100644 docs/ABSDK接口部分_0630.xls create mode 100644 docs/requirement_spec.md diff --git a/docs/ABSDK接口部分_0630.md b/docs/ABSDK接口部分_0630.md new file mode 100644 index 0000000..7834ce6 --- /dev/null +++ b/docs/ABSDK接口部分_0630.md @@ -0,0 +1,408 @@ +# ABSDK 接口文档 + +## ABRet 返回值说明 + +| 字段 | 说明 | 备注 | +|------|------|------| +| **code** | 00000成功
Xxxxx失败 | 错误码:
00000 成功
0xxxx 系统级错误
1xxxx 权限级
2xxxx 操作级 | +| **msg** | 错误信息 | code为00000以外时,该字段有效
该字段只提供概要的错误信息。具体错误原因可参考下面提到的code含义表 | +| **key=> value** | 附带信息, 如 seq => 123111 | code为00000时,该字段有效 | + +--- + +## API 接口 + + +### 0. 取得实例对象 + +**方法签名:** `ABSDK getInstance()` + +**参数:** 无 + +**返回值:** + + ABSDK实例 + + +### 1. 登录 + +**方法签名:** `ABRet loginWithUsername(String username, String password)` + +**参数说明:** + +- username:用户名 +- password:密码 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + token String TOKEN(后续访问用token,有效期2小时,过期后需重新获取) + + +### 2. 验证token状态 + +**方法签名:** `ABRet isValidateToken()` + +**参数:** 无 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + status String TOKEN状态(0:无效 1:有效) + + +### 3. 发送红外按键指令(请在登录后使用) + +**方法签名:** `ABRet sendIr(String irDevName, String irKey)` + +**参数说明:** + +- irDevName: 红外设备名称 +- irKey:按键KEY + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 4. 控制窗帘(请在登录后使用) + +**方法签名:** `ABRet curtainCtrl(String ctDevName, AB_CT_ACTION action, int percent)` + +**参数说明:** + +- ctDevName: 窗帘名称 +- action:动作(请使用下面2个已在库中定义好的常量) +- OPEN 打开窗帘 +- ADJUST 校准窗帘 +- PAUSE 暂停(使窗帘停止运动) +- percent:窗帘打开百分比(0~100) +- ※该参数只需要在【打开窗帘】时使用 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 5. 主机红外下载 (请在登录后使用) + +**方法签名:** `ABRet downloadIrCodes(List irInfos)` + +**参数说明:** + +- irInfos 红外码值信息(请传入IrInfo类型的数据) + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + ret List 导入结果(可通过IrInfo中的status判断每个红外码的下载成功或失败) + + +--- + +## IrInfo 说明 + +| 字段 | 说明 | 备注 | +|------|------|------| +| **irDevName** | 设备区分 | 红外设备名称 | +| **key** | 红外KEY | | +| **code** | 红外码值 | | +| **status** | 红外下载结果 | 0:失败
1:成功 | + + +### 6. 控制插座(请在登录后使用) + +**方法签名:** `ABRet sockCtrl(String soDevName, String status)` + +**参数说明:** + +- soDevName: 插座名称 +- status:插座状态(0:关闭 1:打开) + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 7. 控制开关(请在登录后使用) + +**方法签名:** `ABRet switchCtrl(String switchDevName, String status, String no)` + +**参数说明:** + +- switchDevName: 开关名称 +- status:开关状态(0:关闭 1:打开) +- no:开关键序号( +- 1开开关:空 +- 2开开关:no值和开关键对应如下 +- 1:对应2开开关上最下侧按键 +- 3:对应2开开关上最上侧按键 +- 3开开关:no值和开关键对应如下 +- 1:对应3开开关上最下侧按键 +- 2:对应3开开关上中间按键 +- 3:对应3开开关上最上侧按键 +- ) + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 8. 控制射灯开关(请在登录后使用) + +**方法签名:** `ABRet lightStatusCtrl(String lightDevName, String status)` + +**参数说明:** + +- lightDevName: 射灯名称 +- status:灯的状态 0:关灯 1:开灯 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 9. 控制射灯的色调饱和度(请在登录后使用) + +**方法签名:** `ABRet lightHSCtrl(String lightDevName, String h, String s)` + +**参数说明:** + +- lightDevName: 射灯名称 +- h:色调值 0~254 +- s:饱和度 0~254 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 10. 控制射灯的亮度(请在登录后使用) + +**方法签名:** `ABRet lightVCtrl(String lightDevName, String v)` + +**参数说明:** + +- lightDevName: 射灯名称 +- v:亮度 0~254 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 11. 取得开关状态(请在登录后使用) + +**方法签名:** `ABRet getSwitchStatus(String switchDevName)` + +**参数说明:** + +- switchDevName: 开关名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + btns String 开关数(1:1开开关 2:2开开关 3:3开开关) + status List 开关状态数组(0:关闭 1:开启) + + +### 12. 取得插座状态(请在登录后使用) + +**方法签名:** `ABRet getSockStatus(String soDevName)` + +**参数说明:** + +- soDevName: 插座名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + status String 插座状态(0:关闭 1:开启) + + +### 13. 取得门磁状态(请在登录后使用) + +**方法签名:** `ABRet getDoorStatus(String doorDevName)` + +**参数说明:** + +- doorDevName: 门磁名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + status String 门磁状态(0:关闭 1:开启) + + +### 14. 取得温湿度情报(请在登录后使用) + +**方法签名:** `ABRet getThStatusByDevName(String thDevName)` + +**参数说明:** + +- thDevName: 温湿度名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + temperature String 温度 + humidity String 湿度 + + +### 15. 取得人体活动传感器情报(请在登录后使用) + +**方法签名:** `ABRet getHdStatus(String hdDevName)` + +**参数说明:** + +- hdDevName: 人体活动传感器名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + status String 人体活动状态(0:无活动 1:有活动) + lightIntensity String 光感强度(1:亮 2:正常 3:昏暗 4:黑) + + +### 16. 取得一氧化碳传感器情报(请在登录后使用) + +**方法签名:** `ABRet getCoStatus(String coDevName)` + +**参数说明:** + +- coDevName: 一氧化碳传感器名称 + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + dicdatas Map 返回数据 + concentration String 一氧化碳浓度 + + +### 17. 控制一氧化碳蜂鸣(请在登录后使用) + +**方法签名:** `ABRet coCtrlBySoDevName(String coDevName, String interval)` + +**参数说明:** + +- coDevName: 一氧化碳名称 +- interval:蜂鸣时间(单位:秒) + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +### 18. 红外学习 + +**方法签名:** `ABRet studyIrByIrDevName(String irDevName, String irKey)` + +**参数说明:** + +- irDevName: 红外设备名称 +- irKey:按键KEY + +**返回值:** + + ABRet: + code String 处理结果(00000成功,00000以外失败) + msg String 错误信息 + + +--- + +## 返回值 CODE 含义 + +| CODE | 含义 | +|------|------| +| 00000 | 处理成功 | +| 00001 | 数据库操作失败 | +| 10001 | TOKEN不存在或长度不足 | +| 10002 | TOKEN已失效 | +| 10003 | TOKEN中的SN号不正 | +| 10004 | 签名不存在 | +| 10005 | 时间戳不存在 | +| 10006 | 签名不正确 | +| 20000 | 请求超时 | +| 20001 | 用户名或密码不存在 | +| 20002 | 用户不存在或已暂停使用 | +| 20003 | 登录失败次数过多 | +| 20004 | 用户名或密码不正确 | +| 20005 | 本地用户权限不足 | +| 20101 | 服务器端URL或酒店名或房间号或APIKEY不存在 | +| 20201 | 红外KEY不存在 | +| 20202 | 红外码值不存在 | +| 20203 | 红外设备不存在 | +| 20204 | 红外码库导入失败 | +| 20205 | 红外发射失败 | +| 20206 | 红外设备已离线 | +| 20301 | 参数不正_CMD0不存在 | +| 20302 | 参数不正_CMD1不存在 | +| 20303 | 参数不正_PAYLOAD不存在 | +| 20304 | 窗帘设备不存在 | +| 20305 | 窗帘设备控制失败 | +| 20306 | 窗帘设备已离线 | +| 20501 | 参数不正_插座状态不存在 | +| 20502 | 插座设备不存在 | +| 20503 | 插座设备控制失败 | +| 20504 | 插座设备已离线 | +| 20601 | 参数不正_开关状态不存在 | +| 20602 | 参数不正_开关类型不存在(标识几开开关) | +| 20603 | 开关设备不存在 | +| 20604 | 开关设备控制失败 | +| 20605 | 开关设备已掉线 | +| 20701 | 参数不正_射灯操作类型不存在 | +| 20702 | 参数不正_射灯操作类型不正确 | +| 20703 | 参数不正_射灯开关状态不存在 | +| 20704 | 参数不正_射灯色调饱和度不存在 | +| 20705 | 参数不正_射灯亮度不存在 | +| 20706 | 射灯设备不存在 | +| 20707 | 射灯设备控制失败 | +| 20801 | 参数不正_设备名称不存在 | +| 20802 | 端末设备不存在 | +| 20803 | 端末状态属性不存在 | +| 20804 | 参数不正_报警时长不正确 | +| 20805 | 端末设备已离线 | +| 20806 | 设备控制失败 | \ No newline at end of file diff --git a/docs/ABSDK接口部分_0630.xls b/docs/ABSDK接口部分_0630.xls new file mode 100644 index 0000000000000000000000000000000000000000..b82a9f787ca3f91701d950bb5932760b87b84b43 GIT binary patch literal 52224 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 Pds?9R8u)(zQvf4` literal 0 HcmV?d00001 diff --git a/docs/requirement_spec.md b/docs/requirement_spec.md new file mode 100644 index 0000000..cad3b73 --- /dev/null +++ b/docs/requirement_spec.md @@ -0,0 +1,15 @@ +## 需求规格 + +**登录** +1. 记住已登录用户信息功能:记住我 +2. 自动登录:选中自动登录之后 + +**设备列表** +1. 设备列表:显示设备名称(插座、温湿度、红外) +2. 点击设备:跳转到相应的设备控制页面 +3. 插座页面:可以获取插座状态 (图片) +4. 温湿度控制器页面:分别显示温度及湿度(图片) +5. 红外传感器:创建遥控器的功能,持久化红外学习按钮 + +**情景模式** +* 基于多种设备完成一种或多种生活场景 \ No newline at end of file