ESPHomeとHome AssistantでHomeLab環境を監視する:ステップバイステップガイド

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

静かなるハードウェアキラー:熱と湿度

数ヶ月前、私はHomeLabサーバー(再生品のDell PowerEdgeと自作NAS)を置いている狭いクローゼットに入りました。そこで目にしたのは、ファンが100%の回転数で悲鳴を上げ、中の空気がサウナのようになっているという恐ろしい光景でした。小さな換気扇が故障しており、クローゼット内の周囲温度を知る術がなかったため、ハードウェアは何時間も熱にさらされていたのです。

私たちの多くは、CPU使用率、RAM、ディスクの健康状態の監視に重点を置いています。ビットレートやIOPSのためにGrafanaダッシュボードを設定しますが、ハードウェアが置かれている物理的な環境は見落とされがちです。高温はサーマルスロットリングを引き起こしてパフォーマンスを低下させ、高湿度は時間の経過とともに精密部品に目に見えない腐食を引き起こす可能性があります。セルフホスティングを本格的に行うのであれば、オペレーティングシステムだけでなく、物理的な「部屋」にも目を光らせる必要があります。

根本的な原因:なぜ環境の可視化が不足しているのか

多くのHomeLab愛好家が環境監視を行っていない主な理由は、セットアップの手間です。標準的なサーバーハードウェアは通常、内部コンポーネントの温度(CPU/GPU)しか報告しません。ラックや部屋の「周囲」温度を知るには、外部センサーが必要です。

多くの人は市販のスマートホームセンサーに頼ります。しかし、これらには大きな欠点があることが多いです。

  • クラウド依存: 安価なWi-Fiセンサーの多くは、動作に専用アプリとインターネット接続を必要とします。インターネットが切れると、監視も停止してしまいます。
  • 更新頻度: バッテリー駆動のZigbeeやBluetoothセンサーは、電力を節約するために数分おき、あるいは特定のしきい値に達したときにしか報告しないことがよくあります。サーバーラックの場合、より頻繁なデータ更新が望まれます。
  • 統合の複雑さ: 閉鎖的なエコシステムのセンサーからローカルの監視スタックにデータを取り込むには、非公式なAPIや不安定な統合が必要になり、頭の痛い問題となることがあります。

環境監視ソリューションの比較

解決策を決定する前に、私は3つの一般的な方法を検討しました。

1. 市販のスマートセンサー(Xiaomi、Aqara、Sonoffなど)

これらは購入しやすく、見た目も洗練されています。すでにZigbeeゲートウェイを持っているなら、「プラグアンドプレイ」で使えます。しかし先述の通り、報告間隔が重要なハードウェア監視には遅すぎることが多く、提供されているハードウェア設計に縛られることになります。

2. 産業用SNMPプローブ

これらはデータセンター向けに設計されています。非常に信頼性が高く、イーサネット経由でネットワークに直接接続できます。欠点は? 非常に高価で、1ユニットあたり150ドルから300ドルもすることです。その予算があれば、RAMの増設や大容量ハードディスクの購入に充てたいところです。

3. ESPHomeとHome AssistantによるDIY

これは、安価なマイクロコントローラー(ESP32またはESP8266)とデジタルセンサー(BME280やDHT22など)を使用する方法です。ESPHomeは、シンプルなYAML設定ファイルを使用してこれらのチップ用のカスタムファームウェアを作成できるシステムです。高速なAPIを介してHome Assistantとネイティブに統合されます。

最良のアプローチ:ESPHome + BME280 + Home Assistant

私はESPHomeを使用したDIYアプローチを選びました。コスト効率が良く(10ドル以下)、完全にローカルで動作し、高度なカスタマイズが可能です。この方法を本番環境に適用していますが、結果は一貫して安定しています。更新間隔を自由に設定でき、後で小さなOLEDディスプレイや物理的なアラームブザーなどの機能を追加することも可能です。

ハードウェア要件

  • ESP32 または ESP8266 (NodeMCU/Wemos D1 Mini): システムの頭脳。
  • BME280 センサー: DHT11/DHT22よりもこちらを強くお勧めします。温度、湿度、気圧をより高い精度で測定できます。
  • ジャンパーワイヤーとブレッドボード: (最初は)はんだ付けなしでコンポーネントを接続するために使用します。
  • Micro-USB ケーブル: 電源供給と初期の書き込み用。

ステップ 1: センサーの配線

BME280は通常I2C経由で通信します。ピンを以下のように接続します:

  • VCC を ESP32の 3.3V に接続
  • GND を GND に接続
  • SCL を GPIO 22 に接続 (標準的なESP32の場合)
  • SDA を GPIO 21 に接続 (標準的なESP32の場合)

ステップ 2: ESPHomeの設定

Home AssistantにESPHomeアドオンがインストールされていることを前提として(まだの場合はアドオンストアで見つけることができます)、新しいデバイスを作成します。以下のYAML設定をテンプレートとして使用してください:

esphome:
  name: homelab-environment-monitor

esp32:
  board: esp32dev

# Home Assistant APIを有効化
api:
  password: "your_secret_password"

ota:
  password: "your_ota_password"

wifi:
  ssid: "Your_WiFi_SSID"
  password: "Your_WiFi_Password"

# I2Cバスの設定
i2c:
  sda: 21
  scl: 22
  scan: true

sensor:
  - platform: bme280
    temperature:
      name: "HomeLabの温度"
      oversampling: 16x
      filters:
        - offset: -0.5 # 必要に応じてキャリブレーションオフセットを設定
    humidity:
      name: "HomeLabの湿度"
    pressure:
      name: "HomeLabの気圧"
    address: 0x76
    update_interval: 60s

  - platform: wifi_signal
    name: "WiFi信号の監視"
    update_interval: 60s

この設定は、ESP32にI2Cデバイスを探させ、それをBME280として識別し、データを60秒ごとにHome Assistantに報告するように指示するものです。60秒の間隔は、リアルタイムの監視とセンサー自体の発熱回避のバランスが完璧だと考えています。

ステップ 3: 書き込みと統合

ESP32をUSB経由でコンピュータに接続します。ESPHomeのダッシュボードで Install をクリックし、「Manual download」または「Plug into this computer」オプションを選択します。ファームウェアが書き込まれると、デバイスはWi-Fiに接続されます。

Home Assistantに戻り、設定 > デバイスとサービス に移動します。新しいESPHomeデバイスが検出されたという通知が表示されるはずです。設定 をクリックし、YAMLで定義したAPIパスワードを入力すれば完了です。

ステップ 4: ダッシュボードの構築

データが流れるようになったので、それを活用できるようにしましょう。視覚的に素早く把握するために、「センサーカード」や「ゲージカード」を使うのが好きです。私のHomeLab環境ビューのダッシュボードの設定例は以下の通りです:

  • 温度ゲージ: 18°Cから28°Cは緑、35°Cまでは黄色、35°C以上は赤に設定。
  • 湿度グラフ: 静電気と結露の両方を防ぐため、部屋の湿度を30%から55%の間に保つように監視。
  • 履歴グラフ: Plexのトランスコードやバックアップジョブなど、サーバーが高負荷のときに温度がどのように変動するかを確認。

ステップ 5: アラートの設定(極めて重要)

監視は、それに基づいて行動しなければ意味がありません。私は、温度が38°Cを超えた場合にスマートフォンとデスクトップに通知を送信するHome Assistantのオートメーションを設定しています。これにより、機器が溶け始める前に、サーバーを正常にシャットダウンしたり換気を確認したりするのに十分な時間が確保できます。

alias: "アラート:HomeLabの高温検出"
trigger:
  - platform: numeric_state
    entity_id: sensor.homelab_temperature
    above: 38
action:
  - service: notify.mobile_app_my_phone
    data:
      title: "⚠️ HomeLabがオーバーヒートしています!"
      message: "ラックの温度が {{ states('sensor.homelab_temperature') }}°C です。ファンを確認してください!"

安定性に関する考察

私はこのセットアップを1年以上運用しています。以前使用していたバッテリー駆動のZigbeeセンサーとは異なり、このESP32ベースのモニターがオフラインになったことは一度もありません。標準的なUSB電源アダプターから給電しているため、猛暑の最中にバッテリーが切れる心配もありません。

このDIYアプローチをとることで、HomeLabが周囲の環境とどのように相互作用しているかについて深い理解を得ることができます。これは、大きな安心感を与えてくれる小さなプロジェクトです。もしすでにNASやDockerスタックを構築しているなら、これはセットアップをプロフェッショナルなものにするための論理的な次のステップと言えるでしょう。

Share: