7.7 KiB
7.7 KiB
🔌 Tiqiaa服务器集成说明
📋 修改概述
将uni-app中的红外控制请求从直接发送到ESP32改为通过tiqiaa服务器中转。
🔧 修改内容
文件:pages/control/ac.vue
修改位置: sendCommand 方法
修改前(直接发送到ESP32)
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服务器中转)
// 通过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. 日志输出
添加了详细的控制台日志:
console.log('tiqiaa send result:', res.data)
console.error('tiqiaa send failed:', err)
🔍 调试技巧
1. 查看APP控制台日志
在HBuilderX的控制台中查看:
tiqiaa send result: {
success: true,
message: "命令发送成功",
data: { ... }
}
2. 检查tiqiaa服务器
确保tiqiaa服务器正在运行:
# 检查服务器是否启动
curl http://localhost:8080/api/tiqiaa/health
3. 检查ESP32连接
确保ESP32可访问:
# 测试ESP32连接
curl http://192.168.1.98:8899/api/status
⚠️ 注意事项
1. remoteId字段
remoteId: this.ac.remoteId || this.ac.codeId
- 优先使用
ac.remoteId - 如果没有,则使用
ac.codeId作为备用 - 确保至少有一个字段有值
2. value字段
value: value, // 保留字段方便后续扩展
- 目前tiqiaa服务器暂时不使用这个字段
- 保留是为了后续功能扩展
- 不影响当前功能
3. 服务器地址
url: 'http://localhost:8080/api/tiqiaa/ir/send'
- 当前使用
localhost:8080 - 如果tiqiaa服务器部署在其他地址,需要修改这个URL
- 建议将服务器地址配置化
🚀 配置化建议
创建配置文件
建议创建 config/tiqiaa.js:
// 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
}
使用配置
import { getTiqiaaConfig } from '@/config/tiqiaa.js'
const config = getTiqiaaConfig()
uni.request({
url: `${config.baseUrl}/api/tiqiaa/ir/send`,
timeout: config.timeout,
// ...
})
📝 测试步骤
1. 启动tiqiaa服务器
# 确保tiqiaa服务器在8080端口运行
2. 启动APP
# 在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"
}
响应(成功):
{
"success": true,
"message": "命令发送成功",
"data": {
"esp32Response": { ... }
}
}
响应(失败):
{
"success": false,
"message": "ESP32连接失败",
"error": "..."
}
💡 后续优化建议
- 配置化服务器地址 - 支持开发/生产环境切换
- 添加重试机制 - 网络失败时自动重试
- 缓存最后一次命令 - 支持快速重发
- 添加命令队列 - 避免并发请求冲突
- 优化错误提示 - 根据不同错误类型显示不同提示
🎉 总结
修改完成!现在APP的红外控制请求会通过tiqiaa服务器中转到ESP32,实现了:
- ✅ 服务器中转架构
- ✅ 详细的日志输出
- ✅ 优化的错误处理
- ✅ 更长的超时时间
- ✅ 更好的用户体验
请启动tiqiaa服务器并测试功能!