Home Assistant 現在の構成・自動化まとめ(2026年版)
はじめに
HAを8年くらい自宅で動かしてる。2022年頃に書いた記事(連携例 / インターホン自動開錠 / トイレ自動洗浄)がだいぶ古くなってきたので、いまの構成をまとめ直した。
現時点では インテグレーション30以上・オートメーション60以上・ESPHomeデバイス15台 になってる。
開発ポリシー
なんとなく守ってる方針。
賃貸なので原状回復できるように
壁に穴を開けたり工事したりは一切しない。両面テープ・マグネット・突っ張りで全部固定して、退去時に跡が残らないのが前提。
インターホンの自動開錠ガジェットも光センサ+サーボを両面テープで貼り付けただけだし、トイレの自動洗浄もサーボをテープで貼り付けるだけ。「賃貸でもここまでできる」はわりとテーマにしてる。
とりあえずやってみる
完璧な設計を考え続けるより、とりあえず動くものを作って使ってみた方が正しい課題が見えてくる。最初のオートメーションは「ボタン押したらライトが点く」だったけど、使ってるうちに「こうなれば…」が積み重なって今の構成になった。
壊れたら直せばいい。おかしかったら直せばいい。
自分が開発者で、自分が利用者。すべて自分のせい
不便なのも動かないのも誰かのせいにできない。でも逆に言えば自分が納得するまで好き勝手に作れる。「なんでこんな仕様なんだ」と思ったら自分で直せるのがスマートホーム自作の一番の魅力だと思ってる。
少しだけ費用対効果を考える
「できるから作る」じゃなくて「作る価値があるか」を少し考える。使わない自動化は負債になるので、毎日使うか・本当に手間が減るか・維持コストが見合うかを基準に取捨選択してる。
高価なスマート家電を買うより、ESPHomeデバイスを自作したり既存家電をスマートプラグで繋ぐ方がコスパいいことも多い。
動き続けることが最優先
派手な機能より安定稼働を優先する。HAのアップデートは3日くらい様子見してから適用する、breaking changeが出たら慌てず対応する、壊れた自動化はすぐ無効化して後で直す。「今日も普通に動いてる」が理想。
8年間の変遷
だいぶ変わった。
| 時期 | サーバー |
|---|---|
| 〜2022年 | Raspberry Pi 4B 4GB |
| ~現在 | GMKtec G10(Ryzen 5 3500U) |
移行した理由:
- Raspberry Pi → Mini PC:ESPHomeデバイスが増えてきてgo2rtcのffmpegエンコードも加わってRPiのCPUが限界になった
- Roomba → Roborock Saros 10R:水拭き対応・ドックエラーの自動ToDo登録・掃除完了マップのDiscord通知とか、連携できることが増えすぎてRoombaに戻れなくなった
-
自作インターホンガジェット → ESPHome統合:最初は光センサ+サーボの自作ガジェットだったけど、いまは
interphone.yamlでHA統合して来客検知・カメラ・遠隔解錠を一元管理してる - Google Drive → OneDrive:Google Drive Backupアドオンは定期的にCookieを更新しないといけなくて面倒だったので
ハードウェア構成
サーバー:GMKtec G10 Mini PC
| 項目 | スペック |
|---|---|
| CPU | AMD Ryzen 5 3500U(4コア8スレッド、最大3.7GHz) |
| RAM | 16GB DDR4(SO-DIMM、最大64GBまで換装可) |
| ストレージ | 256GB NVMe SSD(M.2) |
| NIC | 2.5G 有線LAN(チップがHAOS非対応のためUSB外付けNICで運用) |
| 映像出力 | HDMI 2.1 / DisplayPort / Type-C(3画面対応) |
| OS | Home Assistant OS(HAOS) |
接続デバイス概要
| プロトコル | Hub/方式 | 主なデバイス | 台数 |
|---|---|---|---|
| Zigbee | deCONZ(RaspBee II + USB-シリアル変換) | 照明・ドアセンサー・モーションセンサー・リモコン | 23台 |
| WiFi(自作) | ESPHome | 温湿度センサー・CO2センサー・電流センサー等 | 15台 |
| Bluetooth | SwitchBot(ESPHomeプロキシ経由) | カーテン・温湿度計・プラグ | 21台 |
| WiFi | Roborock | ロボット掃除機 Saros 10R | 1台 |
| WiFi | Bambu Lab | 3Dプリンター P1S | 1台 |
| WiFi | go2rtc | Tapoカメラ・USBインターホンカメラ | 2台 |
| インターネット | NissanConnect | 日産 Note(E13) | 1台 |
インテグレーション一覧
| カテゴリ | 統合 | 備考 |
|---|---|---|
| Zigbee Hub | deCONZ | 23デバイス |
| DIYデバイス | ESPHome | 15デバイス |
| Bluetooth家電 | SwitchBot Bluetooth | 21デバイス |
| 掃除機 | Roborock | Saros 10R |
| 映像 | WebRTC Camera / 汎用カメラ | go2rtcと連携 |
| エンタメ | Google Cast | NestHub等 3デバイス |
| エンタメ | DLNA Digital Media Renderer | - |
| TV | Sony Bravia TV | KJ-43X8300D |
| 空気清浄機 | Daikin Aircleaner ⚙️自作 | hgn32/daikin-aircleaner |
| 3Dプリンター | Bambu Lab | P1S |
| 車 | NissanConnect [JP] ⚙️自作 | 日産 Note(E13) |
| 通知 | Discord | 外出時の主通知チャンネル |
| 音声合成 | VOICEVOX TTS ⚙️自作 | hgn32/ha-voicevox-tts・HACSからインストール可 |
| AI / クラウド | Homeway | Sage AI・MCP連携 |
| 天気 | OpenWeatherMap | - |
| DNS | Cloudflare | DDNS自動更新 |
| クラウド | OneDrive | バックアップ先 |
| カスタム | HACS | カスタム統合管理 |
| カレンダー | Google Calendar | 予定・誕生日・仕事 |
| タスク | Google Tasks | メンテナンスToDo |
| スマホ | モバイルアプリ | Android端末 3台 |
| Claude使用量 | Claude Usage ⚙️自作 | hgn32/hass-claude-usage(HACSからインストール可)・5時間/週間使用率をセンサー化 |
| 証明書監視 | 証明書の有効期限 | Let's Encrypt |
| その他 | System Monitor / 太陽 / RESTful / Backup 等 | - |
⚙️自作 は公式・HACSにはなくて自作したカスタムコンポーネントまたはアドオン。
ESPHomeデバイス一覧
ESPHomeで管理してる自作デバイスは全15台。
| デバイス名 | 用途 |
|---|---|
| Audio Amplifier | オーディオアンプの電源制御 |
| Bath Vent | 浴室換気扇の制御・タイマー |
| Dehumidifier | 除湿機の制御(現在OFFLINE) |
| Desktop Current | デスクトップPC系の電流監視 |
| Desktop PC | デスクトップPCの電源制御・監視 |
| House Current | 家全体の電流監視(分電盤) |
| Interphone | インターホン連携(来客検知・開錠制御) |
| Kitchen Current | キッチン系の電流監視 |
| Living Air | リビングの温湿度・気圧・CO2センサー |
| Living Bluetooth proxy | SwitchBot中継(リビング側) |
| Living Door Closer | 玄関電動ドアクローザー制御 |
| Living Duct | リビングダクト換気扇の制御 |
| Storeroom Air | 倉庫の温湿度・気圧センサー |
| Storeroom Bluetooth proxy | SwitchBot中継(倉庫側) |
| Toilet | トイレの蓋開閉センサー・照明連動 |
Bluetoothプロキシが2台あるのは、SwitchBotのBLE広告がBluetooth届く範囲内でしか受信できないから。リビングと倉庫にそれぞれ置いてカバレッジを確保してる。
電流センサーが3系統あるのは、分電盤全体・デスク周り・キッチンと計測点を分けてダッシュボードのサンキーダイアグラムに家電別消費電力をリアルタイムで流すため。
アドオン一覧
| アドオン | 用途 |
|---|---|
| Advanced SSH & Web Terminal | SSHアクセス |
| deCONZ | ZigbeeのHub |
| Discord Chat Cleanup Bot ⚙️自作 | Discordの古いメッセージを毎日削除 |
| ESPHome Device Builder | ESPHomeデバイスのビルド・OTA管理 |
| FlareSolverr | Cloudflare保護バイパス |
| go2rtc (hardware) | カメラストリーミング(WebRTC) |
| Guacamole Client | ブラウザからのリモートデスクトップ |
| Let's Encrypt | SSL証明書の自動更新 |
| Nginx Gateway ⚙️自作 | リバースプロキシ |
| Portainer | Dockerコンテナ管理 |
| Samba share | PCからconfigファイルを直接編集 |
| Stock Manager ⚙️自作 | 在庫管理Webアプリ。品目・カテゴリ・置き場・購入先のマスタ管理、Amazon購入履歴自動取込に対応 |
| Studio Code Server | ブラウザ上のVSCode(config編集用) |
| Suwayomi Server ⚙️自作 | 自己ホスト型漫画サーバー |
| Suwayomi Summary ⚙️自作 |
.tachibk バックアップファイルのWebビューワー |
| VOICEVOX Engine | 日本語TTS |
| WireGuard UI | VPN管理 |
アドオンリポジトリ: hgn32/ha-addons
自作コンポーネント・インテグレーション
記事内で ⚙️自作 と書いてるものをGitHubで公開してるので、使いたい場合はHACSからインストールできる。
VOICEVOX TTS(hgn32/ha-voicevox-tts)
VOICEVOX Engineをハーツ内TTSとして使えるカスタムインテグレーション。ha-addons のVOICEVOX Engineアドオンと組み合わせて使う前提。
mDNS(Zeroconf)に対応していて、アドオンを起動すると HA 側に「VOICEVOX Engine が見つかりました」と通知が来て、スタイルを選ぶだけでセットアップ完了する。configuration.yaml の編集は不要。
Daikin Aircleaner(hgn32/daikin-aircleaner)
ダイキン製加湿空気清浄機(MCK70X系など)をローカルHTTP API経由でHA統合するカスタムコンポーネント。
- ファンエンティティ:電源ON/OFF・運転モード切替(おまかせ / 風量自動 / 手動 / 節電 / 花粉 / のど・はだ / サーキュ)
- セレクトエンティティ:風量・加湿レベル・LEDディスプレイ輝度
- センサーエンティティ:室温・湿度・PM2.5・ほこり・におい
- バイナリセンサー:給水タンク補給お知らせ
- カスタムカード:タップで開くボトムシートダイアログ
湿度連動の自動化(空気清浄機のモードを湿度に応じて自動設定)などに使ってる。
Claude Usage(hgn32/hass-claude-usage)
AnthropicのClaudeサブスクリプション使用量をHAのセンサーとして監視するインテグレーション(trickv/hass-claude-usage のfork)。
取得できるセンサー:
- 5時間セッション使用率(%)・リセット時刻
- 週間使用率(全モデル)(%)・リセット時刻
- 週間Sonnet使用率(%)・リセット時刻
- 追加使用量の有無・使用率・クレジット消費量・上限額
OAuthフローで認証するのでAPIキー不要。ダッシュボードのHistoryグラフに載せると使用量の推移が可視化できて便利。
注意: Anthropicの使用量APIはリクエストを詰めすぎると24時間レート制限がかかる。ポーリング間隔はデフォルトの300秒から変えない方がいい。
自作アドオン(hgn32/ha-addons)
HA標準のアドオンストアにないものを自作してリポジトリにまとめてる。設定 → アドオン → アドオンストア → リポジトリを追加 で https://github.com/hgn32/ha-addons を登録すると一覧に出てくる。
Discord Chat Cleanup Bot
指定したDiscordチャンネルの古いメッセージを毎日定刻に自動削除するBot。
通知チャンネルとして使ってるDiscordに来客写真・掃除完了マップ・センサーアラートをどんどん投稿していくと、放置すると数千件規模になる。このアドオンを入れておけばボットが深夜3時に自動掃除してくれる。
| オプション | 説明 | デフォルト |
|---|---|---|
bot_token |
Discord Botのトークン | (必須) |
channel_ids |
削除対象のチャンネルIDリスト | (必須) |
keep_days |
何日以上前を削除するか | 30 |
run_hour / run_minute
|
実行時刻 | 3:00 |
dry_run |
true にすると削除せず対象を表示するだけ |
false |
dry_run: true で動作確認してから本番運用するのがおすすめ。BotにはDiscord Developer Portalで Read Message History と Manage Messages 権限が必要。
Nginx Gateway
NginxベースのリバースプロキシアドオンでGeoIP2による国別アクセスフィルタリングが特徴。HAを自宅サーバーで外部公開してる場合、日本以外からのアクセスをDropするだけで不正アクセス試行がほぼ消える。
HTTPS・MQTTs・WireGuardのエンドポイントを1つのアドオンで同居させられるのが利点。
/share/nginx/
├── nginx.conf # メイン設定
├── GeoLite2-Country.mmdb # 起動時に自動生成
├── http/
│ ├── homeassistant.conf # HA本体の公開設定
│ └── *.conf # サービスごとに追加
└── stream/
├── reject.js # GeoIPチェック用
├── mqtt.conf # MQTTs設定
└── wireguard.conf # WireGuard設定
GeoIP2データベースはMaxMindの無料アカウントを作れば自動取得してくれる。設定のアドオンオプションにアカウントIDとライセンスキーを入れるだけ。
注意: aarch64(Raspberry Pi等)は非対応でamd64のみ。
Stock Manager
生活用品・食料品などの自宅在庫を管理するWebアプリ。HA Ingressからサイドバーで開けるのでわざわざポートを開けなくていい。
実際の使い方:
まとめ買いしたときにアドオンを開いてJANコードをカメラかUSBバーコードリーダーで読み取り → 数量を入力して登録。Amazon.co.jpの注文履歴はCookieを貼り付けておくと毎日6時に差分を自動取得して在庫に加算してくれる。
主な機能:
- JANコードスキャン:カメラ/USBリーダー/手入力に対応
- 員数/実数量の切替:「6本パック」を1セットとして登録するか、6本として登録するかを選べる
- Amazon購入履歴クローラー:Cookieで認証して差分のみ取込。ASIN/JANが品目マスタにあれば自動加算、未登録なら「取込する/管理しない」を選択
-
HA通知連携:自動取込完了時にモバイルアプリやDiscordへ通知(
notify_serviceで変更可) - 棚卸モード:実際に数えた数に合わせる調整履歴を1件追加(過去履歴は書き換えない)
データは /config/stock_manager_3a30c8ec/stock.db(SQLite)に永続化されるのでアドオンを更新しても消えない。
注意: Amazonクローラーはセッションが切れると都度Cookieを再取得して貼り直す必要がある。利用規約的にグレーなので個人・自宅用途限定。
技術スタック:React 19 + TypeScript + MUI 9 / Express 5 / Prisma + SQLite / Puppeteer
Suwayomi Server
Mihon(旧Tachiyomi)互換のセルフホスト型漫画サーバー Suwayomi-Server のHAアドオン版。スマホのMihonアプリを「リモートサーバーモード」で繋げると、ダウンロードと既読管理をサーバー側に集約できる。
データは /config/suwayomi/ に永続化される(アドオン更新・再起動でデータが消えない)。Web UIは http://<HAのアドレス>:4567 でも開ける。
Suwayomi Summary
MihonやTachiyomiの .tachibk バックアップファイルをブラウザで閲覧するビューワー。HA Ingress経由なのでポート公開不要・HA認証がそのまま使える。
単なるビューワーに見えるけど**「死んでる漫画」の検出**が地味に便利。「最新話の取得日時」を昇順に並べると、長期間更新されてないソースやシリーズが一目でわかる。ソース一覧で漫画数の少ないソースも見えるのでMihonのライブラリ整理に使ってる。
/config/suwayomi/aliases.json に変換テーブルを書くと、英語タイトルで保存されてるバックアップを日本語名で表示できる。
{
"FLYING WITCH - RAW": "フライング・ウィッチ"
}
バックエンドはFastAPI、フロントはDataTables。
カメラ構成(go2rtc)
go2rtcを使ってWebRTCで低レイテンシ表示してる。
# go2rtc.yaml
streams:
# TP-Link Tapo カメラ(ベランダ)
veranda01: rtsp://user:password@192.168.100.217:554/stream1
# インターホンカメラ(USB接続、ffmpegでH.264エンコード)
interphone01: ffmpeg:device?video=/dev/video0&input_format=yuyv422&video_size=720x480#video=h264#hardware
# Roborock Saros 10R のカメラ(MQTT直接接続)
roborock: roborock://mqtt-us-2.roborock.com:8883?u=...
rtsp:
listen: ":8554"
username: "rtsp"
password: "password"
default_query: "video"
インターホンはUSBカメラをffmpegでH.264にソフトウェアエンコードしてる。Ryzen 5のCPU余裕がここで活きる。RoborockはMQTT直接接続なので公式クラウドを経由せずカメラ映像を取れる。
Homeway
Homeway はNabu Casa(HA公式クラウド)の代替として使えるコミュニティ製のクラウドサービス。無料で使えて投資家に依存しない独立運営なのがいい。
以前はGoogle Gemini統合を使ってたけどHomewayに乗り換えた。
使ってる機能
| 機能 | 内容 |
|---|---|
| Sage AI | ChatGPT・Gemini・Claude・DeepSeekなどをAPIキー不要で使える。STT・TTSも内包 |
| MCP サーバー | HAのデバイス状態をAIエージェントに公開するリモートMCPサーバー。ClaudeやChatGPTから家電を操作できる |
| WebRTC中継 | STUNサーバー・TURNサーバーの提供でカメラストリーミングを補助 |
MCP の連携イメージ
スマートフォン / PC(ClaudeなどのAIチャット)
↓(MCP経由)
Homeway クラウド
↓
Home Assistant(自宅)
↓
各デバイス(照明・エアコン・カメラ等)
Sage AIはHAの Assist パイプラインとして統合されるので、NestHubからそのまま使える。LLMモデルは設定画面から切り替えられてAPIキーの管理が不要なのが楽。
MCPサーバーを使うとClaudeなどのAIチャットから「リビングの照明を暗くして」と書くだけでHAのエンティティを操作できる。アクセスできるデバイスやツールはHomeway側で細かく制限できるので意図しない操作も防げる。
スクリプト一覧
go_home(いまから帰る)
外出先からワンタップで帰宅準備を一括実行するやつ。Webhookで呼び出せるのでスマホのウィジェットからも使える。
go_home:
sequence:
- parallel:
- switch.turn_on: switch.kettle # ケトルON
- switch.turn_on: switch.toilet_washlet # ウォシュレットON
- button.press: button.living_door_closer_close_door # 玄関ドアを閉める
# エアコンは外気温・室温で冷房/暖房/OFFを自動判定
- action: climate.set_temperature
data_template:
hvac_mode: >
{% if states('sensor.outdoor_meter_temperature') | float >=
states('input_number.climate_cool_outdoor_temp') | float %}
cool
{% elif (states('sensor.outdoor_meter_temperature') | float <=
states('input_number.climate_heat_outdoor_temp') | float) and
(states('sensor.living_air_temperature_bme280') | float <=
states('input_number.climate_heat_indoor_temp') | float) %}
heat
{% else %}
off
{% endif %}
# Discordに室温・各機器のON/OFF状況を通知
- action: notify.homeassistant2dc
data:
message: >
すぐ帰れ 室温は{{ states('sensor.living_air_temperature_bme280')|int }}度
{%- set ons = [] -%}
{%- if states('climate.living_air_climate') == 'cool' -%}{%- set ons = ons + ["冷房"] -%}{%- endif -%}
{%- if states('light.living_lights') == 'on' -%}{%- set ons = ons + ["リビングライト"] -%}{%- endif -%}
{%- if states('switch.desktop') == 'on' -%}{%- set ons = ons + ["パソコン"] -%}{%- endif -%}
{%- if ons | count == 0 -%}すべてオフです{%- else -%}{{ ons | join('、') }}がオンです{%- endif -%}
PlayBGM / StopBGM(BGM再生)
余ったAndroid端末(i11 Plus)をBGMプレイヤーとして使ってる。HAの command_* 通知とTaskerを組み合わせてJBL BAR 800への接続と再生を制御してる。
playbgm:
sequence:
# 画面ON → HA起動 → Bluetooth ON
- notify.mobile_app_i11_plus: { message: command_screen_on }
- notify.mobile_app_i11_plus: { message: command_bluetooth, data: { command: turn_on } }
# JBL BAR 800に未接続なら Tasker経由でBTペアリング
- if: 未接続
then:
- notify.mobile_app_i11_plus:
message: command_broadcast_intent
data:
intent_package_name: net.dinglisch.android.taskerm
intent_action: net.dinglisch.android.tasker.ACTION_TASK
intent_extras: task_name:ConBTwPWR
# input_text.playlist_morning のURLを判定してアプリ起動
- if: YouTube MusicのURL
then:
- アプリ起動 → Tasker「PlayYT」でFRepによる自動タップで再生
- if: Nintendo MusicのURL
then:
- アプリ起動 → Tasker「PlayNM」で再生
media_player で制御できないアプリも command_broadcast_intent + Taskerで自動化できる。BGMのプレイリストURLは input_text.playlist_morning で管理してるのでUIから変更可能。
照明モードスクリプト
シーンの代わりにスクリプトで照明モードを管理してる。ダッシュボードのボタンから呼び出す。
| スクリプト | 色温度 | 輝度 | 用途 |
|---|---|---|---|
theatermode |
2298K | 5%(アンビエントのみ) | 映画・ゲーム |
relaxmode |
2700K | 40% | くつろぎ |
diningmode |
3000K | 100% | 食事 |
readingmode |
6200K | 100% | 読書・作業 |
オートメーション紹介
1. 起床・就寝ルーティン
スマホのアラーム時刻をHAが自動取得して、起床30分前と起床時刻に合わせて部屋を準備する。
# スマホのアラーム時刻が変わったら HA側のinput_datetimeに同期
- alias: アラーム時間を更新
triggers:
- entity_id: sensor.mobile_next_alarm
trigger: state
actions:
- input_datetime.set_datetime:
timestamp: "{{ states('sensor.mobile_next_alarm') | as_timestamp - 5 }}"
target: input_datetime.wakeup
- input_datetime.set_datetime:
timestamp: "{{ states('sensor.mobile_next_alarm') | as_timestamp - 900 }}"
target: input_datetime.before_wakeup
起床30分前: 外気温に応じてエアコン先行起動・BGM再生開始
起床時刻(アラームの5秒前):
- ライトを最大輝度・昼白色(6500K)で点灯
- NestHubでVOICEVOXアナウンス(天気・外気温・Googleカレンダー予定・睡眠時間を読み上げ)
- NHK Podcastを再生
就寝時(deCONZリモコンボタン):
- 全室ライト消灯・エアコンを就寝モードへ切替
- NestHubで「あと〇時間〇分眠れます。プランクはしましたか?おやすみなさい」とアナウンス
- Tasker経由でタブレット端末の画面OFF・HAアプリ再起動
# 就寝アナウンスのテンプレート(抜粋)
message: >
次のアラームは{{ alarm.strftime('%-Hじ%-Mふん') }}です。
眠れる時間は{{ delta_hours }}時間と{{ delta_minutes }}分です。
プランクはしましたか?おやすみなさい
2. 帰宅・外出の自動化
玄関のdeCONZリモコンボタンで在宅/外出を宣言する。GPSと違って遅延も誤検知もない。
帰宅時:
- 全室ライト点灯(6500K・全輝度)
- ウォシュレット・ケトル・オーブン・PCをON
- 外気温に応じてエアコン自動起動
- 掃除機が動いてたら自動でドックへ帰還
- 空気清浄機のモードを湿度に応じて自動設定
- NestHubで「おかえりなさい」アナウンス(掃除機エラーがあれば警告付き)
外出時:
- 全室ライト・換気扇・スイッチ類を一括OFF・エアコンOFF
- 掃除機を曜日別モードで自動起動(月・金は水拭きあり)
- 宅配業者向けの自動開錠フラグをON(10分間)
3. 来訪者対応(インターホン)
最初はESP-WROOM-02+光センサ+サーボの自作ガジェットで物理ボタンを押してたけど、いまは interphone.yaml でESPHome統合して柔軟に動かせるようになった。
- alias: 来訪者を通知する
triggers:
- entity_id: binary_sensor.interphone_open_denied
to: 'on'
actions:
- if: 在宅中
then:
# スマホのWebViewでインターホン専用画面を自動表示
- notify.mobile_app_i11_plus:
message: command_webview
data: { command: /lovelace/interphone }
else:
# 外出中:カメラスナップショット → Discordに画像+解錠リンク付きで通知
- camera.snapshot:
filename: /config/www/interphone/{{ snapshot_name }}
- notify.homeassistant2dc:
data:
embed:
color: 16711680
image: { url: "https://XXX.jp/local/interphone/..." }
fields:
- name: 来客がありました
value: "[開く](https://XXX.jp/api/webhook/opendoor-xxxxx)"
外出中にDiscordで写真付き通知が来て、リンクをタップするだけでオートロックを遠隔解錠できる。さらにGPSで自宅ゾーンに近づくと自動で解錠モードをONにする:
- alias: 家の前
triggers:
- trigger: zone
entity_id: person.note
zone: zone.home
event: enter
- webhook_id: on_autoopen...
conditions:
- input_boolean.inhome: 'off'
actions:
- switch.turn_on: switch.interphone_enable_auto_open # 15分間有効
4. 全室モーションセンサー連動照明
全室にモーションセンサーを置いて、在宅フラグと就寝フラグで動作を分岐してる。
- alias: Kitchen lights - Detected motion
conditions:
- input_boolean.inhome: 'on'
- light.living_lights: 'on' # リビングが点いてるときだけキッチンも点ける
actions:
- if: input_boolean.onbed == on
then: { brightness: 10 } # 就寝中は常夜灯
else: { brightness: 255 } # 通常は全点灯
対応エリア:キッチン・風呂・トイレ・廊下・脱衣所・倉庫
トイレはドア開センサー+便座蓋センサーの組み合わせで「入り間違い」を検知して、2分以内に蓋が開かなければ消灯する。深夜0時以降はライトが点いてても自動で色温度を2000Kに落とす。
5. エアコンの外気温連動制御
外気温・室内温度・input_number で管理する閾値で冷房/暖房/OFFを自動判定する。帰宅・起床・外出・go_home スクリプトなど複数箇所で共通利用してる。
hvac_mode: >
{% if states('sensor.outdoor_meter_temperature') | float >=
states('input_number.climate_cool_outdoor_temp') | float %}
cool
{% elif (states('sensor.outdoor_meter_temperature') | float <=
states('input_number.climate_heat_outdoor_temp') | float) and
(states('sensor.living_air_temperature_bme280') | float <=
states('input_number.climate_heat_indoor_temp') | float) %}
heat
{% else %}
off
{% endif %}
閾値は全部 input_number なのでUIから動的に変えられて再起動不要。暖房のON/OFFにサーキュレーターも連動させてる。
6. CO2センサー連動の強制換気
ESPHomeで自作したCO2センサー(ZyAura製モジュール)でリビングのCO2濃度を監視して換気扇を自動制御してる。
- alias: リビングの強制換気開始
triggers:
- numeric_state: { entity_id: sensor.living_air_co2_zyaura, above: 1100 }
actions:
- switch.turn_on: switch.living_duct_fan
- alias: リビングの強制換気停止
triggers:
- numeric_state: { entity_id: sensor.living_air_co2_zyaura, below: 900 }
actions:
- switch.turn_off: switch.living_duct_fan
センサーグラフ見ると、在宅中に1500〜2400ppmまで上がって換気後に急落するパターンがくっきり出てる。
7. 3Dプリンター連携(Bambu Lab P1S)
印刷状態に応じてパトライト(light.status_light_01)の色が変わる。
| 状態 | 色 |
|---|---|
| エラー / 一時停止 | 🔴 赤 |
| 印刷中 / アイドル | 🟢 緑 |
| 印刷完了 | 🔵 青 |
| オフライン | 消灯 |
| その他 | 🟠 橙 |
8. Roborock Saros 10R 連携
外出時に曜日別モードで自動起動して、掃除完了後はマップ画像をDiscordに通知する。ドックエラー・防湿庫の湿度超過・加湿器の給水切れが起きると Google Tasks のメンテナンスリストに自動でタスクが追加される(重複防止ロジックあり)。
# 外出時(月・金)は水拭きあり
- vacuum.start
- select.select_option: { mop_mode: standard, mop_intensity: high }
- vacuum.set_fan_speed: { fan_speed: max }
# その他の平日は吸引のみ
- select.select_option: { mop_intensity: off }
- vacuum.set_fan_speed: { fan_speed: max_plus }
9. NissanConnect(日産 Note E13)連携
乗車中フラグ(input_boolean.incar)を立てて、その間だけ15秒ごとに車データを強制更新することでほぼリアルタイムな位置追跡ができる。
- alias: 車のデータを強制更新
triggers:
- time_pattern: { seconds: '15' }
conditions:
- or:
- input_boolean.incar: 'on'
- template: '{{ now() <= as_local(as_datetime(states("input_datetime.outhomebit"))) }}'
actions:
- button.press: button.note_update_data
GPSで自宅ゾーンに入ると自動でオートロック解錠モードをONにする連携もしてる。
10. タブレットの画面輝度を照明に連動
各部屋のAndroidタブレットの画面輝度を照明の輝度に合わせて自動調整してる。
- alias: living tabletの明るさ調整
triggers:
- entity_id: light.living_lights
trigger: state
actions:
- notify.mobile_app_i11_plus:
message: command_screen_brightness_level
data:
command: >
{% if states('light.living_lights') == 'off' %}1
{% else %}{{ (state_attr('light.living_lights', 'brightness') | int / 255 * 100) | round }}
{% endif %}
消灯時は輝度1%、照明に比例して画面も自動調整される。夜間のダッシュボードが眩しくならなくて地味に快適。
11. システム管理の自動化
# 毎週水曜1時:Let's Encrypt証明書の自動更新 → 失敗時はDiscordに警告
- alias: 証明書を更新
# 毎日2時:古い画像ファイル(7日以上)を自動削除 + TTSキャッシュクリア
- alias: 毎夜に古いデータを削除
# 3分ごと:CloudflareのDDNS自動更新
- alias: クラウドサービスの同期
# 3日以上スキップされたアップデートをDiscordで催促してスキップ解除
- alias: アップデートのスキップ解除
ダッシュボード
メインダッシュボード(3ペイン構成)
左ペイン:フロアプラン
間取り図の上に各部屋のセンサー値(温度・湿度・気圧・CO2)とデバイスアイコンをオーバーレイ表示。上部には日産 Note(E13)のバッテリー残量・充電量・温度を常時表示してる。
中央ペイン:電力・操作・ToDo
- 電力サンキーダイアグラム(冷蔵庫97W・エアコン31W・パソコン系87Wなどをリアルタイムで可視化)
- 照明モードボタン(Theater / Relax / Dining / Reading をワンタップ切替)
- メンテナンスToDo(Google Tasksと連携)
右ペイン:時計・天気・カメラ
- 現在時刻・外気温・天気予報グラフ(時間帯別気温・風速)
- ベランダカメラのライブ映像(go2rtcのWebRTC)
設定ダッシュボード
- 状態パネル(inHome / 置き配モード / onBed のトグル一覧)
- エアコン閾値スライダー(冷暖房切替温度を
input_numberで管理) - 各種タイマー一覧(起床時刻・各スイッチの自動停止時刻)
- BGMプレイリストURL(YouTube Music / Nintendo Musicを
input_textで管理) - WiFi RSSI監視(全ESPHomeデバイスの電波強度を一覧。-70dBm以下は要確認)
センサーグラフダッシュボード
気温・湿度・気圧・CO2・バッテリー・WiFi RSSI・Claude使用量 を3日スパン/1ヶ月スパンの2種類でグラフ表示してる。
ハマりポイント・Tips
❶ 消えないエンティティの消し方
デバイスを削除してもentityがUIに残り続けることがある。その場合は以下のファイルから該当エントリを直接削除してHSCoreを再起動する。
/config/.storage/core.entity_registry
.storage は隠しフォルダ。JSON形式なのでフォーマットを壊さないよう注意。編集前にバックアップは取っておいた方がいい。
❷ クラウドAPIは突然死ぬ
外部サービスのAPIを使った連携は便利だけど、仕様変更・廃止・レート制限で急に動かなくなるリスクがある。8年間で何度か経験した。
- 認証方式の変更(OAuthへの移行など)で突然エラーになる
- 無料枠の縮小・廃止でコストが発生する
- ローカルAPIが廃止されてクラウド経由に強制される(TP-Link Kasaとかがそれ)
できるだけローカルAPIやオープンプロトコル(Zigbee・ESPHome等)を使ってクラウド依存を減らした方が長期的に安定する。
❸ 通知はLINEよりDiscordの方がまし
LINE Notify は2024年3月にサービス終了した。Messaging APIはそれ以前から無料枠が厳しく(月1000通など)、スマートホームの通知量には全然足りない。
Discordは画像embed・Webhookリンクのボタン化など表現力が高くて実質無制限で使える。インターホン写真付き通知→リンクタップで遠隔解錠、掃除完了マップ通知など、Discordに集約すると家の外からでも状況把握が完結する。
action: notify.homeassistant2dc
data:
target: ['チャンネルID']
data:
embed:
color: 255
title: "来客がありました"
image:
url: "https://your-domain/local/interphone/latest.jpg"
fields:
- name: アクション
value: "[開錠する](https://your-domain/api/webhook/opendoor-xxx)"
❹ ESP32系のWiFiは意外と弱い
ESP32はWiFiアンテナが内蔵チップに組み込まれてて、電波強度が思ったより弱い。-70dBm以下になると接続が不安定になりやすくてセンサー値が頻繁に unavailable になる。
設定ダッシュボードで全ESPHomeデバイスのWiFi RSSIを一覧表示して常時監視してる。対策は設置場所の見直しか、外付けアンテナ対応モジュール(ESP32-S3などの外部アンテナコネクタ付き)への変更。
❺ 2.4GHz帯は混雑してるので調整が必要
Zigbee・WiFi(2.4GHz)・Bluetoothが全部同じ2.4GHz帯を使う。マンションだと近隣のWiFiルーターが大量にいて干渉が深刻になりがち。
ZigbeeのチャンネルはWiFiと重ならないように設定する。目安はこのあたり:
| WiFiチャンネル | 避けるべきZigbeeチャンネル |
|---|---|
| 1 | 11, 12 |
| 6 | 14, 15, 16 |
| 11 | 19, 20 |
あとZigbeeコーディネーターをUSB 3.0ポートに直挿しすると電磁干渉でさらに不安定になる。USB延長ケーブルで本体から離すのは必須。
❻ BluetoothProxyも設定が必要
ESPHomeのBluetoothProxyを使ったSwitchBot連携は便利だけど、マンションだと周囲のBLEデバイスを100台以上検出することがあってHA側の処理が重くなったり、関係ないデバイスの情報を拾い続けたりする。
active: false にしてパッシブスキャンのみにするか、スキャン間隔を伸ばすと改善する。
# ESPHome側の設定例
bluetooth_proxy:
active: false # パッシブスキャンのみ(負荷軽減)
❼ Studio Code ServerはCPUを100%食うことがある
ブラウザ上のVSCodeとして便利だけど、インデックス作成やLanguage Serverが動くタイミングでCPUを100%使い続けることがある。
HA本体の動作に影響が出るなら、編集が終わったら都度停止するか、Samba Share+ローカルのVSCodeを使う運用に切り替えた方が安定する。
❽ センサーを付けると「見えなかったことが見える」
温湿度・消費電力・CO2などを計測し始めると、それまで気づかなかった事実が出てくる。
- 冬の朝、エアコンつける前に室温が10度以下になってた → 起床30分前にエアコンを先行起動する仕組みを作った
- 在宅してるとCO2が1500ppmを超えてた → CO2連動の換気扇自動制御を作った
- 冷蔵庫が常時100W近く消費してた → 買い替えを検討するきっかけになった
- ESPHomeデバイスのWiFi電波が-75dBmと弱かった → 設置場所を変えたら安定した
センサーは「自動化のトリガー」でもあり「次のアクションへのヒント」でもある。
❾ とりあえずやってみよう
HAは複雑そうに見えるけど、GUIで作れる自動化も多くて完璧な設計がなくても動くものは作れる。最初から全部揃えようとせず、1つ動かしてみる→不便に気づく→改善する、のサイクルを回すのが一番続く。
8年でオートメーションは60本以上になったけど、最初の1本目は「玄関ボタンを押したらライトが点く」だった。
おわりに
HAのアーキテクチャ自体はかなり安定してて、一度しっかり組めば数ヶ月ほぼ手をかけずに動き続ける。ただZigbeeデバイスのファームウェア更新・HAのbreaking change・外部APIの仕様変更への対応は継続的に必要になる。
構成はまだ育ち続けてるので、また大きく変わったタイミングで更新する予定。
この記事はHome Assistant 2026.x時点の構成です。