Home Assistantのローカル統合によるプライバシーに配慮したESP32スマートドアベル
(tristam.ie)- クラウド依存のスマートドアベルを避けたいユーザー向けに、ESP32-CAMとESPHomeでHome Assistantにローカル統合されるDIYドアベルを作るプロジェクト
- 基本構成はHome Assistant、ESPHomeアドオン、モバイル版Home Assistant companion appで、ボタン入力をトリガーにカメラのスナップショットをスマートフォン通知として送信
- ハードウェアはESP32-CAM、モーメンタリプッシュボタン、オプションの8 RGB LEDリング、10mのMicro USBケーブル、3Dプリント筐体で構成され、内蔵LEDをフラッシュの代わりに使うことも可能
- ESP32-CAMのバリエーションによってピン配置やプルダウンの挙動が異なる場合があり、GPIO14のボタン入力にはGNDとの間に10kΩのプルダウン抵抗を入れる配線が必要
- PLA製筐体は出力例として使われているが、防水目的ではPETGやABSのほうが適しており、カメラ穴があるため雨を避けられる設置場所が必要
ローカルドアベルの構成と準備物
- このスマートドアベルはプライバシーに配慮した構成を目指しており、ESPHomeを通じてHome Assistantと統合される
- 始めるには次の構成が必要
- 稼働中のHome Assistantインスタンス
- ESPHomeアドオン
- ボタン押下通知を受け取るモバイル版Home Assistant companion app
- 作例では8 RGB LEDリングライトが使われているが、簡略化したい場合は省略でき、ESP32-CAM内蔵LEDをフラッシュとして使える
- ESP32-CAMのAI-Thinker版には、一般的なESP32のようなすべてのプルアップ・プルダウン抵抗が備わっていない可能性がある
- GPIO14でESPHomeの
INPUT_PULLDOWN機能を試したが動作しなかった - 中国製のESP32-CAMバリエーションが多く、ボードごとの差異がありうる
- GPIO14でESPHomeの
部品と公開ファイル
- 主な部品は以下のとおり
- ESP32-CAM
- 最初にESPHomeを書き込みやすいよう、
flash/download/io0ボタン付きのボードが推奨される - このボタンがないボードはFTDIアダプタを使って書き込む必要がある
- 最初にESPHomeを書き込みやすいよう、
- モーメンタリプッシュボタン
- 8 RGB LEDリングライト
- 10mのMicro USBケーブル
- ESP32-CAM
- 3Dプリントファイルと設定ファイルが公開されている
- Printablesの.stlファイル
- thatguy-za/esp32-cam-doorbell: Home AssistantおよびESPHome設定
筐体の出力と組み立て
- 筐体は3つの部品として出力する
- メインボディ
- ESP32-CAM固定プレート
- バックプレート兼壁面マウント
- 前面と背面の筐体はサポートを使って出力する必要がある
- 作例ではPLAを使用しているが、防水目的ではPETGまたはABSフィラメントと20〜30%のインフィルが推奨される
- 出力後にM2.5のねじインサートを2個追加する
- ESP32-CAM固定ブラケットを締められるよう前面カバーに挿入
- 10mmのM2.5ねじでフェイスプレートを固定できるようバックプレート下部に挿入
ESPHomeでESP32-CAMを書き込む
- ESP32-CAMをフラッシュモードで起動するには、
flash/download/io0ボタンを押したままMicro USBケーブルでコンピュータに接続する - Home AssistantでESPHomeアドオンを開き、新しいデバイスを作成する
- パスは
Settings -> Add-ons -> ESPHome -> Open Web UI - 新しいデバイス名はたとえば
Doorbellにできる - デバイスタイプはESP32を選び、
use recommended settingsをチェックする
- パスは
- 生成されたYAML設定の
captive_portal:の下に、GitHubリポジトリの設定コードを貼り付ける SaveとInstallを押したあと、Plug into this computerを選ぶ- ESPHome Webを通じてブラウザからファームウェアを書き込む
- Google ChromeはESP32-CAMファームウェアの書き込みに最も安定したブラウザとして使われている
- ファームウェアのコンパイル後に
Download Projectを押せるようになり、数分かかる場合がある
- 新しいファームウェアが書き込まれると、Home Assistantが新しいデバイスを検出し、必要なエンティティをダッシュボードに追加できる
ボタン通知の自動化
- ドアベルのボタンが押されるとカメラのスナップショットを撮ってスマートフォンに送る自動化を構成する
- Home Assistantで新しい自動化を作成する
- パスは
Settings -> Automations -> + Create Automation - 新しい自動化を最初から作成し、右上メニューで
Edit in YAMLを選ぶ
- パスは
- GitHubリポジトリの自動化YAMLを貼り付けたあと、スマートフォンなどのデバイスのエンティティ名を環境に合わせて修正する
- 保存後にHome Assistantを再起動すると、新しい自動化が有効になる
配線と設置上の制約
- ESP32-CAMボードには多くのバリエーションがあるため、実際のボードのピン配置を確認する必要がある
- 配線はMicro USBポートがある下側PCBの裏面にはんだ付けする方式で構成される
- GPIO14とGNDの間には10kΩのプルダウン抵抗を追加する
- この抵抗がないとGPIO14が頻繁にhigh状態で浮いてしまう問題が観測された
- 抵抗は熱収縮チューブで覆う方法が推奨される
- 内蔵カメラ用の穴があるため完全防水構造ではなく、雨から保護される場所に設置する必要がある
- 電源は部品一覧に含まれる10mのMicro USBケーブルを通じて供給する構成
1件のコメント
Hacker News のコメント
いいですね。照明も気に入りました
単純なドアベルのベルを鳴らす磁気コイルの近くにリードスイッチ(一般的なドア開閉センサーのようなもの)を取り付けて、Home Assistant に情報を送ることもできます
0.50ドルのリードスイッチを既存のドアベルにつなぎ、ドアベルのコイルと同じ電源から給電される ESP のデジタル入出力ポートに引き出しておく。ドアベルが押されると、ローカル専用の玄関カメラのメールスナップショットを送り、上階のステレオでドアベルのチャイム録音を再生する。もともとはアナログ入力でコイル電圧を監視しようとしたが不安定すぎたので、より単純なリードスイッチ方式にしたところ、電流検知が非常に安定している
ドアベルのコイルと同じ電源という発想がいいですね。家の中で使える中途半端な電圧源がほかに何かあるのか気になります。HVAC のヘッドユニットやアナログ電話線のようなものなどPOTS(Plain Old Telephone Service)の電話線は、すべての電話機がオンフック状態のとき約 48V DC が出ているはずです。同じ回線の電話機がオフフックになると 3〜9V の範囲まで下がります。オフフックの電話機は通常動作に約 20mA DC の電流を消費し、DC 抵抗は約 180Ω です。残りの電圧降下は銅線経路と電話会社側の回路で発生し、通常は短絡保護とオーディオ回路の分離のために 200〜400Ω の直列抵抗があります
https://www.jkaudio.com/article_03.htm
似たようにリレー上部のケースに貼り付けて、制御回路や負荷回路を直接探らずにコイルに電源が入ったかどうかを検知するのに使ったことがあります
こういうIoT デバイスに求めるのは、クラウド依存がなく PoE を使うことだけです。すぐ死ぬバカみたいなバッテリーの相手をするくらいなら、配線を何十億本でも引きます。バッテリーの価格もどんどん高くなりすぎています
非絶縁型: https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-sou...
絶縁型: https://www.olimex.com/Products/IoT/ESP32/ESP32-POE-ISO/open...
年に一度バッテリーを交換するのは小さな手間ですが、数十個になるとすぐに積み上がり、定期的に繰り返されるので、線形増加より良いとは言えません
自分の家を持ったら KNX にするつもりです
話題から少し外れますが、妻がかなり重い ADD で、よく物をなくします。Tile は一定距離内でしか物を探せず、よく壊れるようです
可能性は低いでしょうが、家の中で Bluetooth Low Energy ビーコンを使って、物体を 3D 空間で数 cm の誤差で探せる屋内位置追跡システムを作ったことがある人がいるか気になります
もっと本題に近い話をすると、ESP32 はかなりすごいです。ただし MicroPython や CircuitPython では Wi-Fi 接続を安定して維持できませんでしたが、できることの範囲は驚異的です。私のボードはかなり古いものなので、新しいボードを買ってみれば違いがあるかもしれません
MicroPythonやCircuitPythonなら、何を期待していたのかという感じです。信頼性が必要な組み込みシステムでは禁止レベルです世界のどこかでは、ドアベルの存在があまりに重要で、それを「スマート」にする必要まで生まれるというのは興味深い。スマートドアベル製品の成功は、そうした需要をよく示している
私の家にはドアベルがない。訪問者が私や家のほかの人に連絡する方法を知らないなら、そもそもそこに来る理由があまりない可能性が高い
私だけがそうというわけでもない。先週散歩しながら見た、かなり非科学的な調査では、うちの通りの大半が似たような感じで、私の街の大半もたぶんそうだと思う
ドアベルは時代錯誤に感じる。うちの通りでは、付けている人はほとんどいない
私が見たレビュー基準では、Reolinkドアベルカメラが筆者の要件に合う唯一の市販オプションのように見える。ローカルで動作し、Home Assistantに統合できる
ただしインターホンには別アプリが必要。筆者の自作ソリューションは音声通信を提供していないようで、少なくともカメラのプロトコルだけでは、Home Assistantで直接双方向音声を使う方法もなさそうだ
ESP32は本当に深く入り込むウサギ穴のようだ。すでにESP32を使っている、あるいは開発中のプロジェクトがとても多いのに、これでまた念頭に置くものが一つ増えた
すばらしいプロジェクト。ESP32カメラは画質がかなり悪いことがある。ブログにドアベルで撮ったフル解像度の写真があると助かる
すばらしいプロジェクト。メーカーたちが作り出すさまざまなESP32ドアベルを見るのは楽しい
サンプル動画や写真があるといい。以前ESP32 Camを使ったことがあるが、それ自体は印象的なものの、個人的に望む品質ではなかった。もちろん私のスマートドアベル用途は、単に「誰がいるか」よりもセキュリティ寄りだ
今は費用を抑えるため、
AS-IS状態で買ったかなり高価なPoEドアベルを使っている。Axis Communicationsの製品だONVIFイベントを受信できる機能が本当に気に入っている。イベントを消費できれば、実質的にやりたいことができるので、この種の製品の柔軟性が高まる。たとえば、誰かが手でカメラレンズを覆う場合のようなカスタムイベントを作る方法もある
Home AssistantはONVIF対応が優れている。ネイティブのONVIFイベントを得るために、スクリプト(ドアの開閉を表すブール値のようなもの)の周りに一種のラッパーを作りたい
このサイトのコメントの一つが、ESP32の性能問題を指摘していた。IoT機器やこうしたボードを扱ったことはないが、比較的安いので触ってみたいと思い、調べてみるとESP32が40nmプロセスで製造されていることを知った
より進んだプロセスで製造され、同程度の電力予算でより高い性能を出す新しいバージョンがあるのか気になる
より良いトレードオフを提供するSoCファミリーもあるが、ESP32ほどホビー開発者に優しいものは多くない。Nordicあたりか、Pi Zeroのような小型シングルボードコンピューターに行く手はあるかもしれない
それでもESP32は、ほとんどのホームオートメーション機器に必要なものよりはるかに強力だ。動画ストリーミングや機械学習のような、より重い作業のいくつかでだけ限界にぶつかり始める。その場合でも、賢くやればかなり多くのことができる