私の2つの照明スイッチが無限のエコーループに固まってしまいました。

2026/06/02 7:57

私の2つの照明スイッチが無限のエコーループに固まってしまいました。

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

2時、Tasmota制御のMartin Jerry製壁式スイッチ2台がMQTTを介して互いに繰り返しトリガーされ、無限のオン/オフループに陥りました。根本原因分析の結果、状態ミラーリングプロトコルの故障が発見されました:各デバイスが

cmnd/<me>/Power
コマンドを受信し実行しながらもローカルVAR1(重複排除キー)を更新しなかったため、エコー増幅が発生し安定化には至らなかったのです。調査によりハードウェアの故障、起動タイミングの問題、ボタンによる曖昧さの可能性は否定されました。さらに10秒のリブート遅延を追加しても、その後の電圧の微かな変動が直ちにループを再発させるため不十分でした。物理的な押し操作とリレーの変化を区別しようとした試みも、一方のスイッチにTuya MCUが含まれており共有されたTuyaReceivedイベントが存在したため阻害されました。デバウンス調整も状態追跡の増幅を止めるのではなく単に遅らせるだけでした。

効果的な解決策は、ピア間の

Power
コマンドを
Event#SYNC
に置き換えることであり、これは受動側がリレーを作動させる前にVAR1の状態マーカーを更新することを可能にしました。この単一のライン変更だけで無限ループは停止し、6回の連続トグルを含む迅速なコマンドシーケンスも不安定性なしに伝播するようになりました。重要なのは、設定を有効にする前に両方のスイッチを一致するリレー状態へ初期化し、VAR1にも適切にシード値を設定しておく必要があり、そうでないと直ちに再発する対立が起きることです。本解決策は、厳密なセットアッププロトコルがなければ自動化された照明やホームコントロールネットワークを無用化する危険な形態の状態増幅を排除します。

本文

無限ループに陥ったスマートホーム照明スイッチの正体と解決策

問題の発覚

  • 現象: 午前 2 時を回ると、廊下に「ON/OFF」と切り替わるリレーの音(クリック音)が永遠に響き続ける。
  • 原因: 壁に取り付けられた 2 つの照明スイッチ同士が、状態変更を相互に転送し合うことで**無限ループ(ピョンポン現象)**を起こしている。
  • ログ確認結果:
    • .155
      .166
      という通信プロトコル同士で、互いの Power コマンドを送り合い、OFF を指示し合うことが記録された。
    • デバイスは受信した変化を適用すると同時に再発表するため、システムは収束せず増幅され続けている。

問題の背景と初期アプローチ

  • 環境: Tasmota + MQTT によるスマートホームスタック(Martin Jerry 製スイッチ)。
  • 目的: 2 つのスイッチ間で状態を同期させ、「片方の操作で他方も追従する(仮想 3-way)」機能を実現。
  • 初期実装(素朴なエコーガード):
    • 状態変更時に新しい値を
      VAR1
      に保存し、同じ値が来た場合は無視する仕組みを実装。
    Rule1 ON Power1#State!=%var1% DO Backlog VAR1 %value%; Publish cmnd/<peer>/Power %value% ENDON
    
  • 一時的な成功: このロジックは長期間安定して動作し、「エレーガード」と呼ばれる機能として満足していた。

なぜ失敗したのか:2 つの発見

1. 理論と実態の不一致(起動競合ではない)

  • 想定: 停電後の同時再起動による「起動競合」が原因だったかと考え、対策を試みた。
  • 実測結果:
    • 物理的なボタン操作を無視し、MQTT コマンドだけでループが発生していることを確認。
    • 「起動安定化ガード(起動後 10 秒間ルールを非アクティブにする)」などの応急処置は通用しないことが証明された。

2. エコーガード自体の誤作動

  • 根本原因:
    VAR1
    を更新していないため、入ってくるミラーコマンドは常に「新規」と見なされ続けた。
  • 詳細メカニズム:
    • 相手が
      Power
      を書き込む → 自社のリレーが切り替わる → だが
      VAR1
      は更新されない。
    • その結果、次に来る相手のコマンドはローカルの「陳腐な
      VAR1
      」と不一致として判定される。
    • このためルールが常時発火し、両スイッチは逆位相で永久に駆動し続ける状態になった。

ハードウェアの複雑さ:Tuya デバイスの壁

  • 想定された解決策: ミラーリングを「物理的ボタン押下」のみに行い、MQTT コマンドによるリелей変更は無効にする。
  • 障壁: Tuya 搭載デバイスの挙動により不可能だった。
    • Tuya 側では、物理ボタン操作と MQTT コマンド操作の両方が、同じイベント (
      dpId 1
      ) として返却される。
    • これらを区別できないため、「物理入力のみ反応させる」というロジックは実現不可能な状態(行き詰まり)に陥った。

最終的な解決策:キーの更新戦略

  • 洞察: バグの原因は「リレーを更新するが、エコーを識別する
    VAR1
    を更新していない」ことにあった。
  • 方針: 相手が直接 Power コマンドを送るのではなく、イベント経由でリレー動作を依頼し、その都度
    VAR1
    を再設定する。

修正後のルール

Rule1 ON Power1#State!=%var1% DO Backlog VAR1 %value%; Publish cmnd/<peer>/Event SYNC=%value% ENDON
      ON Event#SYNC DO Backlog VAR1 %value%; Power1 %value% ENDON

動作の仕組み

  1. 外部からイベントが到着すると、まずハンドラ内で
    VAR1 = value
    を設定する。
  2. 次にリレー (
    Power1
    ) の状態を変更する。
  3. これにより、直後の
    Power1#State
    とローカルの
    VAR1
    が一致するため、公開ルールの条件 (
    !=
    ) に適合しなくなっている(静寂化)。
  4. エコーは 1 ホップ後に確実に消滅する。

検証結果

  • テスト方法: 片方のスイッチで 6 回連続してオン/オフ操作を行い、双方のログを確認。
  • 結果:
    • 追従動作は 6 回発生したが、いずれも
      EVENT#SYNC
      のトリガーのみだった。
    • 両方のスイッチが発火する自社の
      Power1#State...Publish
      は一度も行われなかった。
    • オペレーション停止直後に、両スイッチの状态が静寂に収束した。

得られた教訓

  • デバッグの前向き: 修正をデプロイせずに「どうなるか」だけを想像してはならない。実際にログを見て検証する。
  • 理論よりも現場: 「起動競合」といった仮説を検証するより、ログを 10 分間見ても本質を見極められる。
  • デバウンシングの限界: タイミングの問題(高速操作)という誤解から陥りやすいが、これは状態追跡エラーであり、速度遅延では解決できない。
  • 最小手数の修正: メカニズムを正しく理解した後に導かれるのは、往々にしてシンプルで最小限の解決策である。

結論:このクラスの問題への対処法

  • 共通パターン: ノードが入ってくる変化を適用しつつも、自身のエコーを識別するためのキーを更新しない場合、ミラーリングは増幅器となり無限ループに陥る。
  • 普遍的な例: スマートホーム照明、CRDT マージ失敗、Webhook の再試行ループ、イベントソースのフィードバックループなど。
  • 解決の本質: 効果を適用する前に、重複除外キー(Dedup Key)を更新すること

廊下は今や静かである。スマートホームエンジニアリングにおいて、これほど「高邁な評価」を得られたことはない。

同じ日のほかのニュース

一覧に戻る →

2026/06/05 5:11

Anthropic の AI 駆動型脆弱性情報発見のためのオープンソースフレームワーク

## Japanese Translation: サマリーは全体的には良好ですが、キーポイント(コマンド、特定のスキル、パイプラインの段階)に見られる具体的な実行可能な詳細が不足しています。構造とコマンドを取り入れたやや詳細なバージョンであれば、推論を加えずに完全性を向上させることができます。 ## サマリー(改善版) Anthropic は、「Claude Security」というソフトウェアの脆弱性発見および修正のためのマネージドサービスを紹介しており、オープンソースのリファレンスハルネス `github.com/anthropics/defending-code-reference-harness` が提供されています。このリポジトリは、セキュリティチームとのパートナーシップから得られた知見を活用し、自律的な C/C++ 脆弱性発見および修正のためのガイド役を担っていますが、外部からのコントリビューションを受け入れるメンテナンスされた製品ではありません。アクセスには Bedrock や Vertex、Azure などの特定の API が要求されます。 コア技術は、脅威モデリング、静的スキャン、実行検証、パッチ適用を含む厳格な多段階パイプラインを使用しています。主要なスキルには `/threat-model`、`/vuln-scan`、`/triage`、`/patch`、および `/customize` があります。特に重要なのは、自律エージェントがシステムへの損傷を防ぐために **gVisor** サンドボックス内で対象コードを実行すること(Claude API へのエGRESSは制限されている)であり、パイプラインを `bin/vp-sandboxed` を通じて呼び出す前にユーザーが `./scripts/setup_sandbox.sh` を実行する必要があります。`/quickstart` スキルはサンドボックスなしで **Claude Code** で安全に確認できるのに対し、自律ループにはそれを必要とします。 ユーザーは段階的なアプローチに従うよう推奨されます:ステップ 1(Day 1)では、対象コードに対して静的スキャンと脅威モデリングを行い、`/patch` を通じてパッチを生成し、カスタマイズをスモークランで検証してからステップ 2(Day 2)へ進む。ステップ 2 では C/C++ ライブラリ向けの完全な自律ループを展開します。生产用途では、組織は複数の並列パイプラインウェーブ(ステップ 4)を実行し、結果に対して自動タリアジを行うべきです(`/triage` で投票を使用)。本システムは SDLC に連続的検証を統合しており、毎日スキャンや CI パイプラインを通じて運用され、ゼロから構築される完璧なプラットフォームを要求せずに多様な依存関係の露出に対処するのを支援します。サンドボックス化、カスタマイズ、およびパッチに関するドキュメントは `docs/security.md`、`docs/agent-sandbox.md` および関連ガイドで利用可能です。

2026/06/05 6:42

URL の IPv6 ゾーンは間違いです

## Japanese Translation: - 現在稼働中の Anubis ウェブサイトはバージョン v1.25.1-0.20260604200537-44d5fa3ce047 を使用しています。マスコットのデザインは CELPHASE によって作成されました。サイトには Techaro に帰属する著作権表示が表示され、コンテンツは「❤️(愛)と🇨🇦(カナダ)で作成」であるとしてクレジットされています。

2026/06/04 22:00

Cloudflare に参加する VoidZero が決定

## Japanese Translation: VoidZero(Vite、Vitest、Rolldown、Oxc、および Vite+ の開発者)が、その全チームを Cloudflare に統合し、エコシステムを完全にオープンソース化し、MIT ライセンスに基づき、ベンダー非依存な状態を維持することを約束しています。100 万ドルの資金を Vite エコシステムファンドに供与することで、コミュニティ主導の開発を優先し、ツールをプロプライエタリなスタックに合わせるのではなく、強化されたエンジニアリングリソースを直接ツール維持に向けるとして、この戦略的移行を進めています。Evan とコアチームは引き続き開発をリードし続けます。Vite(週 1.29 億回のダウンロード)や新しい Cloudflare プラグイン(週 1,400 万回のダウンロード)の高い採用率は、特に AI 開発者がこの統一されたワークフローによって支えられる高速フィードバックループを必要としていることで、強固な市場の信頼を示しています。現在、Vite は React、Next.js(vinext 経由)、Vue、SvelteKit、Nuxt、Astro、Solid、Qwik、Angular など主要なフレームワークの基盤となるビルドツールとして機能しています。新たに導入された統一 CLI(`cf`)はネイティブデプロイとバインディングを統合しており、標準的な Vite 操作と完全に互換性を保ちつつ、「cf dev」コマンドにより「vite dev」の超集合体として動作します。将来の計画には、Void プラットフォームを完全にオープンソース化して公衆との協力を促進することや、Cloudflare の Environment API を通じて非 Node ランタイムをサポートするツールへの進化が含まれています。結局のところ、開発者は強力なリソースと統一された環境にアクセスでき、業界はベンダーロックインなしで長期的なポータビリティを確保する強化された標準から恩恵を受け、Cloudflare のツールは Vite を Cloudflare 用に特別に適応させるのではなく、Vite スタンドダードの方へ移行しています。

私の2つの照明スイッチが無限のエコーループに固まってしまいました。 | そっか~ニュース