389 lines
7.7 KiB
Markdown
389 lines
7.7 KiB
Markdown
|
|
# 🔌 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服务器并测试功能!
|