domain-iot

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

IoT Domain

IoT 领域

Layer 3: Domain Constraints
第3层:领域约束

Domain Constraints → Design Implications

领域约束 → 设计影响

Domain RuleDesign ConstraintRust Implication
Unreliable networkOffline-firstLocal buffering
Power constraintsEfficient codeSleep modes, minimal alloc
Resource limitsSmall footprintno_std where needed
SecurityEncrypted commsTLS, signed firmware
ReliabilitySelf-recoveryWatchdog, error handling
OTA updatesSafe upgradesRollback capability

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

Critical Constraints

关键约束

Network Unreliability

网络不可靠性

RULE: Network can fail at any time
WHY: Wireless, remote locations
RUST: Local queue, retry with backoff
RULE: 网络可能随时中断
WHY: 无线连接、偏远位置
RUST: 本地队列、退避重试

Power Management

电源管理

RULE: Minimize power consumption
WHY: Battery life, energy costs
RUST: Sleep modes, efficient algorithms
RULE: 最小化功耗
WHY: 电池寿命、能源成本
RUST: 睡眠模式、高效算法

Device Security

设备安全性

RULE: All communication encrypted
WHY: Physical access possible
RUST: TLS, signed messages

RULE: 所有通信必须加密
WHY: 可能被物理访问
RUST: TLS、签名消息

Trace Down ↓

向下追溯 ↓

From constraints to design (Layer 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

从约束到设计(第2层):
"需要离线优先设计"
    ↓ m12-lifecycle: 带持久化的本地缓冲区
    ↓ m13-domain-error: 退避重试

"需要功耗效率"
    ↓ domain-embedded: no_std 模式
    ↓ m10-performance: 最小化内存分配

"需要可靠消息传递"
    ↓ m07-concurrency: 带超时的异步处理
    ↓ MQTT: QoS 级别

Environment Comparison

环境对比

EnvironmentStackCrates
Linux gatewaytokio + stdrumqttc, reqwest
MCU deviceembassy + no_stdembedded-hal
HybridSplit workloadsBoth
环境技术栈依赖库
Linux网关tokio + stdrumqttc, reqwest
MCU设备embassy + no_stdembedded-hal
混合环境拆分工作负载两者兼具

Key Crates

核心依赖库

PurposeCrate
MQTT (std)rumqttc, paho-mqtt
Embeddedembedded-hal, embassy
Async (std)tokio
Async (no_std)embassy
Logging (no_std)defmt
Logging (std)tracing
用途依赖库
MQTT (std)rumqttc, paho-mqtt
嵌入式开发embedded-hal, embassy
异步处理 (std)tokio
异步处理 (no_std)embassy
日志 (no_std)defmt
日志 (std)tracing

Design Patterns

设计模式

PatternPurposeImplementation
Pub/SubDevice commsMQTT topics
Edge computeLocal processingFilter before upload
OTA updatesFirmware upgradeSigned + rollback
Power mgmtBattery lifeSleep + wake events
Store & forwardNetwork reliabilityLocal queue
模式用途实现方式
发布/订阅设备通信MQTT 主题
边缘计算本地处理上传前过滤
OTA更新固件升级签名 + 回滚
电源管理电池寿命睡眠 + 唤醒事件
存储转发网络可靠性本地队列

Code Pattern: MQTT Client

代码模式:MQTT 客户端

rust
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;
            }
        }
    }
}

rust
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;
            }
        }
    }
}

Common Mistakes

常见错误

MistakeDomain ViolationFix
No retry logicLost dataExponential backoff
Always-on radioBattery drainSleep between sends
Unencrypted MQTTSecurity riskTLS
No local bufferNetwork outage = data lossPersist locally

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

Trace to Layer 1

追溯到第1层

ConstraintLayer 2 PatternLayer 1 Implementation
Offline-firstStore & forwardLocal queue + flush
Power efficiencySleep patternsTimer-based wake
Network reliabilityRetrytokio-retry, backoff
SecurityTLSrustls, native-tls

约束第2层模式第1层实现
离线优先存储转发本地队列 + 刷新
功耗效率睡眠模式定时器唤醒
网络可靠性重试tokio-retry, backoff
安全性TLSrustls, native-tls

Related Skills

相关技能

WhenSee
Embedded patternsdomain-embedded
Async patternsm07-concurrency
Error recoverym13-domain-error
Performancem10-performance
场景参考内容
嵌入式模式domain-embedded
异步模式m07-concurrency
错误恢复m13-domain-error
性能优化m10-performance