このプロジェクトには、HomeasSistantおよびESPHOME ESP8266/ESP32ボードを介したリモートPC電源制御が含まれています。
私はこのプロジェクトを使用して、既知の制限があるWake-on-Lan(WOL)の代替として、ホームアシスタントを介してPCベースのNASをリモートでオフにします。
power-off/suspended/hybernate (動作短いプレス電源ボタン)などの任意のパワー状態からPC電源をオンにします。shutdown/suspend/hybernate (動作ショートプレス電源ボタン)。YouTubeビデオ:
Homeassistantスクリーンショット:

Wake-on-Lan(WOL)は、いわゆるmagic packetを送信することにより、イーサネットを介してリモートでコンピューターの電源を変えることを目的としています。これには、このESPプロジェクトに適用されないいくつかの既知の制限があります。
wakeことができます。シャットダウン/サスペンド機能はありません。sleep状態にするために、たとえばpm-suspendコマンド( sudo apt install pm-utils経由でインストール)を実行することにより、リモートPCへのSSH接続を作成できます。短所:ハードウェアは、PCIメタルプレートに取り付けられたESP8266またはESP32と2つのIOピンで構成されています(下の写真を参照)。私の場合、ESP8266 Nodemcuボードを使用しました。理論的には、ESP8266またはESP32ボードはこのプロジェクトに使用できます。

私のNASは、Intel Core i7 Asrock Z97 ATXマザーボードに基づいており、標準の2.5mm 2x5男性ヘッダーが含まれています。

ATXヘッダーUSB 2.0:
ヘッダーJ1ピン1定数 +5Vピン1の電源は、PCが電源が切れており、Nodemcuの電源を供給するために使用されていてもです。 ESP8266またはESP32は、オンボード3V3レギュレーターを介して駆動されます。
ATXヘッダーシステムパネル:
ヘッダーJ2には、電源、リセット、GNDピンが含まれています。
電源ボタンピン6。
リセットボタンピン7。
GNDピン5。
ピンD1は、リセットピンからのパワーステータスを読み取るために使用されます:高がオン、低いです。抵抗R1 、IOピンが誤って出力に設定されたときに電流を最小限に抑えるために使用されます。
ピンD2は、電源ボタンを低く引っ張って短いプレスまたはロングプレスを生成するために使用されます。トランジスタQ1は、ESP8266とマザーボード間の安全な分離に使用されます。
警告:すべてのATXおよびESPピンは3v3で動作する必要があります。

DIYブレイクアウトPCBをシステムパネルヘッダーに取り付けて、電源ボタンSW1とリセットボタンSW2を接続できます。
ATXコンピューターケースには、ESPボードをマウントするのに十分なスペースがあります。ただし、コンピューターケースは金属シールドされているため、基地局までのwifi距離が減少します。 WiFi接続が不安定であるか、距離が低すぎる場合、ESPをコンピューターケースの外側に配置することをお勧めします。 ESP32は異なるWiFi接続の安定性をもたらす可能性がありますが、全体的に環境に依存します。
PCケースの背面に取り付けられたESP8266 PCB:

ESPHOMEアプリケーションファームウェアは、USB接続(仮想シリアルポート)またはWiFi OTA(エアアップデート上)を介して更新できます。
.yamlファイルでotaを構成するときに、WiFi経由でファームウェアの更新が有効になります。これには、ホストコンピューターとESPの間のWiFi接続が必要です。 OTAアップデートは、ESPからWiFiベースステーションへのログインが誤ったWiFi資格情報のために故障しても機能しません。この場合、シリアルを介した更新が必要です。または、.yamlファイルで構成されているapフォールバックを介して必要です。
Esphomeアプリケーションは、2つのYAMLファイルで構成されています。 1つの構成ファイルと2番目のsecrets.yamlパスワードを保存します。
ドキュメント:
次のファイルを構成します。
platformとboardを構成します。Esphome Yaml構成の詳細については、Esphomeドキュメントを参照してください。
USBケーブルをESP8266またはESP32ボードに接続し、次のコマンドを入力します。 (例はubuntuでテストされています)。詳細については、Esphome.ioを参照してください。
# Clone this repository
$ git clone [email protected]:Erriez/ESPHomePCPowerControlHomeAssistant.git
# Install Python3 virtualenv
$ sudo apt install python3-virtualenv
# Create virtualenv
$ virtualenv venv
# Activate virtualenv
$ source venv/bin/activate
# Install ESPHome
$ pip install esphome
# Optional: Install platformio updates
$ platformio platform update
$ platformio upgrade
# Optional: Add user permission serial port
$ sudo usermod -a -G dialout < USERNAME >
$ sudo reboot now
# Check ESPHome installation
$ esphome --help
# Optional: Compile program without upload
$ esphome compile pc-power.yaml
# Upload program to ESP8266 or ESP32
$ esphome run pc-power.yaml
# Select serial port or WiFi to upload application
# Check logs
$ esphome logs pc-power.yamlこのセクションでは、ホームアシスタントの構成について説明します。
Configuration | Integrations: Add Integration: ESPHomesecrets.yml |で構成されているパスワードを入力しますesphome_api_password 。RAW編集を介してPC電源統合をダッシュボードに追加します。
title : Home
views :
- title : PC
path : pc
badges : []
cards :
- type : button
entity : switch.pc_power_toggle
show_name : true
- type : button
tap_action :
action : none
entity : binary_sensor.pc_power_state
hold_action :
action : none
- type : button
tap_action :
action : toggle
entity : switch.pc_hard_power_off
icon_height : 40px
show_state : false
show_name : true
show_icon : true ホームアシスタントを再起動し、準備ができています!
Esphome Yamlファイル形式は、Esphomeバージョン2024.6.0で変更されました。古い形式は、次のようなエラーを生成します。
$ esphome compile ESPHomePCPowerControlHomeAssistant/pc-power.yaml
INFO ESPHome 2024.9.2
INFO Reading configuration ESPHomePCPowerControlHomeAssistant/pc-power.yaml...
Failed config
ota.unknown: [source ESPHomePCPowerControlHomeAssistant/pc-power.yaml:27]
'ota' requires a 'platform' key but it was not specified.
and:
Failed config
switch.gpio: [source ESPHomePCPowerControlHomeAssistant/pc-power.yaml:30]
Pin 4 is used in multiple places.
この場合、このプロジェクトの新しいファイル形式に更新してください。
switch.pc_power_buttonにswitch.pc_power_toggleに名前を変更します。switch.pc_power_button_long_press switch.pc_hard_power_offに変更しました。switch.pc_power_senseにswitch.pc_power_stateに名前を変更します。