跳转至

说明

概述

命令模块为传感操作提供 MQTT 远程控制功能。它允许用户通过 MQTT 命令控制在线和离线传感,实现传感器数据采集的远程监控和控制。

命令格式

所有传感类命令以 SENSE, 开头,用于区分其他命令类型。

命令结构

SENSE,<TYPE>,<ACTION>,<PARAMETERS>

其中: - <TYPE>: ONLINEOFFLINE - <ACTION>: 命令操作(如 F=, D=, STOP, STATUS) - <PARAMETERS>: 命令特定参数

在线传感命令

启动/配置在线传感

SENSE,ONLINE,F=<频率>,D=<持续时间>
  • F: 采样频率(Hz,浮点数,范围:0.1 - 10000 Hz)
  • D: 持续时间(秒,浮点数,0 表示持续运行)

示例: - SENSE,ONLINE,F=20,D=60 - 20 Hz 采样,持续 60 秒 - SENSE,ONLINE,F=1,D=0 - 1 Hz 采样,持续运行

停止在线传感

SENSE,ONLINE,STOP

立即停止在线传感操作。

查询在线传感状态

SENSE,ONLINE,STATUS

返回在线传感的当前状态和配置。

离线传感命令

立即启动

SENSE,OFFLINE,F=<频率>,D=<采样时长>
  • F: 采样频率(Hz,浮点数,范围:1 - 4000 Hz)
  • D: 采样时长(秒,浮点数,必须 > 0)

示例: - SENSE,OFFLINE,F=100,D=10 - 100 Hz 采样,持续 10 秒

延迟启动

SENSE,OFFLINE,F=<频率>,D=<采样时长>,DL=<延迟秒数>
  • DL: 延迟时间(秒,整数,>= 0)

示例: - SENSE,OFFLINE,F=100,D=10,DL=5 - 5 秒后开始,然后以 100 Hz 采样 10 秒

定时启动

SENSE,OFFLINE,F=<频率>,D=<采样时长>,TIME=<YYMMDDHHMMSS>
  • TIME: 时间格式 YYMMDDHHMMSS(12 位数字)
  • YY: 年份后两位(00-99,表示 2000-2099)
  • MM: 月份(01-12)
  • DD: 日期(01-31)
  • HH: 小时(00-23)
  • MM: 分钟(00-59)
  • SS: 秒(00-59)

示例: - SENSE,OFFLINE,F=100,D=10,TIME=251216200000 - 在 2025-12-16 20:00:00 开始

停止离线传感

SENSE,OFFLINE,STOP

如果离线传感正在运行,则停止该操作。

查询离线传感状态

SENSE,OFFLINE,STATUS

返回离线传感的当前状态。

响应格式

命令执行后,设备通过 MQTT 发布响应消息:

成功响应

  • SENSE,OK,ONLINE,F=20.00,D=60.00 - 在线传感启动成功
  • SENSE,OK,ONLINE,STOPPED - 在线传感停止成功
  • SENSE,OK,OFFLINE,F=100.00,D=10.00 - 离线传感启动成功
  • SENSE,OK,OFFLINE,SAMPLES=1000,FREQ=100.00,DUR=10.00,SD=OK - 离线传感完成

错误响应

  • SENSE,ERROR,ONLINE,INVALID_FREQ - 无效的频率参数
  • SENSE,ERROR,OFFLINE,ALREADY_RUNNING - 离线传感已在运行
  • SENSE,ERROR,OFFLINE,TIME_PAST - 定时时间已过期
  • SENSE,ERROR,SENSOR_NOT_INITIALIZED - 传感器未初始化

实现细节

命令处理架构

命令处理器使用基于队列的架构:

  1. 命令队列:命令被排队处理,避免阻塞 MQTT 回调
  2. 命令处理任务:专用的 FreeRTOS 任务从队列中处理命令
  3. 非阻塞操作:长时间运行的操作(如离线传感)在单独的任务中执行

参数解析

模块包含健壮的参数解析函数:

  • parse_float_param(): 提取浮点参数(如 F=20.5
  • parse_int_param(): 提取整数参数(如 DL=5
  • parse_time_param(): 解析 YYMMDDHHMMSS 格式的时间字符串

线程安全

  • 命令通过队列顺序处理
  • 传感器句柄在处理命令前设置
  • 状态检查防止并发操作

使用注意事项

  1. 传感器初始化:在处理命令之前,必须使用 sensing_command_set_sensor_handle() 设置传感器句柄。

  2. MQTT 连接:必须连接 MQTT 才能处理命令和发布响应。

  3. 时间同步:对于定时启动(TIME 参数),系统时间必须同步(NTP)。

  4. 并发操作:系统防止在离线传感已运行时启动新的离线传感,但可以在线传感停止并使用新参数重新启动。

  5. 命令格式:命令区分大小写,必须遵循确切格式。多余的空格会自动修剪。

错误处理

命令处理器验证:

  • 命令格式和结构
  • 参数范围(频率、持续时间、延迟)
  • 系统状态(传感器初始化、运行状态)
  • 时间有效性(对于定时操作)

所有错误都通过 MQTT 响应消息报告,便于远程调试。