跳转至

系统状态接口

本文档引用的文件 - main.c - rest_api.c - rest_api.h - network_manager.c - network_manager.h - ble_gateway.c - config_manager.h - config.h - index.html

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

本文档详细说明了ESP32S3 BLE网关系统的状态查询API接口。该接口提供系统运行时的关键状态信息,包括系统版本、运行时间、内存状态、网络连接状态、BLE扫描状态等。通过GET /api/status端点,客户端可以实时监控网关的运行状况。

项目结构

该项目采用模块化架构设计,主要包含以下核心组件:

graph TB
subgraph "应用层"
Main[主程序入口]
WebUI[Web界面]
end
subgraph "服务层"
REST[REST API服务]
Network[网络管理器]
BLE[BLE网关]
Config[配置管理器]
end
subgraph "硬件抽象层"
WiFi[WiFi管理器]
ETH[以太网管理器]
HCI[HCI传输层]
end
Main --> REST
WebUI --> REST
REST --> Network
REST --> BLE
REST --> Config
Network --> WiFi
Network --> ETH
BLE --> HCI

图表来源 - main.c - rest_api.c

章节来源 - main.c - rest_api.h

核心组件

REST API服务

REST API服务负责处理HTTP请求,提供系统状态查询功能。它集成了多个子系统的信息收集和格式化输出。

网络管理器

网络管理器负责管理以太网和WiFi连接状态,提供统一的网络状态查询接口。

BLE网关

BLE网关负责蓝牙设备的扫描和连接管理,提供设备列表和扫描状态信息。

配置管理器

配置管理器提供系统配置信息的访问接口,包括网关标识符和固件版本等。

章节来源 - rest_api.c - network_manager.c - ble_gateway.c

架构概览

系统状态查询API的完整架构流程如下:

sequenceDiagram
participant Client as 客户端
participant REST as REST API
participant Network as 网络管理器
participant BLE as BLE网关
participant Config as 配置管理器
Client->>REST : GET /api/status
REST->>Config : 获取网关配置
REST->>Network : 获取网络状态
REST->>BLE : 获取BLE设备数量
REST->>REST : 组装JSON响应
REST-->>Client : 返回系统状态JSON
Note over REST,Client : 响应包含所有系统状态信息

图表来源 - rest_api.c - network_manager.c - ble_gateway.c

详细组件分析

GET /api/status 接口规范

请求方法和URL

  • 方法: GET
  • 路径: /api/status
  • 内容类型: application/json

成功响应格式

接口返回标准的JSON格式,包含以下字段:

字段名 类型 描述 示例值
gateway_id string 网关唯一标识符 "ESP32S3-BLE-Gateway-001"
firmware string 固件版本号 "1.0.0"
uptime number 系统运行时间(秒) 12345
heap_free number 可用堆内存字节 1572864
network object 网络状态对象 -
network.connected boolean 网络连接状态 true
network.ip string 当前IP地址 "192.168.1.100"
network.interface string 活跃网络接口 "ETH"
ble object BLE状态对象 -
ble.devices number 发现的BLE设备数量 5

错误处理机制

HTTP状态码 错误类型 描述 处理建议
200 成功 请求成功执行 正常处理响应数据
404 资源未找到 API端点不存在 检查URL路径是否正确
500 服务器内部错误 服务器处理异常 重试请求或检查服务器日志

响应示例

成功响应示例:

{
  "gateway_id": "ESP32S3-BLE-Gateway-001",
  "firmware": "1.0.0",
  "uptime": 12345,
  "heap_free": 1572864,
  "network": {
    "connected": true,
    "ip": "192.168.1.100",
    "interface": "ETH"
  },
  "ble": {
    "devices": 5
  }
}

最小响应示例:

{
  "gateway_id": "ESP32S3-BLE-Gateway-001",
  "firmware": "1.0.0",
  "uptime": 0,
  "heap_free": 0,
  "network": {
    "connected": false,
    "ip": "0.0.0.0",
    "interface": "NONE"
  },
  "ble": {
    "devices": 0
  }
}

数据字段详细说明

系统基本信息 - gateway_id: 网关的唯一标识符,用于区分不同的设备实例 - firmware: 当前运行的固件版本号,便于追踪升级状态 - uptime: 系统自启动以来的运行时间(以秒为单位) - heap_free: 当前可用的堆内存大小(以字节为单位)

网络状态信息 - network.connected: 真实的网络连接状态,支持以太网和WiFi两种模式 - network.ip: 当前活跃网络接口的IP地址 - network.interface: 当前使用的网络接口类型("ETH"或"WIFI")

BLE状态信息 - ble.devices: 当前扫描到的BLE设备总数

章节来源 - rest_api.c

状态获取实现细节

系统版本信息

固件版本信息从全局配置头文件中获取,确保版本信息与编译时配置保持一致。

运行时间计算

系统运行时间通过ESP-IDF的日志时间戳函数获取,转换为秒级精度的时间值。

内存状态获取

可用堆内存大小通过ESP-IDF的内存管理API获取,提供实时的内存使用情况。

网络状态获取

网络状态通过网络管理器的统一接口获取,支持多种网络模式的自动切换检测。

BLE扫描状态

BLE设备数量通过BLE网关的设备计数接口获取,反映当前的扫描结果。

章节来源 - rest_api.c - config.h

客户端使用指南

基本使用示例

JavaScript示例:

fetch('/api/status')
  .then(response => response.json())
  .then(data => {
    console.log('网关ID:', data.gateway_id);
    console.log('固件版本:', data.firmware);
    console.log('运行时间:', data.uptime, '秒');
    console.log('可用内存:', data.heap_free, '字节');
    console.log('网络状态:', data.network.connected ? '已连接' : '未连接');
    console.log('IP地址:', data.network.ip);
    console.log('BLE设备数量:', data.ble.devices);
  })
  .catch(error => console.error('请求失败:', error));

Python示例:

import requests
import json

try:
    response = requests.get('http://192.168.1.100/api/status')
    response.raise_for_status()

    status_data = response.json()
    print(f"网关ID: {status_data['gateway_id']}")
    print(f"固件版本: {status_data['firmware']}")
    print(f"运行时间: {status_data['uptime']} 秒")
    print(f"可用内存: {status_data['heap_free']} 字节")

except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

实时监控实现

推荐使用轮询机制实现状态监控,建议的轮询间隔为3-5秒,避免过度频繁的请求影响系统性能。

章节来源 - index.html

依赖关系分析

系统状态查询API的依赖关系图:

graph TD
REST[REST API] --> NetworkMgr[网络管理器]
REST --> BLEMgr[BLE网关]
REST --> ConfigMgr[配置管理器]
REST --> ESP32[ESP32系统API]
NetworkMgr --> WiFiMgr[WiFi管理器]
NetworkMgr --> ETHMgr[以太网管理器]
BLEMgr --> HCITrans[HCI传输层]
ESP32 --> FreeRTOS[FreeRTOS内核]
ESP32 --> ESPIDF[ESP-IDF框架]

图表来源 - rest_api.c - network_manager.c - ble_gateway.c

章节来源 - rest_api.c - network_manager.c

性能考虑

响应时间优化

  • API调用应在毫秒级别完成,避免阻塞其他网络操作
  • 使用轻量级的数据序列化库减少处理开销
  • 缓存机制:对于不频繁变化的状态信息可考虑本地缓存

内存使用优化

  • 动态分配内存时要确保及时释放
  • 使用栈变量而非堆变量存储临时数据
  • 监控内存使用情况,防止内存泄漏

并发处理

  • API处理应支持多客户端并发访问
  • 使用互斥锁保护共享资源
  • 避免长时间持有锁导致的阻塞

故障排除指南

常见问题及解决方案

1. API响应超时 - 检查网络连接状态 - 验证WebUI服务器是否正常运行 - 确认防火墙设置允许HTTP请求

2. JSON解析错误 - 验证响应内容是否为有效的JSON格式 - 检查网络传输过程中是否有数据损坏 - 确认客户端的JSON解析库版本兼容性

3. 状态信息不准确 - 检查系统时间同步状态 - 验证内存管理器是否正常工作 - 确认网络管理器的回调函数是否正确注册

4. 设备数量显示异常 - 检查BLE扫描功能是否正常启动 - 验证HCI传输层通信状态 - 确认设备过滤配置参数设置正确

调试建议

启用调试日志: 1. 在开发环境中启用详细的日志输出 2. 监控API调用的响应时间和错误率 3. 记录异常情况的上下文信息

性能监控: 1. 定期检查内存使用情况 2. 监控CPU使用率和任务调度状态 3. 分析网络带宽使用情况

章节来源 - main.c

结论

GET /api/status接口提供了ESP32S3 BLE网关系统的核心状态信息,通过简洁的JSON格式为客户端提供了全面的系统监控能力。该接口设计合理,实现了良好的模块化架构,便于维护和扩展。

接口的主要优势包括: - 实时性: 提供系统运行时的即时状态信息 - 完整性: 覆盖系统各个关键组件的状态 - 易用性: 简洁的JSON格式便于各种编程语言处理 - 可靠性: 完善的错误处理和状态管理机制

建议在生产环境中结合实际需求,合理设置监控频率,并建立完善的告警机制来及时发现和处理系统异常。