E.D.E.N.開発ログ #2|Nature Remoでテレビを消せなかった原因と修正

音声指示からNature Remoのテレビ専用APIへ送るまでの安全確認フロー

執筆者:

カテゴリ:

E.D.E.N.の対話画面。日時と利用者データを除いた収録用状態

E.D.E.N.という、わたし専用のAIアシスタントを作っています。Project Artemisの中で、AIに実装と検証を任せ、人間は使って違和感を返す形で進めているプロジェクトです。

前回、Nature Remoへ接続し、温度・湿度・照度を取得できるところまで進みました。しかし、ダッシュボードでテレビを見ると「専用操作は未対応」と表示され、電源を切れませんでした。声で「テレビを消して」と頼んでも操作されませんでした。

接続できているのに、操作できない

最初に疑ったのは、認証キーとNature Remo本体の接続です。しかしセンサー値は取得できていました。問題は接続全体ではなく、家電ごとの操作経路にあると切り分けました。

E.D.E.N.が実装していたのは、Nature Remoへ登録した汎用赤外線信号を送る経路だけでした。一方、Nature Remo上でテレビとして登録された家電には、電源、消音、音量、チャンネル、入力切替などの専用ボタンがあります。テレビは、この専用経路を使う必要がありました。

直した内容

音声指示からNature Remoのテレビ専用APIへ送るまでの安全確認フロー

修正は3点です。

1. Nature Remoからテレビ専用ボタンの一覧を取得する
2. ダッシュボードに電源、消音、音量、チャンネル、入力切替を表示する
3. 「テレビを消して」のような明示的な言葉を、AIの推測ではなく決められた操作へ変換する

家電IDや操作名を自由入力させず、Nature Remoから取得した家電とボタンの組み合わせだけを受け付けるようにしました。会話らしく見えても、実際の操作部分は決められた規則で動きます。

再起動すると未接続へ戻る問題も見つかった

修正後の確認中、別の問題も見つかりました。認証キーは端末の環境変数へ保存されていましたが、E.D.E.N.を再起動したとき、Node.jsのサーバーへ値が引き継がれていませんでした。

起動スクリプトが保存済みの値を読み、サーバーへ渡す処理を追加しました。画面上で一度接続したあと、次回起動時にも自動接続される形です。

検証結果

  • 構文検査に合格
  • 自動テスト33件に合格
  • 登録済みテレビから専用ボタン一覧を取得
  • 指定したテレビへ電源信号を1回送信し、APIの受付成功を確認

赤外線は一方向です。APIが信号を受け付けても、テレビが実際に消えたかをE.D.E.N.から取得できるわけではありません。また、テレビの電源信号は「オン」と「オフ」が別ではなく、同じボタンで切り替わる方式です。画面にも実機確認が必要だと表示しました。

使っている機器

この記録で使っているのは Nature Remo 3(Remo-1W3)です。現時点でE.D.E.N.から取得できているのは温度・湿度・照度の3つです。送信を実測できたのはテレビの電源信号1回で、APIが受け付けたところまでです。消音・音量・チャンネル・入力切替はボタンを取得して画面に表示できた段階で、送信の実測はこれからです。

動かなかったこと、確認できていないことも書いておきます。赤外線は一方向のため、テレビ本体が実際に消えたかどうかはE.D.E.N.側から確認できません。人感センサーは搭載されていますが今回の実装では使っていません。エアコンなど他の家電にもまだ対応していません。

※上記はAmazonアソシエイトのリンクです。紹介しているのは実際に使っている機器だけで、実物の写真は掲載していません(アフィリエイトについて)。

今回分かったこと

「APIにつながった」と「目的の操作ができた」は別でした。センサー値が取れていても、家電の種類によって操作方法が違います。

もう一つは、会話で家電を動かす部分を生成AIへ直接任せなかったことです。言葉の受付は自然でも、物理操作は登録済みの対象と操作に絞りました。便利さより、意図しない家電を動かさないことを優先しています。

次は、予定やタスクの連携部分を、個人情報を伏せて整理します。

家電をAIにつないでいる方は、操作の範囲をどこまで自由にしていますか。「言えば何でもやってくれる」方向に寄せているか、E.D.E.N.のように登録済みの操作だけに絞っているか、コメントで教えていただけると参考になります。

この修正で何を考えて設計を変えたのか、認証の分け方や許可リストの作り方まで含めた実装記録は、noteに分けて書いています。こちらは有料記事です。無料で読める範囲に、失敗の内容と原因、設計の原則を書いています。

このシリーズの続き

前回の記事: 開発ログ #1「個人用AIアシスタントを、課金APIに頼らず作ってみている話」

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です