Encender / Apagar PC desde Home Assistant

¿Se imaginan poder controlar su PC desde Home Assistant? esto es lo que vamos a hacer en el capítulo de hoy. Vamos a ver como encender, apagar, suspender, reiniciar, cerrar sesión a un ordenador con Windows 10 desde nuestro Home Assistant. Y si lo podemos hacer des de Home Assistant, también lo podremos hacer desde nuestro Google Home o Alexa.

Desactivar el inicio rápido de Windows 10 para controlar PC desde Home Assistant

Para poder hacer todo el proceso, lo primero que tendremos que hacer es desactivar el inicio Rápido de nuestro Windows 10. Para ello, vamos a seguir los siguientes pasos.

  • En la ventanita de abajo a la izquierda escribimos Panel de Control y entramos dentro de él.
  • En Visualiza ponemos Iconos Pequeños.
  • Entramos en Opciones de Energía.
  • Una vez dentro, vamos al menú de la izquierda y entramos en la segunda opción. La de Elegir el comportamiento de los botones de inicio/apagado.
  • Ahora le damos en Cambiar la configuración actualmente no disponible.
  • Desmarcamos la casilla de Inicio Rápido.
  • Guardamos y ya podemos salir.

Activar Wake on Lan para controlar PC desde Home Assistant

Ahora toca activar el Wake on Lan para así poder encender nuestro ordenador remotamente. Para hacer esto, vamos a empezar con nuestro ordenador apagado. Lo encendemos y nos fijamos bien en la información que salga en pantalla ya que nos dirá cómo entrar a la configuración UEFI de nuestra BIOS. (Normalmente es F2 o Supr)

Aquí dependerá mucho de la marca y también del modelo de nuestra placa base. Por lo general hay que seguir estos pasos. Yo lo voy a explicar con mi placa que es de la marca Asus.

  • Una vez hemos entrado a la configuración pulsando la tecla F2 o Suprm. Buscamos el Modo Avanzado.
  • Dentro de este, vamos a Opciones Avanzadas.
  • Aquí tenemos que buscar dónde ponga UEFI o APM. En mi caso, es APM.
  • Ahora en la opción de Power on by PCIE, la activo.
  • Guardar y salir.

Con este cambio, ya podremos encender nuestro ordenador remotamente.

Controlar un ordenador con Windows 10 desde Home Assistant

En este momento, nuestro ordenador y nuestro Windows 10 ya están preparados. Ahora falta decir que necesitamos de un servidor mqtt en nuestro Home Assistant. En mi caso, tengo el Mosquitto mqtt (si no lo tienes y quieres instalarlo, aquí te lo explico). Aquí si no recordamos el nombre de usuario y la contraseña, sólo tenemos que ir a Supervisor, entrar dentro del addon de Mosquitto Broquer y en Configuración, encontraremos nuestro nombre de usuario y contraseña.

Vamos a instalar un programa en nuestro pc que es el que hará la comunicación entre Home Assistant y Windows 10. Este programa se llama IOT Link. Para descargarlo, vamos a su página web y nos descargamos la última versión des de la pestaña Descargas. Lo instalamos cómo cualquier otro programa de Windows.

Una vez instalado, vamos al menú de programas de nuestro PC, buscamos IOT Link y sin entrar en él, buscamos la opción Open configuration file.

Se nos abrirá un archivo con el Bloc de notas y tendremos que configurar los siguientes campos

  • username: (nuestro nombre de usuario de MQTT)
  • password: (nuestra contraseña de MQTT)
  • hostname (la dirección IP de nuestro servidor MQTT. Ex. 192.168.78.12)
  • port: 1883 (en principio si es el puerto por defecto no deberemos tocarlo)
  • Guardamos y cerramos este archivo.
  • Regresamos al menú de la Izquierda y otra vez dentro de IOT Link, le damos en Install Windows Service (Ejecutarlo cómo administrador)
  • Cuando acabe, ya le podemos dar en Start Windows Service (también ejecutar cómo administrador)

Ahora, ya tendría que estar todo funcionando. Para verificarlos, regresamos al menú de la Izquierda y otra vez dentro de IOT Link, le damos en Open Logs Folder. y se nos abrirá una carpeta. Abrimos el archivo que empieza por ServiceLog…..

Dentro de él, verificamos que no nos esté dando ningún error. Si nos dice…. Addon Commands has subscribed to topic XXXXXXXX es que todo está bien. Muy importante aquí que te fijes en una línea (normalmente la cuarta) que pone … ALL YOUR MQTT TOPICS WILL START WITH iotlink/workgroup/desktop-jm955jj/. Esto último lo vas a necesitar en el paso siguiente

Llegados a este punto, ya sólo nos falta de crear los sensores y scripts para controlar nuestro PC desde Home Assistant.

Antes de nada, vamos a ir a nuestro archivo configuration.yaml y pegaremos la siguiente línea.

wake_on_lan:

Vamos a ver en primer lugar los Scripts. En todos los Scripts, tendrás que cambiar eso iotlink/workgroup/desktop-jm955jj/ por lo que te ponga tu archivo. Todos estos scripts los copiaremos dentro de nuestro archivo scripts.yaml

my_computer_shutdown:
  alias: My Computer - Shutdown
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/shutdown
  mode: single
my_computer_wake:
  alias: My Computer  Wake
  sequence:
  - service: wake_on_lan.send_magic_packet
    data:
      mac: 10:7B:44:10:7B:44
  mode: single
my_computer_suspend:
  alias: My Computer  Suspend
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/suspend
      payload: ''
my_computer_hibernate:
  alias: My Computer - Hibernate
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/hibernate
      payload: ''
my_computer_reboot:
  alias: My Computer - Reboot
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/reboot
      payload: ''
my_computer_lock:
  alias: My Computer - Lock
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/lock
      payload: ''
my_computer_logoff:
  alias: My Computer - Logoff
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/logoff
      payload: ''
my_computer_vol_mute:
  alias: My Computer - Toggle Mute
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/volume/mute
      payload: ''
my_computer_vol_max:
  alias: My Computer - Vol Max
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/volume/set
      payload: '100'
my_computer_displays_on:
  alias: My Computer - Displays ON
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/displays/on
      payload: ''
my_computer_displays_off:
  alias: My Computer - Displays OFF
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/displays/off
      payload: ''
my_computer_refresh:
  alias: My Computer - Refresh
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/refresh
      payload: ''
my_computer_notify:
  alias: My Computer - Notify
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/notify
      payload: '{ "title": "My Notification Title", "message": "This is an example
        of notification using IOT Link", "launchParams": "toast://open/https://iotlink.gitlab.io"
        }'
my_computer_tecnoyfoto_web:
  alias: Tecnoyfoto web
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
        "args": "https://tecnoyfoto.com/", "path": "C:\\Program Files (x86)\\Google\\Chrome\\Application",
        "user": "", "visible": true, "fallback": true }'
my_computer_canal_tecnoyfoto:
  alias: Canal Tecnoyfoto
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
        "args": "https://studio.youtube.com/channel/UCCEwPfv49j9zycREVqIzckg", "path":
        "C:\\Program Files (x86)\\Google\\Chrome\\Application", "user": "", "visible":
        true, "fallback": true }'

pc_albert_toogle:
  alias: PC Albert toggle
  sequence:
  - service: switch.toggle
    target:
      entity_id: switch.my_computer
  mode: single

my_computer_kodi:
  alias: Kodi
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files\\Kodi\\kodi.exe",
        "args": "", "path":
        "", "user": "", "visible":
        true, "fallback": true }'

my_computer_ccleaner:
  alias: Ccleaner
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files\\CCleaner\\CCleaner64.exe",
        "args": "", "path":
        "", "user": "", "visible":
        true, "fallback": true }'
  
my_computer_word:
  alias: Word
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE",
        "args": "", "path":
        "", "user": "", "visible":
        true, "fallback": true }'

my_computer_excel:
  alias: Excel
  sequence:
  - service: mqtt.publish
    data:
      topic: iotlink/workgroup/desktop-jm955jj/commands/run
      payload: '{ "command": "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE",
        "args": "", "path":
        "", "user": "", "visible":
        true, "fallback": true }'


Vamos ahora a nuestro archivo sensor.yaml y pegamos todo esto. Acuérdate igual que en scripts de cambiar la línea.

#### MI ORDENADOR #####

  - platform: mqtt
    name: "PC Albert - CPU Usada"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/cpu/usage"
    unit_of_measurement: '%'
    icon: mdi:speedometer
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - RAM Usada"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/memory/usage"
    unit_of_measurement: '%'
    icon: mdi:memory
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - RAM Disponible"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/memory/available"
    unit_of_measurement: 'MB'
    icon: mdi:memory
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - RAM Usada"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/memory/used"
    unit_of_measurement: 'MB'
    icon: mdi:memory
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - RAM Total"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/memory/total"
    unit_of_measurement: 'MB'
    icon: mdi:memory
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Batería restante"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/battery/remaining-percent"
    unit_of_measurement: '%'
    device_class: battery
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Tiempo restante de la batería"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/battery/remaining-time"
    unit_of_measurement: 'minutes'
    icon: mdi:timer
    value_template: "{{ ( value | float / 60 ) | int }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Vida útil prevista"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/battery/full-lifetime"
    unit_of_measurement: 'minutes'
    icon: mdi:timer
    value_template: "{{ ( value | float / 60 ) | int }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Usado (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/drive-usage"
    unit_of_measurement: '%'
    icon: mdi:chart-donut
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Tamaño total (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/total-size"
    unit_of_measurement: 'GB'
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Espacio libre total (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/total-free-space"
    unit_of_measurement: 'GB'
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Espacio libre (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/available-free-space"
    unit_of_measurement: 'GB'
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Espacio usado (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/used-space"
    unit_of_measurement: 'GB'
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Format (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/drive-format"
    unit_of_measurement: ''
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - HDD Label (C)"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/hard-drive/c/volume-label"
    unit_of_measurement: ''
    icon: mdi:harddisk
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Red IPv4"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/network/0/ipv4"
    unit_of_measurement: ''
    icon: mdi:lan
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Red IPv6"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/network/0/ipv6"
    unit_of_measurement: ''
    icon: mdi:lan
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Velocidad de la red"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/network/0/speed"
    unit_of_measurement: 'Mbps'
    icon: mdi:speedometer
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "PC Albert - Red cableada"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/network/0/wired"
    unit_of_measurement: ''
    icon: mdi:ethernet
    value_template: "{{ value }}"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

Ahora vamos a nuestro archivo binary_sensors.yaml y pegamos estas líneas

#### MI ORDENADOR ####

  - platform: mqtt
    name: "My Computer - Connected"
    state_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    value_template: "{{ value }}"
    payload_on: "ON"
    payload_off: "OFF"
    device_class: "connectivity"
    qos: 1

  - platform: mqtt
    name: "My Computer - Charging"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/power/status"
    value_template: "{{ value }}"
    payload_on: "Online"
    payload_off: "Offline"
    device_class: "plug"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

  - platform: mqtt
    name: "My Computer - Battery Status"
    state_topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/battery/status"
    value_template: "{{ value }}"
    payload_on: "Online"
    payload_off: "Offline"
    device_class: "plug"
    availability_topic: "iotlink/workgroup/desktop-jm955jj/lwt"
    payload_available: "ON"
    payload_not_available: "OFF"
    qos: 1

en mi archivo de cámaras (cameras.yaml), crearé una cámara para ver que está en pantalla en mi pc

  - platform: mqtt
    name: "My Computer - Screen 0"
    topic: "iotlink/workgroup/desktop-jm955jj/windows-monitor/stats/display/0/screen"

y finalmente, voy a crear un botón para encender y apagar el pc desde Home Assistant. Todo esto hay que pegarlo en nuestro archivo switch.yaml (OJO!!!! en el vídeo no sale todo, pero si necesitas pegarlo todo!)

 #### MI ORDENADOR ###   
    
  - platform: template
    switches:
      my_computer:
        friendly_name: "Ordenador"
        value_template: "{{ is_state('binary_sensor.my_computer_connected', 'on') }}"
        turn_on:
          service: script.my_computer_wake
        turn_off:
          service: script.my_computer_shutdown
        icon_template: mdi:laptop
        

  - platform: wake_on_lan
    mac: 10:7B:44:10:7B:44

Si no sabes cómo encontrar la mac de tu PC, aquí te lo explico

Ahora ya sólo falta ir a Configuración, Verificar que todo está correcto y reiniciar nuestro Home Assistant.

Google Home y/o Alexa

Para poder utilizar todo esto desde Google Home o Alexa, tienes que tener a la integración hecha del sistema que prefieras (en el link de cada uno te explico cómo hacerlo). Con Nabu Casa lógicamente también te sirve. Después crear una rutina para cada servicio que quieras utilizar con tu voz.

Sigueme a Youtube

Sígueme en Youtube - Encender - Apagar PC desde Home Assistant
(Visited 4.291 times, 1 visits today)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

EnglishDeutschEspañol