Passa al contingut principal

Sensor de llamadas ESP32 para el Videoportero Fermax VDS 3311

Sensor de llamadas ESP32 para el Videoportero Fermax VDS 3311

A veces nos llaman al timbre y no lo oimos, ya sea porque estamos escuchando música o porque estamos lejos del videoportero.
Nos gustaría pues tener un mecanismo alternativo que nos avisara al móvil en cuando alguien llamó al timbre del videoportero.

En este documento describiré como lo he hecho para un videoportero Fermax VDS modelo 3311 aunque podría ser extensible para cualquier otro tipo de videoportero.

El videoportero

Mi videoportero es un Fermax VDS modelo 3311 con cierta antigüedad y que no soporta conexión a redes IP.

No pasa nada, solo por unos 3€ domotitzaremon de manera muy básica este videoportero (de momento nos conformamos con que nos avise de cuando llamen al timbre)

El primer paso es ver qué podemos detectar en el videoportero cuando este recibe una llamada del timbre.

En mi caso ocurren 2 cosas:

  • Se enciende la pantalla del videoportero
  • Se apaga el LED frontal.


Por simplicidad intentaré detectar cuando se apaga este LED y esto nos permitirá enviar una notificación al home assistant o incluso un mensaje por Telegram.
Desmontar el videoportero es relativamente sencillo, primeramente hay que pulsar una pestaña en la parte superior para poder extraerlo hacia arriba.
Tenemos que tener cuidado a la hora de extraerlo puesto que hay un conector entre el videoportero y el soporte a la pared.
Una vez extraído solo hay que quitar un tornillo y la tapa que lo rodea que está a presión.
Con esto ya llegaremos donde está LED rojo que se apaga al recibir las llamadas. Tal como muestra la siguiente imagen he soldado con un cable rojo el ánodo(+) del LED y con un cable negro el cátodo(-).


Lo primero que nos vendría a la mente es conectar directamente estos cables del LED en una entrada del ESP32, arduino o similar y desde este detectar el cambio.
Esta no es una buena idea puesto que las tierras de nuestro ESP32 y del videoportero son diferentes y podríamos quemar algún componente, ya sea el videoportero o el ESP32.

Veremos como solucionarlo más adelante.

Materiales

Que necesitaremos:

- Cuenta con Telegram y un chat propio.
- A1 Un ESP32-C3 o similar 2€
- U1 Un optoacoplador PC817 0€
- U2 Un conversor DC-DC a 5V (ie:MP1584EN). 1€
- R1 Una resistencia entre 1k y 10k 0 €
- R2 Una resistencia 330 ohmios (podría ser inferior) 0€

Coste total unos 3€.

ESP32-C3: https://es.aliexpress.com/item/1005005967641936.html
Un conversor DC-DC a 5V MP1584EN LM2596: https://es.aliexpress.com/item/1005006005888518.html
Las resistencias y el optoacoplador son obtenidas de una fuente de alimentación rota.

El optoacoplador al rescate

Antes hemos hablado de conectar 2 tierras aisladas y del peligro que esto supone.
Para evitar estos peligros tenemos los optoacopladores.
Un optoacoplador es el elemento que nos permitirá aislar las 2 tierras y detectar el cambio en el LED.
Podemos obtener un optoacoplador de cualquier fuente de alimentación moderna puesto que se emplea este para separar el primario del secondario, en la siguiente foto lo veréis rodeado:



Pero antes de todo tendremos que alimentar el ESP32...

Si nos fijamos en la documentación del videoportero Fermax, este está alimentado a 18V mientras que el ESP32-C3 trabaja en 5 o a 3.3V.

Por lo tanto nos hace falta un conversor de 18V a 5V o a 3.3V que emplea el ESP32-C3. En realidad cuando empleamos un conversor a 5V estamos empleando 2 conversors puesto que lo ESP32-C3 ya incluye un conversor de 5 a 3.3V.







El esquema propuesto es el siguiente:



NOTA: MUY IMPORTANTE.

Los ESP32 no permiten 5V en las entradas GPIO, si conectais 5V en estas entradas romperéis el ESP32.
Notad que la resistencia pull up va al pin de 3.3V y no al de 5V.

R1 es una resistencia pull-up para no tener detecciones fantasmas.

R2 limita la corriente por el optoacoplador, básicamente está para que no toda la corriente pase por el optoacoplador cosa que haría que el LED del videoportero se apagara o se iluminara con poca intensidad.

Un valor de 330ohm ha sido adecuado en mi caso, es posible que haya que bajarlo en tu caso a 220ohms o incluso menos. Por el optoacoplador tiene que pasar al menos 5mA para que sature.

De esta forma la placa quedaría:



Podemos hacer la prueba simplemente con un LED rojo una placa de prueba, para ver si el ESP32 detecta el cambio.

En mi caso he conectado la salida del optoacoplador al GPIO 2 del ESP32


Y la conexión real, he dejado lo ESP32 y el conversor dentro del hueco de la pared aunque posiblemente quepa en el videoportero :

Esphome

Suponemos que ya tenemos la board probada pero ahora queremos hacer las pruebas con el esphome.

Aquí tenéis la configuración que tenemos que añadir a la configuración básica del esphome de este dispositivo para la detección del pin:

```
web_server:
  port: 80
  auth:
    username: !secret web_user
    password: !secret web_password

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO2
      mode: input
    name: "Timbre Casa"  
```


NOTA: Es interesante poner la parte del web_server nos podremos conectar vía web a la IP del ESP32 y ver los cambios de estado en línea.

Telegram

Nos hace falta primero tener un chatbot de telegram y el token de acceso, Internet está lleno de ejemplos de cómo hacerlo así que no lo pondré aquí.

Una vez creado el xatbot (con el  token y el identificador de chat) ya podemos añadirlo a la configuración del esphome para que nos envío notificaciones.

Aquí tenéis mi configuración completa:

```
substitutions:

  TELEGRAM_BOT_TOKEN: !secret telegram_bot_token
  chat_id: "XXXXXX"

esphome:
  name: videoporter
  friendly_name: videoporter

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX="

ota:
  - platform: esphome
    password: "XXXXXXXXXXXXXXXXXXXXXXXX"

web_server:
  port: 80
  auth:
    username: !secret web_user
    password: !secret web_password


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Videoporter Fallback Hotspot"
    password: !secret wifi_password

captive_portal:

http_request:
  useragent: esphome/device
  timeout: 10s
  verify_ssl: false

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO2
      mode: input
    name: "Timbre Casa"  
    on_state:
      then:
        - homeassistant.service:
            service: notify.notify
            data:
              message: "Toquen a la porta"
        - http_request.post:
            url: "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage"
            headers:
              Content-Type: application/json
            json:
              chat_id: ${chat_id}
              text: Timbre Casa

    filters:
      #- invert: # per a invertir l'estat entre ON i OFF

```

Espero que os haya sido útil.

Comentaris