smart-home/smart-home-app/tiqiaa集成说明.md
2026-02-26 09:16:34 +08:00

7.7 KiB
Raw Blame History

🔌 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": "..."
}

💡 后续优化建议

  1. 配置化服务器地址 - 支持开发/生产环境切换
  2. 添加重试机制 - 网络失败时自动重试
  3. 缓存最后一次命令 - 支持快速重发
  4. 添加命令队列 - 避免并发请求冲突
  5. 优化错误提示 - 根据不同错误类型显示不同提示

🎉 总结

修改完成现在APP的红外控制请求会通过tiqiaa服务器中转到ESP32实现了

  • 服务器中转架构
  • 详细的日志输出
  • 优化的错误处理
  • 更长的超时时间
  • 更好的用户体验

请启动tiqiaa服务器并测试功能