Serhii Bykov

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.

Text Text

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.

Diagram with complete intercom system

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:

  1. Ability to determine incoming call from calling panel
  2. 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:

Updated intercom system

“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:

  1. 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);
  2. ESPHome - this one is used in my current live version, it’s allows exposing pins, writing configs in yaml with additional C++ templates which allows to perform additional operations.

Schematics

In final version for product scheme for whole thing was looking like this:

Schematics

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:

Image 1 Image 2

Demo

After packing up all stuff in soapbox and making wiring from to my device it’s looking like this:

Image 1
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:

  1. 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:

  1. Detailed explanation of Vizit UKP-12 on circuit level: https://www.youtube.com/watch?v=v4_93QduSms
  2. General hardware design w/ ESPHome tips: https://www.youtube.com/watch?v=AU1KD_aJSMY
  3. Pretty close project, but it is about doorbell: https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/