Agent skill
physical-event
物理デバイスからのイベントを統一的に処理するためのスキルセット
Install this agent skill to your Project
npx add-skill https://github.com/chronista-club/unison/tree/main/.claude/skills/physical-event
SKILL.md
Physical Event Skills
物理デバイスからのイベントを統一的に処理し、Vantage Hubシステムと連携させるためのスキルセットです。
概要
Physical Event Systemは、GPIO、USB、シリアル通信、ネットワークデバイスなど、様々な物理デバイスからのイベントを統一的なインターフェースで扱うためのシステムです。イベント駆動アーキテクチャにより、リアルタイムで効率的なイベント処理を実現します。
主要コンポーネント
1. Event Manager
すべてのイベントソースとハンドラーを統合管理する中央コンポーネント。
2. Event Bus
非同期でイベントを配信するメッセージングシステム。
3. Event Sources
- GPIO: ピン状態の変化を監視
- USB: デバイスの接続/切断を検出
- Serial: シリアルポートからのデータ受信
- Network: mDNSによるデバイス発見
4. Event Handlers
イベントを受信して処理するコンポーネント。
クイックスタート
基本的な使用例
use physical_event::{PhysicalEventManager, EventBus, Config};
#[tokio::main]
async fn main() -> Result<()> {
// 設定を作成
let config = Config::default();
// イベントバスを作成
let event_bus = EventBus::new(config.event_bus)?;
// マネージャーを作成
let mut manager = PhysicalEventManager::new(
Arc::new(event_bus),
config
)?;
// ハンドラーを登録
manager.register_handler(Box::new(LoggerHandler::new())).await?;
// 開始
manager.start().await?;
Ok(())
}
GPIO監視の設定
#[cfg(feature = "gpio")]
use physical_event::gpio::GpioEventSource;
let gpio_source = GpioEventSource::builder()
.id("door_sensor")
.pins(vec![17, 27])
.debounce_ms(50)
.build()?;
manager.register_source(Box::new(gpio_source)).await?;
サポートするイベントタイプ
1. GPIOイベント
- ピンの状態変化(HIGH/LOW)
- エッジ検出(立ち上がり/立ち下がり)
2. USBイベント
- デバイス接続
- デバイス切断
- ベンダーID/プロダクトIDによる識別
3. シリアル通信イベント
- データ受信
- 設定可能なバッファサイズ
- 複数のポート同時監視
4. ネットワークイベント
- mDNSデバイス発見
- サービスタイプ別の検出
- デバイスの消失検出
5. カスタムイベント
- 任意のJSONデータ
- カテゴリ別の分類
- 拡張可能なメタデータ
いつ使うか
Physical Eventが適している場合
✅ IoTデバイスの統合
- センサーデータの収集
- アクチュエータの制御
- デバイス状態の監視
✅ ホームオートメーション
- ドア/窓センサー
- 温度/湿度センサー
- モーション検知
✅ 産業用アプリケーション
- 機器の状態監視
- アラーム検知
- データ収集
✅ プロトタイピング
- ハードウェアの動作検証
- センサーデータの可視化
- リアルタイムモニタリング
実装パターン
フィルタリング
let filter = EventFilter::new()
.with_sources(vec!["gpio".to_string()])
.with_time_range(Some(start_time), None);
バッチ処理
let batch_handler = BatchHandler::new(
100, // バッチサイズ
Duration::from_secs(1), // タイムアウト
|events| process_batch(events)
);
エラーハンドリング
let retry_handler = RetryHandler::new(
inner_handler,
3, // 最大リトライ回数
Duration::from_millis(100) // リトライ間隔
);
トラブルシューティング
よくある問題
権限エラー
# GPIO権限の問題
sudo usermod -a -G gpio $USER
# ログアウト後に再ログイン
デバイスが見つからない
# デバッグログを有効化
RUST_LOG=physical_event=debug cargo run
# 利用可能なデバイスをリスト
ls /dev/tty* # シリアルポート
lsusb # USBデバイス
イベントの欠落
- バッファサイズを増やす
- 処理時間を最適化
- 非同期処理を活用
パフォーマンス考慮事項
1. イベントレート
- 高頻度のイベントはバッチ処理
- 適切なデバウンス設定
- バッファサイズの調整
2. リソース使用
- CPUとメモリの監視
- 並行処理の最適化
- イベントフィルタリング
3. レイテンシ
- リアルタイム要件の確認
- 処理優先度の設定
- 非同期処理の活用
セキュリティ
- イベントソースの認証
- 機密データの暗号化
- アクセス制御の実装
- 監査ログの記録
関連ドキュメント
- Physical Event仕様書
- イベント定義詳細
- アーキテクチャガイド
- 実装ガイド
- APIリファレンス
参考資料
ハードウェア関連
Rustライブラリ
- rppal - Raspberry Pi Peripheral Access Library
- rusb - Rust USB Library
- serialport-rs
- mdns - Multicast DNS Library
イベント駆動アーキテクチャ
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
skills
SurrealDBを効率的に使うための実践的スキルセット
qdrant
git-worktree
mcp-builder
LLMが外部サービスと対話するための適切に設計されたツールを通じて、高品質なMCP (Model Context Protocol) サーバーを作成するためのガイド。Python (FastMCP)、Node/TypeScript (MCP SDK)、Rust (Tokio)で、外部APIやサービスを統合するMCPサーバーを構築する際に使用します。
hearing-first
実装前にユーザーの意向を段階的にヒアリングする手法
github
Didn't find tool you were looking for?