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. 04ロールバック対応の OTA 更新
  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

環境の比較

環境スタッククレート
Linux ゲートウェイtokio + stdrumqttc, reqwest
MCU デバイスembassy + no_stdembedded-hal
ハイブリッドワークロードを分割両方

主なクレート

用途クレート
MQTT(std)rumqttc, paho-mqtt
組み込みembedded-hal, embassy
非同期(std)tokio
非同期(no_std)embassy
ロギング(no_std)defmt
ロギング(std)tracing

設計パターン

パターン目的実装
Pub/Subデバイス通信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, backoff
セキュリティTLSrustls, native-tls

関連スキル

条件参照先
組み込みパターンdomain-embedded
非同期パターンm07-concurrency
エラー復旧m13-domain-error
パフォーマンスm10-performance

コメント