动机
为了让民用主板实现ipmi的能力,仅仅使用ip kvm是不够的,缺少了对被控电脑的开关机(强制关机)的管理能力。主流的实现方式是使用一个单独的设备(继电器)对电脑主板上的POWER/RESET SW两个针脚的短接控制(短时间短接改变开关机状态,长时间短接为强制关机)。
淘宝上成品很多,但是强制绑定远程云服务(云服务宕机时开机卡就会失联),无法满足内网使用的需求。因此基于一系列开源软硬件,实现开源可控的开关机管理能力。
构成
软件
- esphome(构建刷入esp开发板的固件)
- esphome-flasher(烧录固件)
- home assistant(控制esp开发板)
硬件
- esp01s开发版
- 继电器模块
- usb转串口(用于将开发板连接到电脑烧录固件)
- 若干线
简述
编写yaml配置文件,使用esphome编译成bin后缀固件,使用usb转串口模块将esp01s开发板与pc连接(gpio0需要接地),经由esphome-flasher将固件刷入esp01s后将esp01s与继电器模块连接,上电后使用home assistant添加集成设备并控制其行为。
细节
构建固件的配置文件
esphome:
name: relay ##这里的名称一定要与你建立这个模块时的名称相同;
platform: ESP8266 ##这里不能变;
board: esp01_1m ##这里不能变;
esp8266_restore_from_flash: yes ##是否断电记忆继电器状态;
wifi:
ssid: "xx" ## wifi账号;
password: "xx" ## wifi密码;
manual_ip:
static_ip: 192.168.123.114 ##固定此设备IP地址;
gateway: 192.168.123.1 ##路由器、网关地址;
subnet: 255.255.255.0 ##子网掩码;
api:
password: "xx" ##ha连接时的密码;
cover:
- platform: template
name: "control pc"
open_action: ##开机短接;
- switch.turn_on: relay
- delay: 0.7s
- switch.turn_off: relay
close_action: ##关机短接;
- switch.turn_on: relay
- delay: 0.7s
- switch.turn_off: relay
stop_action: ##强制关机;
- switch.turn_on: relay
- delay: 5s
- switch.turn_off: relay
optimistic: true
assumed_state: true
switch: ##设备类型;
- platform: gpio ##平台;
name: "POWER/RESET SW connect" ##自定义名称,最好起关联的名称;
pin: GPIO0 ##ESP01/01S 是GPIO0脚;
id: relay ##ID 为继电器开关;
inverted: yes ## inverted 参数,表示低电平有效,即继电器是低电平触发;
Comments | NOTHING