mcpField
D
domain-iot

domain-iot

github.com/actionbook开发1.6k2.8k 次安装9 周前更新
代码仓库

关于 domain-iot

面向 Rust IoT 开发的领域技能,说明网络不稳定、功耗和设备安全等约束如何影响设计,并涵盖网关与 MCU 环境。

主要功能

  1. 01离线优先与本地缓冲
  2. 02低功耗与睡眠模式
  3. 03加密通信与固件签名
  4. 04OTA 更新与回滚
  5. 05网关和 MCU 技术栈参考

适用场景

  1. 01为网络中断设计数据暂存与重试
  2. 02减少电池设备的无线活动
  3. 03规划带回滚能力的固件升级

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/actionbook/rust-skills --skill domain-iot

安装后在 Claude Code 中输入/domain-iot确认已加载。

详细介绍

IoT 领域

第 3 层:领域约束

领域约束 → 设计影响

领域规则设计约束Rust 影响
网络不可靠离线优先本地缓冲
电源限制高效代码睡眠模式、尽量少分配
资源限制小型化必要时使用 no_std
安全性加密通信TLS、签名固件
可靠性自我恢复看门狗、错误处理
OTA 更新安全升级回滚能力

关键约束

网络不可靠
RULE: Network can fail at any time
WHY: Wireless, remote locations
RUST: Local queue, retry with backoff
电源管理
RULE: Minimize power consumption
WHY: Battery life, energy costs
RUST: Sleep modes, efficient algorithms
设备安全
RULE: All communication encrypted
WHY: Physical access possible
RUST: TLS, signed messages

向下追溯 ↓

从约束追溯到设计(第 2 层):

"Need offline-first design"
    ↓ m12-lifecycle: Local buffer with persistence
    ↓ m13-domain-error: Retry with backoff

"Need power efficiency"
    ↓ domain-embedded: no_std patterns
    ↓ m10-performance: Minimal allocations

"Need reliable messaging"
    ↓ m07-concurrency: Async with timeout
    ↓ MQTT: QoS levels

环境比较

环境技术栈Crate
Linux 网关tokio + stdrumqttc、reqwest
MCU 设备embassy + no_stdembedded-hal
混合型拆分工作负载两者

关键 Crate

用途Crate
MQTT(std)rumqttc、paho-mqtt
嵌入式embedded-hal、embassy
异步(std)tokio
异步(no_std)embassy
日志记录(no_std)defmt
日志记录(std)tracing

设计模式

模式用途实现方式
发布/订阅设备通信MQTT 主题
边缘计算本地处理上传前过滤
OTA 更新固件升级签名 + 回滚
电源管理电池续航睡眠 + 唤醒事件
存储转发网络可靠性本地队列

代码模式:MQTT 客户端

use rumqttc::{AsyncClient, MqttOptions, QoS};

async fn run_mqtt() -> anyhow::Result<()> {
    let mut options = MqttOptions::new("device-1", "broker.example.com", 1883);
    options.set_keep_alive(Duration::from_secs(30));

    let (client, mut eventloop) = AsyncClient::new(options, 10);

    // Subscribe to commands
    client.subscribe("devices/device-1/commands", QoS::AtLeastOnce).await?;

    // Publish telemetry
    tokio::spawn(async move {
        loop {
            let data = read_sensor().await;
            client.publish("devices/device-1/telemetry", QoS::AtLeastOnce, false, data).await.ok();
            tokio::time::sleep(Duration::from_secs(60)).await;
        }
    });

    // Process events
    loop {
        match eventloop.poll().await {
            Ok(event) => handle_event(event).await,
            Err(e) => {
                tracing::error!("MQTT error: {}", e);
                tokio::time::sleep(Duration::from_secs(5)).await;
            }
        }
    }
}

常见错误

错误违反的领域规则修复方法
没有重试逻辑数据丢失指数退避
无线电始终开启电池耗电发送间隔期间休眠
MQTT 未加密安全风险TLS
没有本地缓冲区网络中断 = 数据丢失在本地持久化

追溯到第 1 层

约束第 2 层模式第 1 层实现
离线优先存储转发本地队列 + 刷新
电源效率睡眠模式基于计时器唤醒
网络可靠性重试tokio-retry、退避
安全性TLSrustls、native-tls

相关技能

适用场景参见
嵌入式模式domain-embedded
异步模式m07-concurrency
错误恢复m13-domain-error
性能m10-performance

评论

支持 Markdown