Making Intercom Smart
Introduction
Here in Ukraine (and I believe in some Eastern European countries) most of people living in multistory apartment buildings, and almost in every one of them, there is some intercom system used.
So, sometimes there is cases, when I know that I’m expecting someone to call in my door via intercom, but I cannot answer, so I want to have option to open intercom door remotely. It could happen while:
- I’m on work meetings calls;
- Playing online games (can’t pause)
- Delivery coming while I’m still sleeping (8-9 AM)
As as engineer myself, I started thinking about technical solution to this problem. I thought that this problem could be solved by some hardware solution, and even with my limited knowledge about DIY-hardware and electricity and stuff, I should be able to come up with some device that can help me.
Essentially, I wanted product that would help me achieve:
- open intercom remotely via computer / smartphone
- detect incoming call (to possibly track missed calls)
- open intercom automatically while certain conditions met (e.g. schedule for 9 am delivery)
- (optional) integration in HomeAssistant
But also, i had few limitations to my projects:
- do not use complete solutions 3rd party solutions (still was interested to do something on my own)
- use most common components possible (so I won’t go into ocean of custom hardware solutions)
- do less soldering as possible (just not really good at it)
- solution should not use external power
- (optional) intercom device should not be modified, and solution should be available as Plug and Play
Research
Installed hardware
Let’s see, what do we have in my apartment and what we can do with that.
This is Vizit UKP-12 receiver phone (device number can be found on read side of device). It’s low-end price receiver, which installed in many apartments I lived through my life. This receiver is basically have three features:
- Receive calls;
- Button to open door;
- Switch to control volume of incoming call (high / low volume);
Without upgrading system in the whole building, you are pretty limited to options how to make this intercom “smart”.
Existing solutions
So there was some just brand-new intercom receivers that are smart but not able to connect perform auto-open, or to be connected to smart home system.
I found one solution which was exactly what I was trying to achieve - it worked as addon to any existing intercom, but I found out that authors of solutions are russians, so I decided to skip those.
With all that being said I decided that I will make my own little device, which will attach to existing receiver, and will upgrade it to be smart.
Reverse-engineering
System overview
To properly modify existing system, I thought it would be good to have at least brief understanding how the whole system works together.
Main takeaway from this scheme that isn’t specified here explicitly - whole system except intercom unit is located outside my apartment, so I cannot really modify or interfere work of intercom control and power unit, or I could but would probably have problems with my neighbors lol.
Also worth mentioning, what is might not obvious from this scheme, that each intercom is connected to intercom control and power unit with two-wires which transmit both power and data (voice).
With knowledge of the system and fact that only intercom unit is presented to us for modification we can proceed to next system.
Intercom reverse-engineering
Since I’m not really don’t know nothing about electric circuits or most of my research was searching for “hacks” how to make following things:
- Ability to determine incoming call from calling panel
- Ability to open door
“Listening” incoming call
Since this thing is completely analogous, determining incoming call is breaking down to listening to incoming voltage:
Idle state | Incoming call state |
———– | ——————- |
So with those samples I came up with table of values which can be used for determining state of device in current moment:
State | Voltage (V) |
---|---|
Idle | ~ 0.1 |
Incoming call (no ringing) | ~ 1.7 |
Incoming call (ringing) | ~ 4.5 |
Opening door
Second important thing that I found - that breaking circuit while intercom have incoming call will make door open. So essentially it breaks down to just adding remote controlled relay somewhere in this circuit (it can even be outside of intercom device), to make remote open for it.
Prototyping
Hardware
After figuring out how to perform needed operations on intercom, now we understand how we will modify system to add our features:
“Magic device” will work in the middle between intercom control and power unit and intercom to “receive” calls and then pass them to intercom device.
Microcontroller
After trying out few existing solutions which I though would fit my task, my choice was NodeMCU. The only reason I chose this controller over existing solutions (Sonoff SV, Sonoff Dry) or smaller microcontrollers (e.g. ESP-01) is presence of ADC pin which I needed to “listen” incoming call from intercom.
Power
My initial idea was to power my device through intercom power unit, but the thing is in “idle” state intercom receive 0.5v and NodeMCU required 3.3v DC, so this was pretty impossible, so I decided to just connect NodeMCU to the socket.
Additional components
- 5v to 3.3v convertor - voltage from intercom rises up to 5v, which could damage NodeMCU, so we need to step down voltage, I used small AMS1117 for this job.
- Relay module - will be used to break circuit to open door, I used the one I had from previous projects
- Wires & connection - I don’t wanted to solder nothing, so I used Dupont wires to connect all things, and on joints between intercom and my device I used Waco connectors
Firmware
Writing firmware from scratch, would be not necessary for my purposes and would probably eat a lot of time, so I tried firmwares that was already built for doing things like this. While prototyping first version and deploying stable working product, I used two different firmwares:
- Tasmota - I was using it for prototyping since it’s allowed me to iterate more quickly - it was exposing existing GPIO pins without need to writing any configs and perform basic actions easily - like opening door (writing to pin) and detecting ringing (reading pin);
- ESPHome - this one is used in my current live version, it’s allows exposing pins, writing configs in
yaml
with additionalC++
templates which allows to perform additional operations.
Schematics
In final version for product scheme for whole thing was looking like this:
So let’s breakdown what is happening here:
- Intercom directly connected through relay module, which is set up as normally closed, so if my device is not set to autoopen or even turned off, intercom will work as normally would
- Through step-down converter voltage coming to NodeMCU controller to determine based on voltage value is there incoming call this will be used as indicator for incoming call for autoopen feature
- Whenever user decided manually open door, or autoopen decide that we need to open door (via voltage read), NodeMCU sends signal to switch value on relay module, which results in breaking circuit for intercom, which opens the door
Case
I wanted to 3D-print fancy opaque case for this project, but I just read somewhere that you can use regular soapbox for prototype and never changed it to proper case lol.
When put up together it looks something like this:
Demo
After packing up all stuff in soapbox and making wiring from to my device it’s looking like this:
Home Assistant dashboard w/ enabled autoopen feature | Autoopen demo - Incoming call, following by little click of relay which opens door |
Links
Artifacts
Here you can find all you need to build this project by yourself:
- ESPHome
yaml
configuration file: https://github.com/esphynox/smart-intercom/blob/main/intercom.yaml
Further reading
Sharing with you some breadcrumbs that I followed along to finish this project:
- Detailed explanation of Vizit UKP-12 on circuit level: https://www.youtube.com/watch?v=v4_93QduSms
- General hardware design w/ ESPHome tips: https://www.youtube.com/watch?v=AU1KD_aJSMY
- Pretty close project, but it is about doorbell: https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/