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