이 프로젝트에는 HomeAssistant 및 Esphome ESP8266/ESP32 보드를 통한 원격 PC 전력 제어가 포함되어 있습니다.
이 프로젝트를 사용하여 제한이 알려진 Wake-On-Lan (WOL)의 대안으로 Home Assistant를 통해 원격으로 NAS 기반 NAS에 전원을 공급합니다.
power-off/suspended/hybernate (동작 짧은 프레스 파워 버튼)와 같은 전력 상태에서 PC 전원을 켜십시오.shutdown/suspend/hybernate (동작 짧은 프레스 파워 버튼).YouTube 비디오 :
Homeassistant 스크린 샷 :

Wake-On-Lan (WOL)은 소위 magic packet 보내서 이더넷을 통해 컴퓨터 전원을 원격으로 전환하기위한 것입니다. 이 ESP 프로젝트에는 적용 할 수없는 몇 가지 알려진 한계가 있습니다.
wake 수 있습니다. 종료/중단 기능이 없습니다.sleep State에 넣으려면 pm-suspend 명령 ( sudo apt install pm-utils 통해 설치)을 실행하여 원격 PC에 대한 SSH 연결을 수행 할 수 있습니다. 단점 :하드웨어는 ESP8266 또는 ESP32 및 2 개의 IO 핀으로 구성되며 PCI 금속 플레이트에 장착됩니다 (아래 그림 참조). 제 경우에는 ESP8266 NODEMCU 보드를 사용했습니다. 이론적으로 모든 ESP8266 또는 ESP32 보드 가이 프로젝트에 사용될 수 있습니다.

내 NAS는 Intel Core i7 Asrock Z97 ATX 마더 보드를 기반으로하며 표준 2.5mm 2x5 남성 헤더를 포함합니다.

ATX 헤더 USB 2.0 :
헤더 J1 핀 1 Constant +5V 전원 PC가 전원 오프 중에도 NODEMCU에 전원을 공급하는 데 사용됩니다. ESP8266 또는 ESP32는 온보드 3V3 레귤레이터를 통해 전원을 공급합니다.
ATX 헤더 시스템 패널 :
헤더 J2 에는 전원, 재설정 및 GND 핀이 포함되어 있습니다.
전원 버튼 핀 6.
재설정 버튼 핀 7.
GND 핀 5.
PIN D1 재설정 핀에서 전원 상태를 읽는 데 사용됩니다. High는 켜져 있습니다. 저항 R1 IO 핀이 실수로 출력으로 설정 될 때 전류를 최소화하는 데 사용됩니다.
PIN D2 전원 버튼을 낮추어 짧거나 긴 누르기를 생성하는 데 사용됩니다. 트랜지스터 Q1 은 ESP8266과 마더 보드 사이의 안전한 분리에 사용됩니다.
경고 : 모든 ATX 및 ESP 핀은 3V3에서 작동해야합니다.

DIY 브레이크 아웃 PCB는 시스템 패널 헤더에 장착하여 전원 버튼 SW1 및 재설정 버튼 SW2 연결할 수 있습니다.
ATX 컴퓨터 케이스에는 ESP 보드를 장착하기에 충분한 공간이 있습니다. 그러나 컴퓨터 케이스는 금속 차폐이므로 기지국까지의 WiFi 거리가 줄어 듭니다. Wi -Fi 연결이 불안정하거나 거리가 너무 낮을 때 ESP를 컴퓨터 케이스 외부에 배치하는 것이 좋습니다. ESP32는 다른 WiFi 연결 안정성을 초래할 수 있지만 전반적으로 환경에 따라 다릅니다.
ESP8266 PCB가 PC 뒷면에 장착되었습니다.

Esphome Application 펌웨어는 USB 연결 (가상 직렬 포트) 또는 WiFi OTA (공기 업데이트를 통해)를 통해 업데이트 할 수 있습니다.
.YAML 파일에서 ota 구성 할 때 WiFi를 통해 펌웨어 업데이트가 활성화됩니다. 이를 위해서는 호스트 컴퓨터와 ESP 간의 WiFi 연결이 필요합니다. ESP에서 WiFi 기지국으로 로그인이 잘못된 WiFi 자격 증명으로 인해 실패하면 OTA 업데이트가 작동하지 않습니다. 이 경우 Serial을 통한 업데이트는 .yaml 파일에 구성된대로 ap 폴백을 통해 필요합니다.
Esphome 응용 프로그램은 두 Yaml 파일로 구성됩니다. 하나의 구성 파일과 두 번째 secrets.yaml 비밀번호를 저장합니다.
선적 서류 비치:
다음 파일을 구성하십시오.
platform 및 board 구성합니다.Esphome Yaml 구성에 대한 자세한 내용은 Esphome 문서를 참조하십시오.
USB 케이블을 ESP8266 또는 ESP32 보드에 연결하고 다음 명령을 입력하십시오. (예제는 우분투에서 테스트됩니다). 자세한 내용은 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 .원시 편집을 통해 대시 보드에 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 로 변경합니다.