Je revois la manière dont je démarre et arrête mon PC sans Wake on LAN.
Introduction
Dans mon autre article sur le sujet,
j’ai utilisé le Wake on LAN pour démarrer mon PC.
Depuis, j’ai changé de carte réseau pour une 2,5 Gb/s
mais qui ne supporte plus le WoL.
J’ai donc cherché une solution qui simulait l’appuie sur le
bouton d’allumage/extinction et c’est ce que je vous partage ici.
Principe
Mon but est de pouvoir “appuyer” sur le bouton d’allumage de mon PC
via un équipement électronique. J’ai donc cherché un moyen de
déporter le bouton sans que ce dernier soit inutilisable.
J’ai trouvé la solution dans des accessoires de PiKVM.
Je ne saurai nommer ce produit dont
voici le lien.
Le module ATXA-B a ses pins qui s’interfacent entre la carte mère du PC et les connecteurs du panneau frontal (“front panel”). Il est monté sur une lame PCI afin d’être fixé sur un slot PCI.
L’autre partie est l’interface de contrôle externe. Relié à l’autre module par un câble réseau droit, elle permet de voir le status via des LEDs, d’actionner le power et reset par des boutons et expose ses fonctions par des GPIOs.
Avec ces GPIOs déportés, il me suffit de trouvé un système pour
s’interfacer a cela. Si vous êtes un lecteur de longue date,
vous connaissez déjà la solution : un ESP !
Je vais donc interfacer une carte de développement ESP32
programmée avec ESPHome.
Une fois la carte B installé dans le boitier, on peut déjà tester les boutons du module A (avec le câble réseau droit).
Sa fonctionne !
Information
Pour l’extinction
Pour que l’appuie sur le bouton provoque bien une extinction de l’ordinateur, il faut que ce dernier soit configuré ainsi :
Câblage
Maintenant, plus qu’à relier cela à mon ESP, de flasher ce dernier
et le tour est joué.
J’ai donc relié les pins (sauf celui de l’activité du disque dur)
sur des GPIOs de mon ESP.
Mon association Module/ESP est la suivante :
Module A | ESP32 |
---|---|
GND | GND |
3V3 | 3V3 |
LED PWR | D5 |
SW PWR | D2 |
SW RST | D4 |
Code
Voici mon code ESPHome :
substitutions:
node_name: nodemcu32-2
esphome:
name: ${node_name}
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: !secret mywifissid
password: !secret mywifipasswd
manual_ip:
static_ip: 192.168.17.4
gateway: 192.168.17.254
subnet: 255.255.255.0
# Enable logging
logger:
# Enable WebUI
web_server:
port: 80
# Enable Home Assistant API
## substitutions does not work with secrets
api:
encryption:
key: !secret api_nodemcu32_2
ota:
password: !secret ota_nodemcu32_2
switch:
# Power button
- platform: gpio
pin: 2
id: powersw
name: "${node_name}_power_sw"
icon: "mdi:radiobox-marked"
on_turn_on:
- delay: 500ms
- switch.turn_off: powersw
# Power button : 10 sec
- platform: gpio
pin: 2
id: hpowersw
name: "${node_name}_hard_power_sw"
icon: "mdi:radiobox-marked"
on_turn_on:
- delay: 10s
- switch.turn_off: hpowersw
# Reset button
- platform: gpio
pin: 4
id: resetsw
name: "${node_name}_reset_sw"
icon: "mdi:radiobox-marked"
on_turn_on:
- delay: 500ms
- switch.turn_off: resetsw
binary_sensor:
# Read Power status
- platform: gpio
pin:
number: 5
mode:
input: True
inverted: False
name: "${node_name}_power_status"
device_class: power
J’ai donc créé un interrupteur (switch) par bouton (“power” et “reset”) et un autre qui simule un appui de 10 secondes sur le bouton principal (pour faire un arrêt forcé).
Je remonte le status “Power” via la lecture de la LED dans un binary_sensor.
Home Assistant
Pour finir, on ajoute cela sur Home Assistant et le tour est joué ! Enfin presque…
Afin d’avoir un truc propre, j’ai créé un switch de type template afin de refléter au mieux le status de mon PC :
# Example de configuration.yaml
switch:
- platform: template
switches:
pc_anup:
value_template: "{{ is_state('binary_sensor.nodemcu32_2_power_status', 'on') }}"
turn_on:
service: switch.turn_on
target:
entity_id: switch.nodemcu32_2_power_sw
turn_off:
service: switch.turn_off
target:
entity_id: switch.nodemcu32_2_power_sw
Pour l’action de hard reset (que j’espère ne pas utiliser souvent), j’appellerai simplement le service via les “Outils de développement”.
Conclusion
En vue du prix du module, cette solution coûte plutôt cher…
En étudiant ce dernier, j’ai compris le rôle des optocoupleurs.
Avec un peu plus de confiance, je pense pouvoir réduire le coût
de cette solution en réalisant moi-même ce module.
S’il y a une V3, vous voila déjà spoilé !