Como integrei a fechadura Intelbras IFR 7000/7001 no HASO

Olá pessoal tudo bem com todos?
Tentarei ser bem sucinto explicando como que consegui fazer a integração da fechadura Intelbras e IFR7000 dentro do meu HASO.

Antes de tudo já peço desculpas pelos erros de ortografia e palavras com gramáticas erradas pois estou utilizando o conversor de áudio para texto devido ao tamanho do documento.

Bom vamos lá para realizar a integração e eu estudei bastante o funcionamento da fechadura ifr 7000 da Intelbras tentando realizar o sincronismo dela pelo protocolo Zig por meio do Zip 2m qtt utilizando um slzb 06p10. Após a realização de vários testes verifiquei a incompatibilidade no envio de dados por estarem criptografados e funcionários somente por meio de aplicação proprietária no caso tuia dentro de um Smart Life ou qualquer outro aplicação que utilize a mesma plataforma.

Aminha solução foi realizar a integração da fechadura por meio do local tuia. utilizando a aplicação local tuia eu consegui cadastrar a fechadura sendo um sub dispositivo do meu HUB X5 . Recapitulando a integração por meio do zigbee 2 mqtt realmente depois de muitos testes Verifiquei que não seria possível a integração Então deixei a fechadura configurada dentro do HUB X5 e fiz a adição da mesma através da aplicação local tuia sendo um sub dispositivo do HUB.

A integração em si não tem segredo nenhum basta você ter a fechadura configurada dentro do seu HUBe configurar o local tuia na última versão até o momento GitHub - xZetsubou/hass-localtuya: 🔹 A Home Assistant integration to handle Tuya devices locally "fork from localtuya" · GitHub
Posteriormente será realizado a detecção automaticamente dos seus sub dispositivos zigbee. Repito, no meu caso estou utilizando o HUB X5 o qual trouxe a IFR 7000 como sub dispositivo, não fiz testes com outro HUB, mas acredito que deva funcionar sem problemas.

Comecei o processo de engenharia reversa, verificando todos os DP (IDs) disponíveis e listados pela integração, São inúmeros mas fui indo pela lógica conforme a escrita de cada um Ou melhor o significado de cada um. A parte mais complexa foi detectar qual entidade seria o DP (ID) pois se ela fosse a errada a entidade não receberia a instrução Ou melhor o comando correto.

Analisando o diagnóstico após realizar testes simétricos e catalogados de funcionamento sistêmico da fechadura um exemplo abertura com biometria depois abertura com senha depois abertura com tag depois abertura com chave manual depois abertura interna e por último simulação de arrombamento. Já estava me esquecendo também fiz o teste com a abertura remota pelo aplicativo Smart Life. Depois disso tudo eu analisei o diagnóstico com todos os estados que a fechadura retornou, cadastrei as entidades com seus respectivos DP (IDs) e deixei no nome amigável para facilitar as alterações e identificações futuras.

Essas são todas entidades uteis que criei conforme identificação dos DP ID

Uma informação muito útil que descobrir depois de muitos testes está relacionado com cadastro da biometria senha e tag dos usuários da fechadura na aplicação do Smart Life. o cadastro das biometrias senhas e tags seguem um padrão sequencial Ou seja a primeira biometria recebe o nome de dedo um a segunda dedo Dois Dedo três e assim sucessivamente a mesma lógica é aplicada tanto para senhas e para as tags. esse número de cadastro é transmitido para fechadura durante o momento de acionamento de abertura ou seja se João é dono da biometria 01 quando acionado a fechadura com esta biometria podemos afirmar que João chegou em casa ou abriu a porta a lógica é aplicada também para senhas e tags como falei anteriormente Basta fazer a devida amarração

Não sei se observaram os prints que retirei do meu homem assistente na parte onde eu mostro todas as entidades cadastradas dentro da fechadura ao lado esquerdo vocês poderão visualizar várias automações quais atender as demandas que julgam necessário durante o funcionamento da fechadura. Não adentrarei neste tópico sobre automações relacionadas a fechadura pois isso é particular de cada um ou seja cada um Pode configurar do jeito que achar melhor para a sua demanda.

Não sei se observaram os prints que retirei do meu homem assistente na parte onde eu mostro todas as entidades cadastradas dentro da fechadura ao lado esquerdo vocês poderão visualizar várias automações quais atender as demandas que julgam necessário durante o funcionamento da fechadura. Não adentrarei neste tópico sobre automações relacionadas a fechadura pois isso é particular de cada um ou seja cada um Pode configurar do jeito que achar melhor para a sua demanda. Uma pequena observação sobre as automações, eu não utilizo o recurso de criação pela interface do Home assistant faço todas as automações scripts por escrita em arquivo .yaml
Deixo as automações que criei para se inspirarem, adaptarem e verificarem a compatibilidade com o ambiente de vocês.

# =========================================================
# PORTA APARTAMENTO — BIOMETRIA
# =========================================================
- id: porta_apartamento_biometria
  alias: "Porta apartamento — Biometria"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: number.porta_do_apartamento_desbloqueio_temporario

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - variables:
        biometria_id: "{{ trigger.to_state.state | int(0) }}"
        usuario: >-
          {% if biometria_id in [1, 2] %}Alexandre
          {% elif biometria_id == 3 %}Bianca
          {% elif biometria_id == 4 %}Lívia
          {% elif biometria_id in [5, 6] %}Cida
          {% elif biometria_id == 9 %}Biometria ID 9
          {% else %}Biometria desconhecida
          {% endif %}

    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada por {{ usuario }}"
        message: "Método de desbloqueio: Biometria"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada por {{ usuario }} | Método: Biometria"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — SENHA
# =========================================================
- id: porta_apartamento_senha
  alias: "Porta apartamento — Senha"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_desbloqueio_senha_sensor

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - variables:
        senha_id: "{{ trigger.to_state.state | int(0) }}"
        usuario: >-
          {% if senha_id == 1 %}Alexandre
          {% elif senha_id == 2 %}Senha ID 2
          {% elif senha_id == 3 %}Senha ID 3
          {% else %}Senha desconhecida
          {% endif %}

    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada por {{ usuario }}"
        message: "Método de desbloqueio: Senha"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada por {{ usuario }} | Método: Senha"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — TAG
# =========================================================
- id: porta_apartamento_tag
  alias: "Porta apartamento — TAG"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_tag

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - variables:
        tag_id: "{{ trigger.to_state.state | int(0) }}"
        usuario: >-
          {% if tag_id == 1 %}Alexandre
          {% elif tag_id == 2 %}Lívia
          {% elif tag_id == 3 %}Bianca
          {% else %}Tag desconhecida
          {% endif %}

    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada por {{ usuario }}"
        message: "Método de desbloqueio: Tag"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada por {{ usuario }} | Método: Tag"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — CHAVE FÍSICA
# =========================================================
- id: porta_apartamento_chave_fisica
  alias: "Porta apartamento — Chave física"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_chave

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada com chave física"
        message: "Método de desbloqueio: Chave física"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada | Método: Chave física"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — REMOTO
# =========================================================
- id: porta_apartamento_remoto
  alias: "Porta apartamento — Remoto"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_desbloqueio_remoto

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada por acionamento remoto"
        message: "Método de desbloqueio: Acionamento remoto"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada | Método: Acionamento remoto"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — VOZ / ALEXA
# =========================================================
- id: porta_apartamento_voz
  alias: "Porta apartamento — Voz"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_abertura_voz

  condition:
    - condition: template
      value_template: >
        {{
          trigger.to_state is not none
          and trigger.to_state.state not in ['unknown', 'unavailable', '', 'None', '0']
          and (trigger.to_state.state | int(0)) > 0
          and (trigger.from_state is none or trigger.from_state.state != trigger.to_state.state)
        }}

  action:
    - service: notify.alarme_casa
      data:
        title: "🔓 Porta destrancada por voz"
        message: "Método de desbloqueio: Voz / Alexa"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada | Método: Voz / Alexa"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — ABERTURA INTERNA
# Só dispara se nenhum método mudou recentemente
# =========================================================
- id: porta_apartamento_interno
  alias: "Porta apartamento — Interno"
  mode: queued
  max: 10

  trigger:
    - platform: state
      entity_id: lock.porta_do_apartamento_estado_fechadura
      from: "locked"
      to: "unlocked"

  action:
    - delay: "00:00:03"

    - variables:
        agora_ts: "{{ as_timestamp(now()) }}"
        biometria_ts: "{{ as_timestamp(states.number.porta_do_apartamento_desbloqueio_temporario.last_changed, 0) }}"
        senha_ts: "{{ as_timestamp(states.sensor.porta_do_apartamento_desbloqueio_senha_sensor.last_changed, 0) }}"
        tag_ts: "{{ as_timestamp(states.sensor.porta_do_apartamento_tag.last_changed, 0) }}"
        chave_ts: "{{ as_timestamp(states.sensor.porta_do_apartamento_chave.last_changed, 0) }}"
        remoto_ts: "{{ as_timestamp(states.sensor.porta_do_apartamento_desbloqueio_remoto.last_changed, 0) }}"
        voz_ts: "{{ as_timestamp(states.sensor.porta_do_apartamento_abertura_voz.last_changed, 0) }}"

        houve_metodo_recente: >-
          {{
            (agora_ts - biometria_ts) <= 12
            or (agora_ts - senha_ts) <= 12
            or (agora_ts - tag_ts) <= 12
            or (agora_ts - chave_ts) <= 12
            or (agora_ts - remoto_ts) <= 12
            or (agora_ts - voz_ts) <= 12
          }}

    - condition: template
      value_template: "{{ not houve_metodo_recente }}"

    - service: notify.alarme_casa
      data:
        title: "🔓 Porta aberta internamente"
        message: "Método de desbloqueio: Interno"

    - service: logbook.log
      data:
        name: "Porta do apartamento"
        message: "Destrancada internamente"
        entity_id: lock.porta_do_apartamento_estado_fechadura


# =========================================================
# PORTA APARTAMENTO — TRAVAMENTO AUTOMÁTICO
# =========================================================
- id: porta_apartamento_notifica_travamento
  alias: "Porta apartamento — Notificar travamento"
  mode: single

  trigger:
    - platform: state
      entity_id: lock.porta_do_apartamento_estado_fechadura
      from: "unlocked"
      to: "locked"

  action:
    - service: notify.alarme_casa
      data:
        title: "🔒 Porta trancada automaticamente"
        message: "A porta do apartamento foi trancada."


# =========================================================
# PORTA ABERTA POR MUITO TEMPO
# =========================================================
- id: porta_apartamento_aberta_tempo
  alias: "Porta apartamento — Aberta por muito tempo"
  mode: single

  trigger:
    - platform: state
      entity_id: binary_sensor.porta_do_apartamento_status
      to: "on"
      for: "00:02:00"

  action:
    - service: notify.alarme_casa
      data:
        title: "⚠️ Porta está aberta por muito tempo"
        message: "A porta do apartamento está aberta por muito tempo. Verifique."


# =========================================================
# BIOMETRIA INCORRETA
# =========================================================
- id: porta_apartamento_biometria_incorreta
  alias: "Porta apartamento — Biometria incorreta"
  mode: single

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_eventos

  condition:
    - condition: template
      value_template: "{{ trigger.to_state is not none and trigger.to_state.state == 'wrong_finger' }}"

  action:
    - service: notify.alarme_casa
      data:
        title: "⚠️ Biometria incorreta"
        message: "Biometria incorreta."


# =========================================================
# SENHA INCORRETA
# =========================================================
- id: porta_apartamento_senha_incorreta
  alias: "Porta apartamento — Senha incorreta"
  mode: single

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_eventos

  condition:
    - condition: template
      value_template: "{{ trigger.to_state is not none and trigger.to_state.state == 'wrong_password' }}"

  action:
    - service: notify.alarme_casa
      data:
        title: "⚠️ Senha incorreta"
        message: "Senha incorreta."


# =========================================================
# TAG INCORRETA
# =========================================================
- id: porta_apartamento_tag_incorreta
  alias: "Porta apartamento — Tag incorreta"
  mode: single

  trigger:
    - platform: state
      entity_id: sensor.porta_do_apartamento_eventos

  condition:
    - condition: template
      value_template: "{{ trigger.to_state is not none and trigger.to_state.state == 'wrong_card' }}"

  action:
    - service: notify.alarme_casa
      data:
        title: "⚠️ Tag incorreta"
        message: "Tag incorreta."


# =========================================================
# BATERIA BAIXA — APENAS ABAIXO DE 10%
# =========================================================
- id: porta_apartamento_bateria_baixa
  alias: "Porta apartamento — Bateria baixa"
  mode: single

  trigger:
    - platform: numeric_state
      entity_id: sensor.porta_do_apartamento_bateria
      below: 10

  action:
    - service: notify.alarme_casa
      data:
        title: "🪫 Bateria baixa"
        message: "Bateria da fechadura em {{ states('sensor.porta_do_apartamento_bateria') }}%."


# =========================================================
# ARROMBAMENTO
# =========================================================
- id: porta_apartamento_arrombamento
  alias: "Porta apartamento — Arrombamento"
  mode: single

  trigger:
    - platform: state
      entity_id: binary_sensor.porta_do_apartamento_alerta_de_arrombamento
      to: "on"

  action:
    - service: notify.alarme_casa
      data:
        title: "🚨 Alerta de arrombamento"
        message: "Possível arrombamento na porta do apartamento."

Para facilitar a vida de todos eu fiz um gráfico correlacionando todos os DP (IDs) que são úteis e funcionais na integração da fechadura depois de muitos testes de todos os disponíveis somente esses mostraram ser úteis no dia a dia dentro do Home assistente

Tentei não ser muito técnico pois ficaria extremamente maçante e complexa essa postagem. Creio que aos amigos que utilizam o home assistant isso dará um Norte para realizarem a configuração da fechadura ifr 7000 da Intelbras. Abs a todos colegas.

1 curtida