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
Publica un comentari a l'entrada