Automatizar videoporteiro VIDEX

Caros, preciso de ajuda para tornar o meu videoporteiro mais inteligente, isto depois de já o ter mandado para a garantia uma vez.:exploding_head:

Os meus objetivos são:

  • Ser notificado quando alguém toca à campainha;

  • Conseguir abrir a porta remotamente.

Seguem o modelo, a especificação dos conetores, e o esquema de ligação:



Estava a pensar utilizar um sonoffSV, com tasmota, em modo isolado, alimentado pelo video-porteiro (a 24v).
Já consegui abrir a porta, quando tocam à campainha e o videoporteiro se ativa, ligado o 3A e o 5A da board, utilizando para o efeito o relé do sonoff.

Será que consigo obter input no GPIO14 do SonoffSV para saber quando tocam à campainha, despoletanto uma notificação via homeassistant? Conseguem-me ajudar neste ponto?

Vê qual o comportamento do 4a quando tocam à campaínha…

Olá @Maddoctor.
Ontem tentei ler, mas sem sucesso - devo estar a fazer alguma coisa errada.

Vou tentar novamente, e depois digo algo.

Dando seguimento à minha dúvida, e porque pode vir a ajudar alguém, deixo a forma como consegui deixa o meu videoporteiro mais inteligente.

Notas prévias:

  • Sempre que a campainha toca, o terminar 4A recebe 12v DC (a cada toque).

  • Sempre que se pega no telefone do videoporteiro, quando o ecrã está inativo, o terminal 4A também recebe 12v DC.

O que é necessário:

  1. Sonoff SV em modo isolado (com Tasmota):

  2. Optoacoplador 12v:



    Pode ser adquirido no Aliexpress: https://www.aliexpress.com/item/32719957788.html?spm=a2g0s.9042311.0.0.15c3b90aYrzklS

Como efetuar as ligações:

  • Alimentar o sonoff com o +V (10Vds Input/Outpud) e - (Ground reference for +V terminal)

  • Ligar o 3A (Output switched ground for parallel telephone) ao input positivo do relé do Sonoff;

  • Ligar o 5A (Input for door-open command from parallel telephone) ao output positivo do relé do Sonoff;

  • Ligar o Output do optoacoplador ao GPIO14 do Sonoff (imagem com identificação do GPIO14):
    59615455-33314900-912b-11e9-95f3-824530001722

  • Ligar o 4A (Output call tone for parallel telephone) ao input do optoacoplador - o negativo pode ser “puxado” da alimentação do Sonoff.

O resultado será isto:

Com caixa, e com as ligações finais (não se percebe bem por causa da quantidade de fios…):

Resultado final (estou a utilizar um sensor de vibração no telefone para tentar evitar os falsos positivos de quando alguém pega no telefone quando o ecrã está desligado):

No Tasmota, é necessário configurar o GPIO14 para Switch2:

No HomeAssistant:


#######################################################################################################################      
#     _____          ___           ___           ___                         ___                                 
#    /  /::\        /  /\         /  /\         /  /\         _____         /  /\                                
#   /  /:/\:\      /  /::\       /  /::\       /  /::\       /  /::\       /  /:/_                               
#  /  /:/  \:\    /  /:/\:\     /  /:/\:\     /  /:/\:\     /  /:/\:\     /  /:/ /\    ___     ___   ___     ___ 
# /__/:/ \__\:|  /  /:/  \:\   /  /:/  \:\   /  /:/~/:/    /  /:/~/::\   /  /:/ /:/_  /__/\   /  /\ /__/\   /  /\
# \  \:\ /  /:/ /__/:/ \__\:\ /__/:/ \__\:\ /__/:/ /:/___ /__/:/ /:/\:| /__/:/ /:/ /\ \  \:\ /  /:/ \  \:\ /  /:/
#  \  \:\  /:/  \  \:\ /  /:/ \  \:\ /  /:/ \  \:\/:::::/ \  \:\/:/~/:/ \  \:\/:/ /:/  \  \:\  /:/   \  \:\  /:/ 
#   \  \:\/:/    \  \:\  /:/   \  \:\  /:/   \  \::/~~~~   \  \::/ /:/   \  \::/ /:/    \  \:\/:/     \  \:\/:/  
#    \  \::/      \  \:\/:/     \  \:\/:/     \  \:\        \  \:\/:/     \  \:\/:/      \  \::/       \  \::/   
#     \__\/        \  \::/       \  \::/       \  \:\        \  \::/       \  \::/        \__\/         \__\/    
#                   \__\/         \__\/         \__\/         \__\/         \__\/                                
#                   
#######################################################################################################################


#  _                           _             _                       _                        
# (_)  _ __    _ __    _   _  | |_          | |__     ___     ___   | |   ___    __ _   _ __  
# | | | '_ \  | '_ \  | | | | | __|         | '_ \   / _ \   / _ \  | |  / _ \  / _` | | '_ \ 
# | | | | | | | |_) | | |_| | | |_          | |_) | | (_) | | (_) | | | |  __/ | (_| | | | | |
# |_| |_| |_| | .__/   \__,_|  \__|  _____  |_.__/   \___/   \___/  |_|  \___|  \__,_| |_| |_|
#             |_|                   |_____|                                                                                              
      
  input_boolean:
    notify_videoporteiro:
       name: Notifica video-porteiro
       icon: mdi:bell-ring
    
    movimentovideoporteiro:
       name: Movimento do video-porteiro
       initial: off
       icon: mdi:deskphone
       
    campainhatocar:
       name: Campainha a Tocar
       initial: off
       icon: mdi:doorbell-video

#  ____               _   _            _     
# / ___|  __      __ (_) | |_    ___  | |__  
# \___ \  \ \ /\ / / | | | __|  / __| | '_ \ 
#  ___) |  \ V  V /  | | | |_  | (__  | | | |
# |____/    \_/\_/   |_|  \__|  \___| |_| |_|
  switch:
    - platform: mqtt
      name: "Videoporteiro"
      state_topic: "stat/videoporteiro/POWER"
      command_topic: "cmnd/videoporteiro/power"
      availability_topic: "tele/videoporteiro/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"
      qos: 1
      payload_on: "ON"
      payload_off: "OFF"
      retain: false  
    
    - platform: mqtt
      name: "Campainha"
      state_topic: "cmnd/videoporteiro/POWER2"
      command_topic: "cmnd/videoporteiro/power2"
      availability_topic: "tele/videoporteiro/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"
      qos: 1
      payload_on: "ON"
      payload_off: "OFF"
      retain: false  

#  ____                                      
# / ___|    ___   _ __    ___    ___    _ __ 
# \___ \   / _ \ | '_ \  / __|  / _ \  | '__|
#  ___) | |  __/ | | | | \__ \ | (_) | | |   
# |____/   \___| |_| |_| |___/  \___/  |_|    

  #zigbe2mqtt
  sensor:
    - platform: "mqtt"
      name: "Vibração Campainha"
      state_topic: "zigbee2mqtt/campainha"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:gesture-double-tap"
      value_template: "{{ value_json.action }}"
  
    - platform: "mqtt"
      name: "Bateria Campainha"
      state_topic: "zigbee2mqtt/campainha"
      availability_topic: "zigbee2mqtt/bridge/state"
      unit_of_measurement: "%"
      device_class: "battery"
      value_template: "{{ value_json.battery }}"
  
    - platform: "mqtt"
      name: "Força sinal Campainha"
      state_topic: "zigbee2mqtt/campainha"
      availability_topic: "zigbee2mqtt/bridge/state"
      unit_of_measurement: "dB"
      icon: mdi:speedometer
      value_template: "{{ value_json.linkquality }}"

 
#     _              _                                 _     _                 
#    / \     _   _  | |_    ___    _ __ ___     __ _  | |_  (_)   ___    _ __  
#   / _ \   | | | | | __|  / _ \  | '_ ` _ \   / _` | | __| | |  / _ \  | '_ \ 
#  / ___ \  | |_| | | |_  | (_) | | | | | | | | (_| | | |_  | | | (_) | | | | |
# /_/   \_\  \__,_|  \__|  \___/  |_| |_| |_|  \__,_|  \__| |_|  \___/  |_| |_|
  automation:
   - id: sensor_vibracao_mudou_estado
     alias: 'Sensor de vibração'
     trigger:
       - platform: state
         entity_id: sensor.vibracao_campainha
     condition:
       condition: state
       entity_id: input_boolean.movimentovideoporteiro
       state: 'off'
     action:
       - service: input_boolean.turn_on
         data:
           entity_id: input_boolean.movimentovideoporteiro
           
       - service: notify.telegram
         data_template:
           title: "Telefone do video-porteiro"
           message: '{{ as_timestamp (now()) | timestamp_custom("%d/%b/%Y %T") }} - O telefone do videoporteiro detetou movimento - alguém pegou no telefone.'
           
   - id: desliga_movimentovideoporteiro
     alias: 'Desliga movimento do video-porteiro'
     trigger:
       - platform: state
         entity_id: input_boolean.movimentovideoporteiro
         to: 'on'
         for:
           hours: 0
           minutes: 1
           seconds: 30
     action:
       - service: input_boolean.turn_off
         data:
           entity_id: input_boolean.movimentovideoporteiro
   
   
   - id: sensor_campainha_mudou_estado
     alias: 'Campainha mudou de estado'
     trigger:
       - platform: state
         entity_id: switch.campainha
         to: 'on'
     condition:
       condition: and
       conditions:
         - condition: state
           entity_id: input_boolean.campainhatocar
           state: 'off'
         - condition: state
           entity_id: input_boolean.movimentovideoporteiro
           state: 'off'
     action:
       - service: input_boolean.turn_on
         data:
           entity_id: input_boolean.campainhatocar
           
   - id: desliga_campainha
     alias: 'Desliga campainha do video-porteiro'
     trigger:
       - platform: state
         entity_id: input_boolean.campainhatocar
         to: 'on'
         for:
           hours: 0
           minutes: 0
           seconds: 30
     action:
       - service: input_boolean.turn_off
         data:
           entity_id: input_boolean.campainhatocar
   

   - id: campainha_a_tocar_com_foto
     alias: 'Campainha a tocar - com foto'
     trigger:
       - platform: state
         entity_id: input_boolean.campainhatocar
         to: 'on'
     condition:
       condition: state
       entity_id: input_boolean.notify_videoporteiro
       state: 'on'
     action:
       - service: camera.snapshot
         data:
           entity_id: camera.rua
           filename: "/config/www/cam_captures/frente_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg"
       - delay: 
           seconds: 10
       - service: notify.telegram
         data_template:
           title: "A campainha está a tocar"
           message: '{{ as_timestamp (now()) | timestamp_custom("%d/%b/%Y %T") }} - A campainha está a tocar'
           data:
             photo:
               - file: "/config/www/cam_captures/frente_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg"
                 caption: "A campainha está a tocar"
  
4 Likes

Bom trabalho e obrigado pela partilha @Fernando_Pereira

E não tens interesse em obter a imagem da camara do videoporteiro?

É algo que estou a tentar fazer no meu há bastante tempo mas sem sucesso

Olá @ricreis394.
No meu caso, como tenho uma camara Reolink a apontar para a frente da casa, não preciso da imagem do videoporteiro.

O que vou fazer agora, quando alguém toca à campainha, é:

4 Likes

Bom trabalho… Obrigado pela partilha!!! :+1:

1 Like

Obrigado pela partilha… excelente trabalho… já tentei fazer uma coisa idêntica mas sem grande sucesso e acabei por desistir.
Para alem do que tens, o meu, tambem “calva” a campainha, funcionou bem durante uns tempos e depois começou a falhar, utilizava o firmware do onofre num wemos D1 mini e muitas vezes quando tocavam a porta o wemos perdia a configuração e fazia com que o relé de abrir a porta ficasse em carga (como se estivesse a carregar no botão de abrir sem nunca tirar o dedo).

Pode ser que volte a pegar no assunto um dia destes…

1 Like

WTF?! Sabes que o firmware do Onofre é para Onofres, certo?? Se é para Onofres não vai funcionar bem noutro equipamento. Tasmota isso…