Este proyecto contiene control de potencia de PC remoto a través de tableros Homeassistant y Esfome ESP8266/ESP32.
Utilizo este proyecto para alimentar mi NAS basado en PC de forma remota a través del Asistente Home como alternativa a Wake-On-Lan (WOL) que tiene limitaciones conocidas.
power-off/suspended/hybernate (comportamiento corto presione el botón de encendido).shutdown/suspend/hybernate del sistema operativo (comportamiento corto presione el botón de encendido).Video de YouTube:
Captura de pantalla de Homeassistant:

Wake-on-Lan (WOL) está destinado a encender la computadora de forma remota a través de Ethernet enviando un llamado magic packet . Esto tiene varias limitaciones conocidas que no son aplicables con este proyecto ESP:
wake una PC de suspensión o estado de apagado. No hay funcionalidad de cierre/suspensión.sleep , se puede hacer una conexión SSH a la PC remota, por ejemplo, ejecutando el comando pm-suspend (instalar a través de sudo apt install pm-utils ), referencia a la documentación de actualización de Ubuntu PM. Desventajas:El hardware consta de un ESP8266 o ESP32 y dos pines IO, montados en una placa de metal PCI (ver la imagen a continuación). En mi caso, utilicé una placa NodEMCU ESP8266. Teóricamente, se puede utilizar cualquier placa ESP8266 o ESP32 para este proyecto.

Mi NAS se basa en una placa base Intel Core i7 Asrock Z97 ATX y contiene encabezados machos estándar de 2.5 mm 2x5:

Encabezado ATX USB 2.0:
Encabezado J1 Pin 1 Constante +5V Potencia en el pin 1, incluso cuando la PC está apagada y se usa para alimentar el nodemCU. El ESP8266 o ESP32 se alimenta a través de un regulador 3V3 integrado.
Panel del sistema de encabezado ATX:
El encabezado J2 contiene los pasadores de potencia, reinicio y GND:
Botón de encendido Pin 6.
Botón de reinicio Pin 7.
Gnd Pin 5.
El pin D1 se usa para leer el estado de potencia del pin de reinicio: alto está encendido, bajo está apagado. La resistencia R1 se usa para minimizar la corriente cuando el pin IO se establece accidentalmente en la salida.
El PIN D2 se usa para tirar del botón de encendido bajo para generar una presión corta o larga. El transistor Q1 se usa para un aislamiento seguro entre ESP8266 y la placa base.
ADVERTENCIA: Todos los pines ATX y ESP deben estar operando a 3V3.

Se puede montar una PCB de breakout de bricolaje en el encabezado del panel del sistema para conectar el botón de encendido SW1 y reiniciar el botón SW2 .
Hay suficiente espacio en una caja de computadora ATX para montar la placa ESP. Sin embargo, la caja de la computadora está protegida por metal, por lo que la distancia WiFi a la estación base se reduce. Se recomienda colocar el ESP fuera de la caja de la computadora cuando la conexión WiFi es inestable o la distancia demasiado baja. Un ESP32 puede dar lugar a una estabilidad de conexión Wifi diferente, pero en general depende del entorno.
ESP8266 PCB montada en la parte posterior de la caja de PC:

El firmware de la aplicación de escoma se puede actualizar a través de la conexión USB (puerto serie virtual) o WiFi OTA (a través de la actualización de aire).
La actualización del firmware a través de WiFi está habilitado al configurar ota en el archivo .yaml. Esto requiere una conexión WiFi entre la computadora host y ESP. La actualización de OTA no funciona cuando el inicio de sesión de ESP a la estación base WiFi falla debido a las credenciales WiFi incorrectas. En este caso, se requiere una actualización a través de Serial o mediante ap Fallback, según lo configurado en el archivo .yaml.
La aplicación de escoma consta de los dos archivos YAML. Un archivo de configuración y un segundo secrets.yaml para almacenar contraseñas.
Documentación:
Configurar los siguientes archivos:
platform y board .Consulte la documentación de Esfoma para obtener más información sobre la configuración de Effome YAML.
Conecte el cable USB a la placa ESP8266 o ESP32 e ingrese los siguientes comandos. (Se prueban ejemplos en Ubuntu). Para obtener más información, consulte Esfoma.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.yamlEsta sección describe la configuración del asistente de inicio.
Configuration | Integrations: Add Integration: ESPHomesecrets.yml | esphome_api_password .Agregue la integración de potencia de PC a un tablero a través de la edición sin procesar:
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 ¡Reinicie el asistente de casa y listo para comenzar!
El formato de archivo ESPHOME YAML cambió con la versión ESPHOME 2024.6.0. El formato anterior genera errores como:
$ 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.
En este caso, actualice el formato de archivo nuevo en este proyecto.
switch.pc_power_button para switch.pc_power_toggle .switch.pc_power_button_long_press para switch.pc_hard_power_off .switch.pc_power_sense para switch.pc_power_state .