smart-home/smart-home-app/tiqiaa集成说明.md

389 lines
7.7 KiB
Markdown
Raw Normal View History

2026-02-26 09:16:34 +08:00
# 🔌 Tiqiaa服务器集成说明
## 📋 修改概述
将uni-app中的红外控制请求从**直接发送到ESP32**改为**通过tiqiaa服务器中转**。
---
## 🔧 修改内容
### 文件:`pages/control/ac.vue`
**修改位置:** `sendCommand` 方法
### 修改前直接发送到ESP32
```javascript
uni.request({
url: `http://${this.esp32IP}:8899/api/ac/command`,
method: 'POST',
data: {
command,
value: value
},
timeout: 5000,
success: (res) => {
if (!res.data || !res.data.success) {
uni.showToast({ title: '命令发送失败', icon: 'none' })
}
},
fail: () => {
uni.showToast({ title: '无法连接ESP32', icon: 'none' })
}
})
```
### 修改后通过tiqiaa服务器中转
```javascript
// 通过tiqiaa服务器中转发送红外命令到ESP32
uni.request({
url: 'http://localhost:8080/api/tiqiaa/ir/send',
method: 'POST',
data: {
remoteId: this.ac.remoteId || this.ac.codeId, // 使用remoteId或codeId
command: command,
value: value, // 保留字段方便后续扩展
esp32IP: this.esp32IP
},
timeout: 10000, // 增加超时时间,因为需要经过服务器中转
success: (res) => {
console.log('tiqiaa send result:', res.data)
if (res.data && res.data.success) {
uni.showToast({
title: '命令发送成功',
icon: 'success',
duration: 1500
})
} else {
uni.showToast({
title: res.data?.message || '命令发送失败',
icon: 'none'
})
}
},
fail: (err) => {
console.error('tiqiaa send failed:', err)
uni.showToast({
title: '无法连接tiqiaa服务器',
icon: 'none'
})
}
})
```
---
## 📊 请求参数说明
### 发送到tiqiaa服务器的数据
| 参数 | 类型 | 说明 | 示例 |
|------|------|------|------|
| `remoteId` | String | 遥控器ID优先使用`ac.remoteId`,否则使用`ac.codeId` | `"Gree_042"` |
| `command` | String | 红外命令类型 | `"power_toggle"`, `"temp_set"`, `"mode_set"`, `"fan_set"` |
| `value` | Any | 命令参数值保留字段目前tiqiaa暂不使用 | `26`, `"制冷"`, `"高风"` |
| `esp32IP` | String | ESP32设备的IP地址 | `"192.168.1.98"` |
### 命令类型说明
| 命令 | 说明 | value示例 |
|------|------|-----------|
| `power_toggle` | 开关机 | `"on"` / `"off"` |
| `temp_set` | 设置温度 | `26` (16-30) |
| `mode_set` | 设置模式 | `"制冷"`, `"制热"`, `"除湿"`, `"送风"`, `"自动"` |
| `fan_set` | 设置风速 | `"自动"`, `"低风"`, `"中风"`, `"高风"` |
---
## 🔄 工作流程
```
用户操作APP
uni-app调用sendCommand()
发送POST请求到tiqiaa服务器
http://localhost:8080/api/tiqiaa/ir/send
tiqiaa服务器接收请求
tiqiaa根据esp32IP转发到ESP32
http://{esp32IP}:8899/api/ac/command
ESP32执行红外命令
ESP32返回结果给tiqiaa
tiqiaa返回结果给APP
APP显示执行结果
```
---
## 🎯 关键改进
### 1. 服务器中转
- **修改前:** APP直接连接ESP32
- **修改后:** APP → tiqiaa服务器 → ESP32
### 2. 超时时间调整
- **修改前:** 5秒超时
- **修改后:** 10秒超时因为需要经过服务器中转
### 3. 错误提示优化
- **修改前:** 简单的"无法连接ESP32"
- **修改后:**
- 成功时显示"命令发送成功"
- 失败时显示具体错误信息
- 服务器连接失败时显示"无法连接tiqiaa服务器"
### 4. 日志输出
添加了详细的控制台日志:
```javascript
console.log('tiqiaa send result:', res.data)
console.error('tiqiaa send failed:', err)
```
---
## 🔍 调试技巧
### 1. 查看APP控制台日志
在HBuilderX的控制台中查看
```javascript
tiqiaa send result: {
success: true,
message: "命令发送成功",
data: { ... }
}
```
### 2. 检查tiqiaa服务器
确保tiqiaa服务器正在运行
```bash
# 检查服务器是否启动
curl http://localhost:8080/api/tiqiaa/health
```
### 3. 检查ESP32连接
确保ESP32可访问
```bash
# 测试ESP32连接
curl http://192.168.1.98:8899/api/status
```
---
## ⚠️ 注意事项
### 1. remoteId字段
```javascript
remoteId: this.ac.remoteId || this.ac.codeId
```
- 优先使用`ac.remoteId`
- 如果没有,则使用`ac.codeId`作为备用
- 确保至少有一个字段有值
### 2. value字段
```javascript
value: value, // 保留字段方便后续扩展
```
- 目前tiqiaa服务器暂时不使用这个字段
- 保留是为了后续功能扩展
- 不影响当前功能
### 3. 服务器地址
```javascript
url: 'http://localhost:8080/api/tiqiaa/ir/send'
```
- 当前使用`localhost:8080`
- 如果tiqiaa服务器部署在其他地址需要修改这个URL
- 建议将服务器地址配置化
---
## 🚀 配置化建议
### 创建配置文件
建议创建 `config/tiqiaa.js`
```javascript
// config/tiqiaa.js
export const TIQIAA_CONFIG = {
// 开发环境
dev: {
baseUrl: 'http://localhost:8080',
timeout: 10000
},
// 生产环境
prod: {
baseUrl: 'https://tiqiaa.example.com',
timeout: 10000
}
}
// 获取当前环境配置
export function getTiqiaaConfig() {
// #ifdef H5
return TIQIAA_CONFIG.dev
// #endif
// #ifdef APP-PLUS
return TIQIAA_CONFIG.prod
// #endif
return TIQIAA_CONFIG.dev
}
```
### 使用配置
```javascript
import { getTiqiaaConfig } from '@/config/tiqiaa.js'
const config = getTiqiaaConfig()
uni.request({
url: `${config.baseUrl}/api/tiqiaa/ir/send`,
timeout: config.timeout,
// ...
})
```
---
## 📝 测试步骤
### 1. 启动tiqiaa服务器
```bash
# 确保tiqiaa服务器在8080端口运行
```
### 2. 启动APP
```bash
# 在HBuilderX中运行到浏览器或手机
```
### 3. 测试红外控制
- 打开空调控制页面
- 点击开关机按钮
- 观察控制台日志
- 检查toast提示
### 4. 预期结果
**成功时:**
```
控制台: tiqiaa send result: { success: true, ... }
Toast: 命令发送成功 ✅
```
**失败时:**
```
控制台: tiqiaa send failed: { ... }
Toast: 无法连接tiqiaa服务器 ❌
```
---
## 🎊 完成状态
- ✅ 修改`ac.vue`中的`sendCommand`方法
- ✅ 添加详细的日志输出
- ✅ 优化错误提示
- ✅ 增加超时时间
- ⏳ 需要测试tiqiaa服务器集成
---
## 📚 相关文件
- `pages/control/ac.vue` - 空调控制页面(已修改)
- `utils/deviceConfig.js` - 设备配置工具
- `utils/deviceStore.js` - 设备存储工具
---
## 🔗 API接口文档
### tiqiaa服务器接口
**请求:**
```
POST http://localhost:8080/api/tiqiaa/ir/send
Content-Type: application/json
{
"remoteId": "Gree_042",
"command": "power_toggle",
"value": "on",
"esp32IP": "192.168.1.98"
}
```
**响应(成功):**
```json
{
"success": true,
"message": "命令发送成功",
"data": {
"esp32Response": { ... }
}
}
```
**响应(失败):**
```json
{
"success": false,
"message": "ESP32连接失败",
"error": "..."
}
```
---
## 💡 后续优化建议
1. **配置化服务器地址** - 支持开发/生产环境切换
2. **添加重试机制** - 网络失败时自动重试
3. **缓存最后一次命令** - 支持快速重发
4. **添加命令队列** - 避免并发请求冲突
5. **优化错误提示** - 根据不同错误类型显示不同提示
---
## 🎉 总结
修改完成现在APP的红外控制请求会通过tiqiaa服务器中转到ESP32实现了
- ✅ 服务器中转架构
- ✅ 详细的日志输出
- ✅ 优化的错误处理
- ✅ 更长的超时时间
- ✅ 更好的用户体验
请启动tiqiaa服务器并测试功能