Passa al contingut principal

Sensor de trucades ESP32 per al Videoporter Fermax VDS 3311

Sensor de trucades ESP32 per al Videoporter Fermax VDS 3311

De vegades ens toquen al timbre i no ho sentim, ja siga perquè estem escoltant música o perquè estem lluny del videoporter.
M'agradaria doncs tindre un mecanisme alternatiu que m'avisara al mòbil en quan algú toque al timbre del videoporter.

En aquest document descriuré com ho he fet per a un videoporter Fermax VDS model 3311 encara que podria ser extensible per a qualsevol altre tipus de videoporter.

El videoporter

El meu videoporter és un Fermax VDS model 3311 amb certa antiguitat i que no suporta connexió a la xarxa.

No passa res, solament per uns 3€ domotitzarem molt bàsicament aquest videoporter (de moment ens conformem amb que ens avise de quan toquen al timbre)

El primer pas és veure qué podem detectar en el videoporter quan aquest rep una trucada del timbre.

En el meu cas ocorren 2 coses:

  • S'encén la pantalla del videoporter
  • S'apaga el LED frontal.


Per simplicitat intentaré detectar quan s'apaga aquest LED i això ens permetrà enviar una notificació al home assistant o inclús un missatge per Telegram.

Desmuntar el videoporter és relativament senzill, primerament cal polsar una pestanya en la part superior per a poder extraure'l cal amunt.

Hem de tindre cura a l'hora de extraure'l ja que hi ha un connector entre el videoporter i el suport a la paret.

Una vegada extret solament cal llevar un caragol i la tapa que l'envolta i que està a pressió.

Amb això ja arribarem on està en LED roig que s'apaga en rebre les trucades. Tal com mostra la següent imatge he soldat amb un cable roig l'ànode(+) del LED i amb un cable negre el càtode(-).



El primer que ens vindria al cap és en connectar directament aquests cables del LED a una entrada del ESP32, arduino o similar i des d'aquest detectar el canvi.

Aquesta no és una bona idea ja que les terres del nostre ESP32 i del videoporter són diferents i podríem cremar algun component, ja siga el videoporter ESP32.

Veurem com solucionar-ho més endavant.

Materials

Que necessitarem:

- Compte amb Telegram i un xat propi.
- A1 Un ESP32-C3 o similar 2€
- U1 Un optoacoblador PC817 0€
- U2 Un conversor DC-DC a 5V (ie:MP1584EN). 1€
- R1 Una resistencia entre 1k i 10k 0 €
- R2 Una resistencia 330 ohms (podria ser inferior) 0€

Cost total uns 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
Les resistències i l'optoacoblador són obtingudes d'una font d'alimentació trencada.

El optoacoblador al rescat

Abans hem parlat de connectar 2 terres aïllades i del perill que això suposa.

Per a evitar aquests perills tenim els optoacobladors.

Un optoacoblador és l'element que ens permetrà aïllar les 2 terres i detectar el canvi en el LED.

Podem obtenir un optoacoblador de qualsevol font d'alimentació moderna ja que s'empra aquest per a separar el primari del secondari, en la següent foto el veureu encerclat:



Però abans de tot caldrà alimentar el ESP32...

Si ens fixem en la documentació del videoporter Fermax, aquest està alimentat a 18V mentre que el ESP32-C3 treballa a 5 o a 3.3V.

Per tant ens cal un conversor de 18V a 5V o a 3.3V que empra el ESP32-C3.

En realitat quan emprem un conversor a 5V estem emprant 2 conversors ja que el ESP32-C3 ja inclou un conversor de 5 a 3.3V.







L'esquema proposat és el següent:



NOTA: MOLT IMPORTANT.

Els ESP32 no permeten 5V en les entrades GPIO, si conecteu 5V a aquestes entrades trencareu el ESP32.
Noteu que la resistència pull up va al pin de 3.3V i no al de 5V.

R1 és una resistència pull-up per a no tindre deteccions fantasmes.

R2 limita la corrent per l'optoacoblador, bàsicament està per a que no tota la corrent passe per l'optoacoblador cosa que faria que el LED del videoporter s'apagara.

Un valor de 330ohm ha sigut adequat en el meu cas, es possible que calga baixar-lo en el teu cas a 220ohms o inclús menys. Per l'optoacoblador ha de passar almenys 5mA per a que sature.

D'aquesta forma la placa quedaria:



Podem fer la prova simplement amb un LED roig una placa de prova, per veure si el ESP32 detecta el canvi.

En el meu cas he connectat l'eixida del optoacoblador al GPIO 2 del ESP32


I la connexió real, noteu que he deixat el ESP32 i el conversor dins del buit de la paret :

Esphome

Suposem que ja tenim la board provada però ara volem fer les proves amb el esphome.

Ací teniu la configuració que hem d'afegir a la configuració bàsica del esphome d'aquest dispositiu per a la detecció 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: És interessant posar la part del web_server ens podrem connectar via web a la IP del ESP32 i veure els canvis d'estat online.

Després de flashejar el ESP32 amb la configuració bàsica ja podrem fer les proves en la board.

Si tot va bé ja sols queda afegir-li la part d'enviament de missatges Telegram.

Telegram

Ens cal primer tindre un xatbot de telegram i el token d'accés, Internet està ple d'exemples de com fer-ho així que no ho posaré ací.

Una vegada creat el xatbot (amb el  token i el identificador de xat) ja podem afegir-ho a la configuració del esphome per a que ens envie notificacions.

Ací teniu la meua configuració 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

```

Espere que us haja sigut útil.

Comentaris