IoT Domain
本技能面向 Rust 物联网应用开发,定位为领域约束层(Layer 3: Domain Constraints),将物联网领域规则转化为具体的设计约束与 Rust 实现要求。
领域约束与设计含义
技能以表格形式给出“领域规则 → 设计约束 → Rust 含义”的对应关系:
- 网络不可靠 → 离线优先(Offline-first)→ 本地缓冲(Local buffering)
- 功耗约束 → 高效代码 → 休眠模式、最小化分配
- 资源受限 → 小占用体积 → 必要时使用
no_std - 安全性 → 加密通信 → TLS、签名固件
- 可靠性 → 自恢复 → 看门狗、错误处理
- OTA 更新 → 安全升级 → 回滚能力
关键约束
技能列出了几条关键规则(RULE / WHY / RUST):
- 网络不可靠:网络可能随时失败,原因是无线与远程环境;Rust 侧应采用本地队列与带退避的重试。
- 电源管理:需最小化功耗,原因是电池寿命与能源成本;Rust 侧应采用休眠模式与高效算法。
- 设备安全:所有通信必须加密,原因是可能存在物理访问;Rust 侧应使用 TLS 与签名消息。
从约束到设计(Layer 2)
技能给出从约束推导到设计模式与具体实现的追踪路径:
- “需要离线优先设计” →
m12-lifecycle:带持久化的本地缓冲;m13-domain-error:带退避的重试 - “需要能效” →
domain-embedded:no_std模式;m10-performance:最小化分配 - “需要可靠消息传递” →
m07-concurrency:带超时的异步;MQTT:QoS 等级
运行环境对比
技能对比了三种环境的技术栈与 crate:
- Linux 网关:
tokio + std,使用rumqttc、reqwest - MCU 设备:
embassy + no_std,使用embedded-hal - 混合架构:拆分工作负载,两者兼用
关键 crate
技能列出各用途对应的 crate:
- MQTT(std):
rumqttc、paho-mqtt - 嵌入式:
embedded-hal、embassy - 异步(std):
tokio - 异步(no_std):
embassy - 日志(no_std):
defmt - 日志(std):
tracing
设计模式
技能给出模式、用途与实现方式:
- Pub/Sub:设备通信,通过 MQTT 主题实现
- 边缘计算:本地处理,上传前先过滤
- OTA 更新:固件升级,签名加回滚
- 电源管理:电池寿命,休眠与唤醒事件
- 存储转发(Store & forward):网络可靠性,本地队列
代码模式:MQTT 客户端
技能提供了一个基于 rumqttc::AsyncClient 的异步 MQTT 示例,主要内容包括:创建 MqttOptions 并设置 keep-alive(30 秒);以 AsyncClient::new(options, 10) 创建客户端与事件循环;订阅 devices/device-1/commands,QoS 为 AtLeastOnce;通过 tokio::spawn 循环读取传感器数据并发布到 devices/device-1/telemetry,间隔 60 秒;主循环调用 eventloop.poll() 处理事件,出错时记录错误并等待 5 秒重试。
常见错误
技能列出常见错误及其所属的领域违规与修复方式:
- 没有重试逻辑 → 数据丢失 → 指数退避
- 无线电常开 → 电池耗尽 → 发送之间休眠
- 未加密 MQTT → 安全风险 → TLS
- 没有本地缓冲 → 网络中断即数据丢失 → 本地持久化
追踪到 Layer 1
从约束到 Layer 2 模式再到 Layer 1 实现的对应:
- 离线优先 → 存储转发 → 本地队列加刷新
- 能效 → 休眠模式 → 基于定时器的唤醒
- 网络可靠性 → 重试 →
tokio-retry、退避 - 安全 → TLS →
rustls、native-tls
相关技能
技能指出相关场景与对应技能:嵌入式模式见 domain-embedded,异步模式见 m07-concurrency,错误恢复见 m13-domain-error,性能见 m10-performance。