Controlo portão RF com Broadlink e sensor de porta

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):

  1. Controlo por Broadlink RF - o MESMO commando para ABRIR / FECHAR / PARAR.

  2. Sensor de porta que apenas controla o estado FECHADO … ou não (não sabe “PERCENTAGEM/QUANTO está aberto”).

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

image

EXEMPLO EM VÍDEO


Integrações e ‘custom cards’ usados:

  1. Lovelace (HACS):

  1. Custom Component (HACS)

  1. Auxiliar criado no HA:
input_select.portao_do_quintal_proxima_accao (opções = "Abrir","Fechar","Parar")

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

  1. 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!

4 Curtiram

Está muito bom o projecto @FragMenthor !

Vais ter é de alterar a descrição do teu perfil porque já não és Noob em HA, mas com vontade de aprender. Deixaste de ser noob e também ensinas… :wink:

3 Curtiram

Parabéns pelo excelente projeto. Acho que vou aproveitar coisas para mim. Faço das palavras do @j_assuncao minhas, concordo plenamente. Muda lá isso. Está mesmo top.

1 Curtiu

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade