Sommaire

Domotiser son PC v2.0

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.

/automate-computer-v2/img/IMG_0.webp
Module

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).

/automate-computer-v2/img/IMG_1.webp
Module A

Sa fonctionne !

Pour l'extinction

Pour que l’appuie sur le bouton provoque bien une extinction de l’ordinateur, il faut que se dernier soit configuré ainsi :

/automate-computer-v2/img/Screen_0.webp
Options d’alimentation

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
/automate-computer-v2/img/IMG_2.webp
Module A sur ESP32

Code

Voici mon code ESPHome :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 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
/automate-computer-v2/img/Screen_1.webp
Aperçu sur Lovelace

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é !