domain-iot

Use when building IoT apps. Keywords: IoT, Internet of Things, sensor, MQTT, device, edge computing, telemetry, actuator, smart home, gateway, protocol, 物联网,…

INSTALLATION
npx skills add https://github.com/actionbook/rust-skills --skill domain-iot
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

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 time

WHY: Wireless, remote locations

RUST: Local queue, retry with backoff

Power Management

RULE: Minimize power consumption

WHY: Battery life, energy costs

RUST: Sleep modes, efficient algorithms

Device Security

RULE: All communication encrypted

WHY: Physical access possible

RUST: 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

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
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card