DIY远程开机卡

发布于 2023-02-04  1.2k 次阅读


动机

为了让民用主板实现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添加集成设备并控制其行为。

IMG_1065

细节

构建固件的配置文件

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 参数,表示低电平有效,即继电器是低电平触发;

构建固件

image-20230204093101595

image-20230204093134979

刷入

image-20230204224820259

接入HA

image-20230204093250666

image-20230204093308530

image-20230204093325093

image-20230204093340672


面向ACG编程