Depois fiz os seguintes passos:
1 - No configuration.yaml adicionei o código
rest_command: !include rest_command.yaml
2 - Depois criar um ficheiro chamado rest_command.yaml com o seguinte código
box_uma_power:
url: "http://IP_do_ESP32_S2/key?name=F12"
method: GET
box_uma_play_pause:
url: "http://IP_do_ESP32_S2/type?text=p"
method: GET
box_uma_rewind:
url: "http://IP_do_ESP32_S2/type?text=r"
method: GET
box_uma_fast_forward:
url: "http://IP_do_ESP32_S2/type?text=f"
method: GET
box_uma_back:
url: "http://IP_do_ESP32_S2/key?name=BACKSPACE"
method: GET
box_uma_home:
url: "http://IP_do_ESP32_S2/key?name=HOME"
method: GET
box_uma_info:
url: "http://IP_do_ESP32_S2/key?name=F1"
method: GET
box_uma_c_plus:
url: "http://IP_do_ESP32_S2/key?name=PAGEUP"
method: GET
box_uma_c_minus:
url: "http://IP_do_ESP32_S2/key?name=PAGEDOWN"
method: GET
box_uma_vol_plus:
url: "http://IP_do_ESP32_S2/key?name=VOLUP"
method: GET
box_uma_vol_minus:
url: "http://IP_do_ESP32_S2/key?name=VOLDOWN"
method: GET
box_uma_vol_mute:
url: "http://IP_do_ESP32_S2/key?name=MUTE"
method: GET
box_uma_netflix:
url: "http://IP_do_ESP32_S2/key?name=F7"
method: GET
box_uma_apps:
url: "http://IP_do_ESP32_S2/key?name=F8"
method: GET
box_uma_prime_video:
url: "http://IP_do_ESP32_S2/key?name=F9"
method: GET
box_uma_up:
url: "http://IP_do_ESP32_S2/key?name=UP"
method: GET
box_uma_down:
url: "http://IP_do_ESP32_S2/key?name=DOWN"
method: GET
box_uma_left:
url: "http://IP_do_ESP32_S2/key?name=LEFT"
method: GET
box_uma_right:
url: "http://IP_do_ESP32_S2/key?name=RIGHT"
method: GET
box_uma_ok:
url: "http://IP_do_ESP32_S2/key?name=ENTER"
method: GET
box_uma_0:
url: "http://IP_do_ESP32_S2/type?text=0"
method: GET
box_uma_1:
url: "http://IP_do_ESP32_S2/type?text=1"
method: GET
box_uma_2:
url: "http://IP_do_ESP32_S2/type?text=2"
method: GET
box_uma_3:
url: "http://IP_do_ESP32_S2/type?text=3"
method: GET
box_uma_4:
url: "http://IP_do_ESP32_S2/type?text=4"
method: GET
box_uma_5:
url: "http://IP_do_ESP32_S2/type?text=5"
method: GET
box_uma_6:
url: "http://IP_do_ESP32_S2/type?text=6"
method: GET
box_uma_7:
url: "http://IP_do_ESP32_S2/type?text=7"
method: GET
box_uma_8:
url: "http://IP_do_ESP32_S2/type?text=8"
method: GET
box_uma_9:
url: "http://IP_do_ESP32_S2/type?text=9"
method: GET
3 - Validar tudo e reiniciar o HA
4 - Agora é altura de fazer o card. Fiz o seguinte mas confesso que ainda não está como eu gosto, tentei replicar o layout do comando.
type: vertical-stack
cards:
- type: markdown
content: '## Box Uma'
- type: grid
columns: 3
square: true
cards:
- type: button
icon: mdi:volume-off
tap_action:
action: call-service
service: rest_command.box_uma_vol_mute
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:power
tap_action:
action: call-service
service: rest_command.box_uma_power
- type: grid
columns: 3
square: false
cards:
- type: button
icon: mdi:rewind
tap_action:
action: call-service
service: rest_command.box_uma_rewind
- type: button
icon: mdi:play-pause
tap_action:
action: call-service
service: rest_command.box_uma_play_pause
- type: button
icon: mdi:fast-forward
tap_action:
action: call-service
service: rest_command.box_uma_fast_forward
- type: grid
columns: 3
square: true
cards:
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:arrow-up
tap_action:
action: call-service
service: rest_command.box_uma_up
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:arrow-left
tap_action:
action: call-service
service: rest_command.box_uma_left
- type: button
icon: mdi:checkbox-blank-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_ok
- type: button
icon: mdi:arrow-right
tap_action:
action: call-service
service: rest_command.box_uma_right
- type: grid
columns: 3
square: true
cards:
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:arrow-down
tap_action:
action: call-service
service: rest_command.box_uma_down
- type: button
name: ' '
tap_action:
action: none
- type: grid
columns: 3
square: false
cards:
- type: button
icon: mdi:keyboard-backspace
tap_action:
action: call-service
service: rest_command.box_uma_back
- type: button
icon: mdi:home
tap_action:
action: call-service
service: rest_command.box_uma_home
- type: button
icon: mdi:information
tap_action:
action: call-service
service: rest_command.box_uma_info
- type: grid
columns: 4
square: true
cards:
- type: button
icon: mdi:volume-plus
tap_action:
action: call-service
service: rest_command.box_uma_vol_plus
- type: button
name: ' '
tap_action:
action: none
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:arrow-up-circle
tap_action:
action: call-service
service: rest_command.box_uma_c_plus
- type: grid
columns: 4
square: true
cards:
- type: button
icon: mdi:volume-minus
tap_action:
action: call-service
service: rest_command.box_uma_vol_minus
- type: button
name: ' '
tap_action:
action: none
- type: button
name: ' '
tap_action:
action: none
- type: button
icon: mdi:arrow-down-circle
tap_action:
action: call-service
service: rest_command.box_uma_c_minus
- type: grid
columns: 3
square: true
cards:
- type: button
icon: mdi:netflix
tap_action:
action: call-service
service: rest_command.box_uma_netflix
- type: button
icon: mdi:apps
tap_action:
action: call-service
service: rest_command.box_uma_apps
- type: button
icon: mdi:youtube
tap_action:
action: call-service
service: script.box_uma_youtube
- type: grid
columns: 5
square: true
cards:
- type: button
icon: mdi:numeric-1-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_1
- type: button
icon: mdi:numeric-2-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_2
- type: button
icon: mdi:numeric-3-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_3
- type: button
icon: mdi:numeric-4-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_4
- type: button
icon: mdi:numeric-5-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_5
- type: button
icon: mdi:numeric-6-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_6
- type: button
icon: mdi:numeric-7-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_7
- type: button
icon: mdi:numeric-8-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_8
- type: button
icon: mdi:numeric-9-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_9
- type: button
icon: mdi:numeric-0-circle-outline
tap_action:
action: call-service
service: rest_command.box_uma_0
Quem quiser dar sugestões, serão bem-vindas!
5 - Com os commands definidos quis testar uma coisa que o comando não permite, um botão para iniciar logo o Youtube. A ideia foi criar um script que simulasse as teclas necessárias até chegar à APP Youtube mas que podem mudar a qualquer altura.
Este foi o script que fiz
box_uma_youtube:
alias: Box Uma - Youtube
sequence:
- action: rest_command.box_uma_apps
- delay:
milliseconds: 500
- repeat:
count: 7
sequence:
- action: rest_command.box_uma_right
- delay:
milliseconds: 250
- delay:
milliseconds: 400
- action: rest_command.box_uma_ok
mode: single
description: ''
icon: mdi:youtube
Este script simula carregar no botão das APPs, andar para a direita 7 vezes e carregar em OK.
Seguindo esta lógica podem fazer diferentes automações e botões como a APP do TVCine+
Também queria testar botões para os canais em vez de apenas números.
Com esta base a imaginação é mesmo o limite.
O que isto não permite fazer é saber o estado da box (precisamos de uma tomada wifi/zigbee para saber se está on ou off) ou o tipo de conteúdo que está a dar mas já me permite controlar a box pelo home assistant.
Espero que seja útil para mais alguém!