Domain Iot

作者 actionbook5c40d3ad7851无许可证1.5K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库6周前更新

Use when building IoT apps. Keywords: IoT, Internet of Things, sensor, MQTT, device, edge computing, telemetry, actuator, smart home, gateway, protocol, 物联网, 传感器, 边缘计算, 智能家居

AI 生成的概览

面向 Rust 物联网应用开发的参考指南,涵盖 MQTT、边缘计算、功耗、安全与 OTA 约束。

功能
该技能提供物联网软件的领域约束与设计指导,把网络不可靠、功耗限制、资源限制和设备安全等规则映射为 Rust 设计影响。它列出 Linux 网关、MCU 设备与混合架构的环境技术栈与 crate,并给出发布/订阅、边缘计算、OTA 升级和存储转发等设计模式。文档还包含一个 MQTT 客户端代码示例,以及常见错误和相关技能对照表。
适用场景
在设计与实现物联网应用时使用,尤其是使用 Rust 且需要离线优先、低功耗、加密通信或固件升级的场景。在为网关与嵌入式目标选择 std 或 no_std 技术栈及 MQTT crate 时也适用。
运行要求
无脚本或附带资源,仅为说明文档。实践其中的示例需要 Rust 工具链以及 rumqttc、tokio、embassy 或 embedded-hal 等 crate,示例客户端还需要能访问 MQTT 代理的网络。

IoT Domain

Layer 3: Domain Constraints

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

Critical Constraints

Network Unreliability

RULE: Network can fail at any timeWHY: Wireless, remote locationsRUST: Local queue, retry with backoff

Power Management

RULE: Minimize power consumptionWHY: Battery life, energy costsRUST: Sleep modes, efficient algorithms

Device Security

RULE: All communication encryptedWHY: Physical access possibleRUST: TLS, signed messages

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

Environment Comparison

EnvironmentStackCrates
Linux gatewaytokio + stdrumqttc, reqwest
MCU deviceembassy + no_stdembedded-hal
HybridSplit workloadsBoth

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

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

Code Pattern: MQTT Client

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

Trace to Layer 1

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

Related Skills

WhenSee
Embedded patternsdomain-embedded
Async patternsm07-concurrency
Error recoverym13-domain-error
Performancem10-performance

来源与署名

来源:actionbook/rust-skills位于skills/domain-iot提交5c40d3a

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架