Skip to content

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.

Índice de contenido

    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.

    Encontrar la MAC de Windows

    finalmente, necesitamos encontrar la MAC de nuestro ordenador. En el siguiente vídeo, te explico cómo hacerlo.

    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

    Related Posts

    Deja una respuesta

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

    Comments (6)

    esta todo muy claro mis felicitaciones Albert , pero una única pregunta como conozco mi dirección Mac en Linux ?

    Responder

    Abre la terminal en tu distribución de Linux.
    Ejecuta el siguiente comando: ifconfig
    entre los resultados que te saldran, está la mac

    Responder

    Esto ya no funciona…. descontinuado….

    Responder

    será a tí, a mí me sigue funcionando cómo el primer día!

    Responder

    Buenas tardes, he seguido todos los pasos pero en mi archivo sensors.yaml me aparece un error en cada platform: mqtt, me dice «bad indentation of a sequence entry». He mirado el ServiceLog de IOT y parece que está todo correcto. ¿Sabrías decirme que puede ser?

    Responder

    ¡Hola Carlos!

    Buenas tardes y gracias por tu comentario. Entiendo que puede ser muy frustrante encontrarse con errores de indentación en YAML. Este tipo de errores son bastante comunes y pueden ser difíciles de detectar.

    El error «bad indentation of a sequence entry» generalmente significa que hay un problema con cómo están alineadas las líneas en tu archivo sensors.yaml. En YAML, la indentación es crucial y debe ser consistente.

    Te aconsejo que vayas a ChatGPT aunque sea la versión gratuita y le pidas que te revise el código, si hay error, te lo va a detectar.
    Espero que con esto puedas solucionar el problema

    Responder
    Ajustes