Boas pessoal. Tenho andado às voltas com o problema do meu portão, que tem uma funcionalidade um pouco “estranha”, e finalmente consegui resolver o assunto de forma bastante satisfatória.
Hardware e funcionalidades (no meu caso):
-
Controlo por Broadlink RF - o MESMO commando para ABRIR / FECHAR / PARAR.
-
Sensor de porta que apenas controla o estado FECHADO … ou não (não sabe “PERCENTAGEM/QUANTO está aberto”).
-
Funcionalidade do comando RF (igual ao comando físico):
- se o portão está FECHADO - o Comando RF ABRE.
- se o portão está ABERTO - o Comando RF FECHA.
- se o portão está A ABRIR - o Comando RF PÁRA, e o próximo comando será FECHAR.
- se o portão está A FECHAR - o Comando RF PÁRA, e o próximo comando será ABRIR.
EXEMPLO EM VÍDEO
Integrações e ‘custom cards’ usados:
- Lovelace (HACS):
- Custom Component (HACS)
- Auxiliar criado no HA:
input_select.portao_do_quintal_proxima_accao (opções = "Abrir","Fechar","Parar")
- Comando único RF, a funcionar, definido no Broadlink, para activar o portão. Isto tem de funcionar (nos scripts.yaml):
- service: remote.send_command
data:
entity_id: remote.broadlink_ir_rf_rm4
device: portao-quintal
command: ativar_on_off
- Código:
configuration.yaml
cover: !include covers.yaml
script: !include scripts.yaml
automation: !include automations.yaml
customize: !include customize.yaml
covers.yaml
- platform: cover_rf_time_based
devices:
portao_quintal:
name: Portão do Quintal
travelling_time_up: 24
travelling_time_down: 23
close_script_entity_id: script.ativar_portao_do_quintal
stop_script_entity_id: script.ativar_portao_do_quintal
open_script_entity_id: script.ativar_portao_do_quintal
send_stop_at_ends: false #optional
aliases: #optional
- portao_quintal
scripts.yaml
ativar_portao_do_quintal:
alias: Portão do Quintal - Activar
sequence:
- service: remote.send_command
data:
entity_id: remote.broadlink_ir_rf_rm4
device: portao-quintal
command: ativar_on_off
hold_secs: 1.5
entity_id: remote.broadlink_ir_rf_rm4
mode: single
icon: mdi:gate
portao_do_quintal_controlo:
alias: Portão do Quintal - Controlo
sequence:
- choose:
- conditions:
- condition: state
entity_id: cover.portao_quintal
state: closed
sequence:
- service: cover.open_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
target:
entity_id: input_select.portao_do_quintal_proxima_accao
data:
option: Parar
- conditions:
- condition: state
entity_id: cover.portao_quintal
state: open
- condition: numeric_state
entity_id: cover.portao_quintal
attribute: current_position
above: '99'
sequence:
- service: cover.close_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
target:
entity_id: input_select.portao_do_quintal_proxima_accao
data:
option: Parar
- conditions:
- condition: state
entity_id: cover.portao_quintal
state: opening
sequence:
- service: cover.stop_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
target:
entity_id: input_select.portao_do_quintal_proxima_accao
data:
option: Fechar
- conditions:
- condition: state
entity_id: cover.portao_quintal
state: closing
sequence:
- service: cover.stop_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
target:
entity_id: input_select.portao_do_quintal_proxima_accao
data:
option: Abrir
- conditions:
- condition: and
conditions:
- condition: state
entity_id: input_select.portao_do_quintal_proxima_accao
state: Abrir
- condition: numeric_state
entity_id: cover.portao_quintal
attribute: current_position
above: '0'
below: '100'
sequence:
- service: cover.open_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
data:
option: Parar
target:
entity_id: input_select.portao_do_quintal_proxima_accao
- conditions:
- condition: and
conditions:
- condition: state
entity_id: input_select.portao_do_quintal_proxima_accao
state: Fechar
- condition: numeric_state
entity_id: cover.portao_quintal
attribute: current_position
above: '0'
below: '100'
sequence:
- service: cover.close_cover
target:
entity_id: cover.portao_quintal
- service: input_select.select_option
data:
option: Parar
target:
entity_id: input_select.portao_do_quintal_proxima_accao
default: []
mode: single
automations.yaml
alias: Portão do Quintal - Estado actual e próximo
description: ''
trigger:
- platform: state
entity_id: binary_sensor.portao_quintal_contact
from: 'off'
to: 'on'
id: portao_abriu
- platform: state
entity_id: binary_sensor.portao_quintal_contact
id: portao_fechou
from: 'on'
to: 'off'
- platform: numeric_state
entity_id: cover.portao_do_quintal
id: abriu_tudo
attribute: current_position
above: '99'
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: portao_abriu
sequence:
- service: cover_rf_time_based.set_known_action
data:
entity_id: cover.portao_quintal
action: open
- conditions:
- condition: trigger
id: portao_fechou
sequence:
- service: cover_rf_time_based.set_known_position
data:
entity_id: cover.portao_quintal
position: 0
confident: true
- service: input_select.select_option
data:
option: Abrir
target:
entity_id: input_select.portao_do_quintal_proxima_accao
- conditions:
- condition: trigger
id: abriu_tudo
sequence:
- service: input_select.select_option
data:
option: Fechar
target:
entity_id: input_select.portao_do_quintal_proxima_accao
default: []
customize.yaml
cover.portao_quintal:
device_class: gate
input_select.portao_do_quintal_proxima_accao:
templates:
icon: if (state == "Abrir") return 'mdi:arrow-expand-horizontal'; if (state ==
"Fechar") return 'mdi:arrow-collapse-horizontal'; return 'mdi:stop';
script.portao_do_quintal_controlo:
icon: mdi:gate
Botão no Lovelace
type: custom:vertical-stack-in-card
cards:
- type: custom:button-card
show_state: true
show_name: false
tap_action:
action: call-service
service: script.portao_do_quintal_controlo
icon: mdi:gate
entity: cover.portao_quintal
size: 180px
lock:
enabled: '[[[ return entity.state === ''closed''; ]]]'
duration: 30
unlock: tap
styles:
grid:
- grid-template-areas: '"i s" "i s"'
- grid-template-columns: 2.5fr 1fr
- grid-template-rows: min-content min-content
- type: custom:bar-card
entities:
- entity: cover.portao_quintal
attribute: current_position
unit_of_measurement: '%'
icon: mdi:gate
direction: right
positions:
icon: outside
indicator: outside
name: inside
severity:
- from: '0'
to: '0'
color: green
icon: mdi:gate
- from: '1'
to: '10'
color: yellow
icon: mdi:gate
- from: '11'
to: '20'
color: orange
icon: mdi:gate-open
- from: '21'
to: '100'
color: red
icon: mdi:gate-open
attribute: cover.portao_quintal
- type: entities
entities:
- type: custom:multiple-entity-row
entity: input_select.portao_do_quintal_proxima_accao
Com isto é possível prever, com alguma segurança e precisão, o estado do meu portão, com animação e tudo. Importante mesmo é confirmar o fecho, e essa parte está assegurada pelo sensor de porta. Vou melhorar o tutorial aos poucos, esclarecendo dúvidas que forem, e se forem surgindo, sei que me devem faltar algumas coisas, tenham paciência. Espero que ajude a malta e dê também mais ideias.
Obrigado, pessoal!