{"id":50581198,"url":"https://github.com/albert-einshutoin/roomci","last_synced_at":"2026-06-05T02:30:51.025Z","repository":{"id":359379957,"uuid":"1245807475","full_name":"albert-einshutoin/roomci","owner":"albert-einshutoin","description":"Local-first smart-home QA \u0026 operations emulator.  Reproduce field failures, test MQTT, edge servers,  and BMS operations in Docker for CI testing.","archived":false,"fork":false,"pushed_at":"2026-05-21T15:44:52.000Z","size":611,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T00:45:21.294Z","etag":null,"topics":["bms","ci","dali","docker","emulator","hvac","iot","knx","modbus","mqtt","smart-home"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/albert-einshutoin.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-21T15:18:20.000Z","updated_at":"2026-05-21T15:48:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/albert-einshutoin/roomci","commit_stats":null,"previous_names":["albert-einshutoin/roomci"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/albert-einshutoin/roomci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albert-einshutoin%2Froomci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albert-einshutoin%2Froomci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albert-einshutoin%2Froomci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albert-einshutoin%2Froomci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/albert-einshutoin","download_url":"https://codeload.github.com/albert-einshutoin/roomci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albert-einshutoin%2Froomci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33927314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bms","ci","dali","docker","emulator","hvac","iot","knx","modbus","mqtt","smart-home"],"created_at":"2026-06-05T02:30:49.606Z","updated_at":"2026-06-05T02:30:51.018Z","avatar_url":"https://github.com/albert-einshutoin.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# roomci\n\n[![CI](https://img.shields.io/badge/ci-make%20verify-blue.svg)](#quality-gates)\n[![Rust](https://img.shields.io/badge/rust-stable-orange.svg)](https://www.rust-lang.org)\n[![Coverage](https://img.shields.io/badge/coverage-84.51%25-green.svg)](#quality-gates)\n[![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n\n📖 **[日本語](README.ja.md)** | **[English](README.md)**\n\n**MQTT / Edge / デバイス QA コントラクト エミュレーター for CI**\n\n`roomci` は Docker 対応の **QA コントラクト エミュレーター**で、MQTT ベースのエッジ、スマートホーム、建築オートメーションシステム向けです。コマンド/状態コントラクト、ローカルファースト障害モード、デバイスアダプターの動作、コミッショニングチェック、オペレーション エスカレーションを再現可能なローカル環境および CI シナリオに変換します。\n\nこれは **動作エミュレーター**です：コントローラー、エッジサービス、デバイスアダプター、またはオペレーションフローが満たすべき動作を検証します。実デバイスやオンサイト環境は不要です。\n\n設計は **LocalStack に似たエミュレーター**ですが、MQTT/edge/デバイス QA 向けです：\n\n- LocalStack：ローカルおよび CI テスト用にクラウドサービスをエミュレート\n- roomci：ローカルおよび CI テスト用にデバイス、エッジ、MQTT、オペレーション コントラクトをエミュレート\n\n## タグライン\n\n\u003e エッジデバイスとスマートホームのフィールド障害をユーザーが経験する前に再現する。\n\n## 存在意義\n\nMQTT およびエッジデバイスの品質は、単一のコマンドが機能するかどうかではありません。状態同期、保持メッセージ、ローカルファースト制御、エッジフェイルオーバー、デバイスアダプターの動作、およびオペレーション エスカレーションが現実的な障害モードに耐えられるかどうかです。\n\nホスピタリティスマートホームは最も強力に含まれるドメインパックです。障害がゲストエクスペリエンスに直接影響するためです：クラウド停止、ライティング シーンドリフト、アクセス許可ドリフト、快適性自動化、BMS エスカレーション。`roomci` はこのドメイン特有の深さをモデル化しつつ、再利用可能な QA コントラクト エミュレーターのアプリケーションとしてフレーム化します。\n\n`roomci` はこれらの障害モードを、ローカル環境、Docker、または CI で実行できる再現可能なシナリオに変換します。\n\n## 最強のデモを試す\n\nローカルファースト停止シナリオを詳細なタイムラインで実行：\n\n```bash\ncargo run -p roomci-cli -- run examples/local_first_cloud_outage.yaml --verbose\n```\n\n次に、意図的な障害レポートデモを実行：\n\n```bash\ncargo run -p roomci-cli -- run examples/dali_scene_partial_failure.yaml \\\n  --report-md reports/dali_scene_partial_failure.md\n```\n\n期待される結果：`roomci run` は終了コード `1` で終了し、ゲスト影響レポートを書き込みます。\n\nレポート抜粋：\n\n```text\nResult: failed\nscene_consistency:welcome\nDALI-like scene consistency violation: D411S10 expected level 60, actual 0\nGuest impact: Lighting scene did not match intended guest ambience.\n```\n\n完全なインタビューウォークスルーについては、[`docs/INTERVIEW_DEMO.md`](docs/INTERVIEW_DEMO.md) を参照してください。プロダクト ポジショニングについては、[`docs/PRODUCT_POSITIONING.md`](docs/PRODUCT_POSITIONING.md)、[`docs/DOMAIN_PACKS.md`](docs/DOMAIN_PACKS.md)、[`docs/GENERIC_MQTT_CONTRACTS.md`](docs/GENERIC_MQTT_CONTRACTS.md) を参照してください。\nプロダクト境界については、[`docs/HOSPITALITY_STACK_COVERAGE.md`](docs/HOSPITALITY_STACK_COVERAGE.md) および [`docs/CORE_QA_JOURNEY.md`](docs/CORE_QA_JOURNEY.md) を参照してください。プロトコル サブセット主張については、[`docs/PROTOCOL_CONFORMANCE_REGISTRY.md`](docs/PROTOCOL_CONFORMANCE_REGISTRY.md) を参照してください。\n\n評価者オンボーディングの場合は、[`docs/INTEGRATION_ONBOARDING.md`](docs/INTEGRATION_ONBOARDING.md)、[`docs/EVALUATION_EVIDENCE_PACK.md`](docs/EVALUATION_EVIDENCE_PACK.md)、[`docs/CATEGORY_READINESS.md`](docs/CATEGORY_READINESS.md) を使用してください。\n\n## クイックスタート\n\n```bash\n# フルキュレーションデモ\nmake demo\n\n# ホスピタリティスマートホームドメインデモ\nmake demo-hospitality\n\n# 汎用 MQTT コントラクトデモ\nmake demo-generic-mqtt\n\n# 外部コントローラーコンテナを使用したブラックボックス serve モード PoC\nmake compose-poc\n\n# フル ローカル検証\nmake verify\n\n# ワークスペースをビルド\ncargo build --workspace --release\n\n# シナリオを検証\ncargo run --release -- validate examples/local_first_cloud_outage.yaml\n\n# 単一シナリオを実行してレポートを生成\ncargo run --release -- run examples/local_first_cloud_outage.yaml \\\n  --report-json reports/local_first.json \\\n  --report-md   reports/local_first.md \\\n  --junit       reports/local_first.xml\n\n# 複数シナリオを実行して終了コードを集約\ncargo run --release -- run \\\n  examples/local_first_cloud_outage.yaml \\\n  examples/modbus_floor_heating.yaml \\\n  examples/bms_sauna_emergency_alert.yaml \\\n  examples/access_permission_drift.yaml \\\n  examples/commissioning_checklist.yaml\n\n# ドライラン（検証のみ、実行しない）\ncargo run --release -- run --dry-run examples/comfort_auto_mode.yaml\n\n# 詳細なタイムライン出力\ncargo run --release -- run --verbose examples/edge_server_failover.yaml\n\n# サービスモード設定チェック\ncargo run --release -- serve --config examples/local_first_cloud_outage.yaml --check\n\n# localhost HTTP コントロール/レポート API を起動\ncargo run --release -- serve --config examples/generic_mqtt_retained_state.yaml --port 8080\n\n# HTTP に外部 PoC クライアント用の最小限の MQTT 入力を追加\ncargo run --release -- serve \\\n  --config examples/generic_mqtt_retained_state.yaml \\\n  --port 8080 \\\n  --mqtt-port 1883\n\n# または Docker イメージを使用\ndocker build -t roomci:latest .\ndocker run --rm -v \"$PWD/examples:/scenarios:ro\" roomci:latest \\\n  run /scenarios/starlink_failover.yaml\n```\n\n## デモパス\n\n| デモ | 対象者 | コマンド |\n|---|---|---|\n| キュレーション フル デモ | 一般的なプロダクト レビュー | `make demo` |\n| ホスピタリティ ドメインパック | ホスピタリティとスマートホーム エンジニアリングチーム | `make demo-hospitality` |\n| 汎用 MQTT コントラクト | MQTT / edge デバイス プラットフォームチーム | `make demo-generic-mqtt` |\n| Serve モード PoC | 外部コントローラー統合形状を検証するチーム | `make compose-poc` |\n\n## 合格デモシナリオ\n\n| シナリオ | 説明 |\n|---|---|\n| `examples/generic_mqtt_retained_state.yaml` | 汎用 MQTT コマンド/状態コントラクトは、ホスピタリティ命名なしで保持状態を更新します。 |\n| `examples/generic_mqtt_duplicate_delivery.yaml` | 重複 MQTT 配信は、保持されたコマンド/状態動作に対してべき等のままです。 |\n| `examples/local_first_cloud_outage.yaml` | iPad → ローカル MQTT → エッジ → デバイスは、クラウド ブローカーがオフラインの間も機能します。保持状態は停止期間中生き残ります。 |\n| `examples/edge_server_failover.yaml` | プライマリ エッジの電源が切れます。スタンバイが昇格され、次のコマンドをルーティングします。 |\n| `examples/modbus_floor_heating.yaml` | 床暖房設定値は Modbus レジスターに 0.1 °C 精度で到達します。 |\n| `examples/bms_sauna_emergency_alert.yaml` | サウナ過温度コンタクトが開きます。BMS は Slack、電話、チケット ランブックにエスカレートします。 |\n| `examples/starlink_failover.yaml` | 設定された予算内でのバックアップ WAN フェイルオーバー。 |\n| `examples/comfort_auto_mode.yaml` | 不快指数が HVAC 自動モードを駆動します。ユーザーオーバーライドは尊重されます。 |\n| `examples/comfort_timeseries_replay.yaml` | 決定論的なセンサーゾーン読み取りが不快指数エビデンスを更新します。 |\n| `examples/access_permission_drift.yaml` | ID グループに存在しなくなった古いアクセス システム ユーザーを検出します。 |\n| `examples/commissioning_checklist.yaml` | ルームとデバイス宣言からフィールド コミッショニング チェックを生成します。 |\n| `examples/intercom_relay_safe_mock.yaml` | PIN/通話/リレー エビデンスは、実際のロック制御なしでキャプチャされます。 |\n| `examples/network_control_panel_fault_profiles.yaml` | ネットワーク、ファイアウォール、UPS、回路、冗長 PSU 障害プロファイルが BMS エビデンスを発行します。 |\n\nこれらのシナリオは `roomci run` で合格することが想定されています。\n\n## プロトコル プロフィール フィクスチャ\n\nこれらの B Tier フィクスチャはカスタマー提供のプロトコル マップを `contract_profile` メタデータとして検証します。これらはワイヤプロトコル エンドポイントまたは認証エビデンスではありません。\n\n| シナリオ | 説明 |\n|---|---|\n| `examples/matter_gateway_profile.yaml` | Matter ゲートウェイ エンドポイント/クラスター/属性/コマンド マッピングをコントラクト エビデンスとして。 |\n| `examples/bacnet_contract_profile.yaml` | BACnet オブジェクト/プロパティ/イベント マッピングをコントラクト エビデンスとして。 |\n| `examples/knx_group_address_profile.yaml` | KNX グループアドレス/データポイント/機能マッピングをコントラクト エビデンスとして。 |\n| `examples/opcua_contract_profile.yaml` | OPC UA ノード/属性/イベント マッピングをコントラクト エビデンスとして。 |\n\n`make protocol-profile-smoke` で実行します。\n\n## ローカル VSCode オーサリング アセット\n\n`tools/vscode-roomci/` には、シナリオ作成向けのローカル専用 VSCode\nアセット バンドルがあります。YAML schema association、snippets、\n`roomci validate`、`roomci run`、`make verify`、`make protocol-evidence`\n向け task 定義を含みます。Marketplace extension ではありません。\n`make vscode-assets-check` で検証します。\n\n## 障害レポート デモシナリオ\n\n| シナリオ | 説明 |\n|---|---|\n| `examples/dali_scene_partial_failure.yaml` | DALI シーン有効化（1 つのフィクスチャが欠落）。`roomci run` は 0 以外で終了し、ゲスト影響障害レポートを生成します。 |\n\n## レポート\n\n`roomci run` は同一実行から CI フレンドリーなレポートおよびエビデンス形式を生成します：\n\n- `--report-json \u003cpath\u003e` — フル マシン可読実行レポート（タイムライン、アサーション、最終状態、保持 MQTT メッセージ）。\n- `--report-md \u003cpath\u003e` — ゲスト影響フレーミングを備えた人間が読み可能な Markdown サマリー。\n- `--junit \u003cpath\u003e` — CI ダッシュボード用 JUnit XML（GitHub Actions、GitLab CI、Jenkins）。\n- `--timeline-json \u003cpath\u003e` — ログ/検索/トレース取り込み用の安定タイムライン イベント エクスポート。\n- `--timeline-ndjson \u003cpath\u003e` — 改行区切りタイムライン イベント エクスポート。\n- `--observability-json \u003cpath\u003e` — 外部監視可能性取り込み用の決定論的カウンターおよび実行サマリー。\n- `--run-id \u003cid\u003e` — JSON、タイムライン、監視可能性アーティファクトで使用される安定実行相関 ID。\n\n`.github/workflows/smart-home-ci.yml` からの CI アーティファクトは、すべての合格デモシナリオおよび意図的な障害レポート デモのレポート、タイムライン、監視可能性形式をアップロードします。\n[`docs/S_TIER_EVIDENCE_GUIDE.md`](docs/S_TIER_EVIDENCE_GUIDE.md) で コピー\u0026ペースト評価者パスを参照してください。\n\nPython 自動化およびシナリオ デバッグについては、[`docs/DEVELOPER_WORKFLOW.md`](docs/DEVELOPER_WORKFLOW.md) を参照してください。\n\nMatter、BACnet、KNX、OPC UA コントラクト プロフィール境界については、[`docs/B_TIER_PROTOCOL_PROFILES.md`](docs/B_TIER_PROTOCOL_PROFILES.md) を参照してください。\n\n## CLI リファレンス\n\n```text\nroomci run \u003cscenarios...\u003e\n  --report-json \u003cpath\u003e   最後のシナリオの JSON レポートを書き込む\n  --report-md   \u003cpath\u003e   最後のシナリオの Markdown レポートを書き込む\n  --junit       \u003cpath\u003e   最後のシナリオの JUnit XML レポートを書き込む\n  --timeline-json \u003cpath\u003e 最後のシナリオの安定タイムライン JSON を書き込む\n  --timeline-ndjson \u003cpath\u003e\n                         安定改行区切りタイムライン JSON を書き込む\n  --observability-json \u003cpath\u003e\n                         監視可能性サマリー JSON を書き込む\n  --run-id \u003cid\u003e          エクスポートされたアーティファクトの実行相関 ID を設定\n  --verbose              すべてのタイムライン イベントを出力\n  --quiet                シナリオ単位の詳細を抑制\n  --dry-run              検証のみ。実行しない\n\nroomci validate \u003cscenarios...\u003e\n  1 つ以上のシナリオ ファイルを読み込んで検証し、実行しない\n\nroomci debug \u003cscenario\u003e\n  --debug-json \u003cpath\u003e    決定論的デバッグ JSON を書き込む\n  --debug-md   \u003cpath\u003e    決定論的デバッグ Markdown を書き込む\n\nroomci serve --config \u003cscenario\u003e --check\n  長時間実行プロセスを開始せずにサービスモード構成を検証\n\nroomci serve --config \u003cscenario\u003e\n  localhost バウンド HTTP コントロール/レポート API を起動\n\nroomci serve --config \u003cscenario\u003e --mqtt-port \u003cport\u003e\n  最小限の MQTT 3.1.1 CONNECT + QoS0 PUBLISH PoC 入力も起動\n```\n\n終了コード：`0`（すべてのシナリオ合格）、`1`（1 つ以上のアサーション失敗）、`2`（読み込み、検証、または実行時エラー）。\n\n## Serve モード HTTP API\n\n`roomci serve` はデフォルトで `127.0.0.1:8080` で起動します。`--allow-non-loopback` が渡されない限り、ループバック以外のホストを拒否します。\n\n現在の HTTP エンドポイント：\n\n- `GET /health`\n- `GET /scenario`\n- `GET /state`\n- `GET /timeline`\n- `GET /timeline.export.json`\n- `GET /timeline.ndjson`\n- `POST /fault`\n- `POST /run`\n- `POST /finish`\n- `GET /reports/latest`\n- `GET /reports/latest.json`\n- `GET /reports/latest.md`\n- `GET /reports/latest.junit.xml`\n- `GET /observability/latest.json`\n\nこれはローカル PoC 統合サーフェスであり、プロダクション API または MQTT ブローカー置き換えではありません。\n\n## Serve モード MQTT PoC\n\n`roomci serve --mqtt-port \u003cport\u003e` は外部 PoC クライアント用の最小限の MQTT 形状の入力を有効にします。MQTT 3.1.1 `CONNECT` および JSON オブジェクト ペイロード付き QoS0 `PUBLISH` をサポートします。発行されたトピックは、シナリオ ファイル内の `mqtt.contracts` と照合され、マッチするペイロードは HTTP 状態およびレポート エンドポイントで表示される保持状態を更新します。\n\n例：コントラクト：\n\n```yaml\nmqtt:\n  contracts:\n    - name: generic_device_retained_state\n      adapter: mqtt_v3_qos0_subset\n      command_topic: fleet/demo/site/lab/device/{device_id}/command\n      state_topic: fleet/demo/site/lab/device/{device_id}/state\n      device_id_from_topic: placeholder:{device_id}\n      payload:\n        required_fields: [online, sample_interval_seconds]\n```\n\nサポートされるサブセットは [サポートされるサブセット: [`docs/MQTT_SERVE_SUBSET.md`](docs/MQTT_SERVE_SUBSET.md) で文書化されています。統合チェックリストは [`docs/PRE_ADOPTION_POC_CHECKLIST.md`](docs/PRE_ADOPTION_POC_CHECKLIST.md) にあります。\n\n`roomci serve --modbus-port \u003cport\u003e` は外部 PoC クライアント用の最小限の Modbus TCP サブセットを有効にします。MBAP、読み取りホールディング/入力レジスター、単一レジスター書き込み、および文書化された例外応答をサポートします。サポートされるサブセットは [`docs/MODBUS_TCP_SUBSET.md`](docs/MODBUS_TCP_SUBSET.md) で文書化されています。\n\nブラックボックス PoC パスは：\n\n```bash\nmake compose-poc\n```\n\nそのコマンドは Docker Compose で `roomci serve` を起動し、別のコントローラー サービスとして `examples/controllers/http_poc_controller.sh` を実行し、HTTP API を駆動し、`reports/` の下に JSON、Markdown、JUnit レポートを書き込みます。\n\n## 品質ゲート\n\n`.github/workflows/smart-home-ci.yml` は以下を強制します：\n\n- `cargo fmt --all --check`\n- `cargo clippy --workspace --all-targets -- -D warnings`\n- `cargo test --workspace --all-targets`\n- `cargo doc --workspace --no-deps`（`RUSTDOCFLAGS=-D warnings`）\n- `cargo tarpaulin --workspace --fail-under 80`\n\n現在の測定値：**129 テスト** 合格、**84.51%** ライン カバレッジ。\n\nリリースまたは会社評価ビルドを提示する前に [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md) を使用してください。動作モデル サポートとワイヤプロトコル サポートの真実の源として [`docs/PROTOCOL_SUPPORT_MATRIX.md`](docs/PROTOCOL_SUPPORT_MATRIX.md) を使用してください。\n\n会社固有のアダプター コントラクトは実行時作業の前に検証できます：\n\n```bash\ncargo run -p roomci-cli -- adapter validate adapter-contracts/templates/company_adapter_contract.yaml adapter-contracts/examples/*.yaml\n```\n\n評価者 PoC パックはワンコマンド ターゲットとして利用可能です：\n\n```bash\nmake poc-generic-mqtt\nmake poc-core-qa\nmake poc-hospitality\nmake poc-building-automation\nmake poc-bms-ops\n```\n\n## コア概念\n\n再利用可能なコアは QA コントラクト エミュレーターです：\n\n- シナリオ定義\n- MQTT コマンド/状態および保持状態コントラクト\n- エッジ ルーティングおよびフェイルオーバー動作\n- 障害インジェクション\n- デバイスおよびオペレーション モデル\n- JSON、Markdown、JUnit レポート\n- Cargo、Docker、Compose 経由の CI 実行\n\nホスピタリティ スマートホームは、そのコアの上の高シグナル ドメインパックです。これらは以下を結合します：\n\n- iPad / モバイル コントローラー\n- ローカル MQTT ブローカー\n- エッジ サーバー / ホーム コントロール サーバー\n- クラウド MQTT ブローカーおよびクラウド イベント パイプライン\n- DALI / KNX / Modbus / コンタクト I/O / HVAC / ライティング デバイス\n- BMS アラート、Slack 通知、電話 エスカレーション、ランブック\n- ネットワーク セグメンテーション、WAN フェイルオーバー、バックアップ回線パス\n- コミッショニング、フィールド QA、メンテナンス、継続運用\n\n`roomci` はこれらの依存関係を CI で再現可能にして、ユーザーまたはゲストが経験する前にチームが障害シナリオをテストできるようにします。\n\n## 主なユースケース\n\n1. **汎用 MQTT コントラクト QA** — コマンド/状態トピック、保持状態、重複配信、ローカル ブローカー可用性を検証します。\n2. **ローカルファースト コントロール QA** — ローカル コントローラー → ローカル MQTT → エッジ → デバイス コントロールがクラウド不可の間機能することを検証します。\n3. **コミッショニング QA** — フィールド コミッショニング チェックを再利用可能な YAML シナリオに変換します。\n4. **建築オートメーション プロトコル シミュレーション** — DALI 型ライティング、Modbus レジスター、コンタクト I/O アラート、HVAC、KNX 型レガシー バス動作。\n5. **BMS / オペレーション アラート シミュレーション** — 緊急アラートおよび復旧に対する Slack / 電話通話 / チケット / ランブック フローを検証します。\n6. **ネットワーク 障害 シミュレーション** — ISP 停止、バックアップ WAN フェイルオーバー、VLAN 分離問題、ローカル のみの運用。\n7. **快適性自動化 シミュレーション** — 不快指数ターゲット、HVAC 自動モード、ユーザー オーバーライド、ルーム固有の調整。\n\n## これではないもの\n\n`roomci` は以下を意図していません：\n\n- プロダクション MQTT ブローカーまたは MQTT ブローカー置き換え\n- プロトコル適合性スイート\n- フル KNX、DALI、BACnet、Matter 実装\n- プロダクション スマートホーム コントローラー置き換え\n- リアル BMS プロダクト\n- プロダクショングレード SIP / PBX 実装\n\n目標は、MQTT/edge/デバイス コントラクト、スマートホーム QA、フィールド障害、コミッショニング、オペレーション フローをローカル環境および CI 環境でテスト可能にするために十分な動作をモデル化することです。\n\n## ディレクトリ構造\n\n```txt\nroomci/\n  crates/                    Rust ワークスペース\n    roomci-cli/              CLI エントリポイント（バイナリ）\n    roomci-core/             シナリオ ランナー（仮想時間、アサーション）\n    roomci-mqtt/             ローカル + クラウド MQTT 動作モデル\n    roomci-edge/             冗長 edge サーバー エミュレーター\n    roomci-device-model/     Modbus、DALI ライティング、コンタクト I/O\n    roomci-fault/            障害スケジューリング プリミティブ\n    roomci-ops/              BMS / Slack / 電話 / ランブック エスカレーション\n    roomci-report/           JSON / Markdown / JUnit レンダラー\n    roomci-scenario/         YAML シナリオ ローダー + バリデーター\n  examples/                  汎用 MQTT、ホスピタリティ、建築オートメーション、障害レポート デモ\n  schemas/scenario.schema.json   シナリオ ファイル用 JSON Schema\n  docs/                      アーキテクチャ、プロトコル、シナリオ仕様\n  tasks/                     フェーズごとのビルド ログ\n  .github/workflows/         CI パイプライン\n  Dockerfile                 マルチステージ イメージ（バイナリのみ）\n```\n\n## ポジショニング\n\n`roomci` は再利用可能な MQTT/edge/建築オートメーション QA コントラクト エミュレーターとしてポジショニングされています。最も強力にシップされるドメインパックはホスピタリティ スマートホームです：ローカルファースト、MQTT 駆動、エッジサーバー ベースのシステムで、デバイス制御、建築オートメーション プロトコル、フィールド コミッショニング、BMS オペレーション、ネットワーク信頼性をゲスト ステイ エクスペリエンス モデルに統合します。\n\nプロダクトは、いかなる特定の会社のプライベート実装にも依存しません。実統合には、チームの実際の MQTT トピック、ペイロード スキーマ、デバイス/レジスター マップ、BMS/webhook コントラクト、認証モデル、および受け入れ基準が必要になります。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbert-einshutoin%2Froomci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falbert-einshutoin%2Froomci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbert-einshutoin%2Froomci/lists"}