Lua 应用开发Vela 能力模块

topic

主题消息订阅模块(uORB)

主题消息订阅模块。

topic.subscribe(name, callback)

local sub = topic.subscribe("some_topic", function(data)
    print(data)
end)
参数类型说明
namestring主题名称
callbackfunction消息回调

返回值:miwear.topic userdata,支持以下方法:

方法说明
sub:unsubscribe取消订阅
sub:frequency设置/查询频率(参数格式待验证)

在非应用上下文中调用会报 null uv loop 错误。

可用主题

系统共注册 47 个 uORB 主题,均可作为 topic.subscribe(name) 的参数。

传感器

主题名说明已知字段
sensor_accel加速度计
sensor_accel_uncal加速度计(未校准)
sensor_gyro陀螺仪
sensor_gyro_uncal陀螺仪(未校准)
sensor_mag磁力计
sensor_mag_uncal磁力计(未校准)
sensor_orientation方向
sensor_baro气压计
sensor_temp温度timestamp, temperature
sensor_humi湿度
sensor_light环境光timestamp, light, ir
sensor_prox接近传感器
sensor_hrate心率
sensor_hinge_angle铰链角度(3 个实例)
sensor_wrist_tilt抬腕检测
sensor_ots光学追踪

GNSS

主题名说明
sensor_gnssGNSS 定位数据
sensor_gnss_clockGNSS 时钟
sensor_gnss_measurementGNSS 测量值
sensor_gnss_satelliteGNSS 卫星信息
sensor_gnss_geofence_eventGNSS 地理围栏事件

算法

主题名说明
algo_manager算法管理器
algo_sleep睡眠检测
algo_off_body离腕检测
algo_wrist_tilt抬腕算法

事件

主题名说明
event_basic_timer基础定时器事件
event_time时间事件
event_new_day新一天事件
event_data_sync数据同步事件

系统状态

主题名说明
screen_status屏幕状态(2 个实例)
battery_state电池状态
bt_stack_state蓝牙协议栈状态
activity_managerActivity 管理器
miwear_eventMiWear 系统事件
system_event系统事件
cpeventCP 事件

数据

主题名说明
topic_data_vigor活力数据
topic_data_hr心率数据
phone_sport_data_v2a手机运动数据 (v2a)
phone_sport_data_v2d手机运动数据 (v2d)
data_triple_loop三环数据
app_data_update应用数据更新

其他

主题名说明
sport_notify运动通知
daily_remind日常提醒
deco_report装饰报告

社区补充(洛汐文档库)

以下内容来自洛汐文档库《topic 消息订阅》:https://docs.luoxe.cn/docs/vela/lua/topic/

topic 用于订阅系统 uORB 主题。它适合传感器与系统事件流;表盘常规时间、天气和健康值优先使用 dataman。使用前先引入模块:

local topic = require("topic")

洛汐文档库列出的主题分类与上文“可用主题”一致(传感器 / GNSS / 算法 / 时间与数据事件 / 系统状态 / 业务数据 / 其他,共 47 个 uORB 主题)。

subscribe 示例

local sub = topic.subscribe("sensor_temp", function(data)
  print(data.timestamp, data.temperature)
end)

返回值是 miwear.topic userdata。

subscription 方法(补充说明)

方法说明
sub:unsubscribe取消订阅;重复取消会报错
sub:frequency(...)查询或设置频率;参数格式随主题与系统版本变化

离开页面前应主动取消:

function pageOnPause
  if sub then
    sub:unsubscribe
    sub = nil
  end
end

使用注意点

  • 主题存在不代表当前设备拥有对应传感器。
  • 订阅未知主题会失败。
  • 没有宿主事件循环时(非应用上下文)会出现 null uv loop 错误。

数据结构探测

payload 可能是 table、userdata 或标量。先做安全枚举:

local function dump(value)
  print("payload type", type(value))
  if type(value) == "table" then
    for k, v in pairs(value) do print(k, v) end
  end
end

local sub = topic.subscribe("battery_state", dump)

不要把某一主题的字段布局套用到另一机型;元数据大小不匹配时宿主会拒绝派发。

机型可用性

机型可用性
Xiaomi Smart Band 10 Pro✅
Xiaomi Watch S4 41mm✅

参考来源:官方 docs-lua / 洛汐文档库

大纲