Background
In my current apartment building, the intercom and entry system are installed outside my living room door, it's a bit difficult to hear the doorbell when the door is closed. As a result, I frequently miss deliveries. To solve this, I decided to integrate the system to my Home Assistant setup. Another benefit is that I no longer need to take my keys with me when I go out.

After removing the case, the sticker on the PCB indicates the model number is "auta 700105 [Archive]".

Hardware
According to the technical manual [Archive] found on the manufacturer's website, the four wires that came from outside the apartment to terminal CON1
are, from left to right: GND (black), +24 VDC power (brown), microphone (blue), and speaker & data (gray). CON2
connects the handset with an RJ11 connector.

I took out the PCB and started to reverse engineer the circuit.


The ICs:
U1
is a "78L05A" voltage regulator, which provides +5 V to other components-
U2
is a "PIC16F870-I/SO" MCU, which implements the main functions -
U3
is a "ULN2003A" Darlington transistor array, which lets the MCU to drive peripheral circuits- Channel 1: input is the MCU's PIN27
RB6
, output is the handset speaker amplifier circuit - Channel 2: input is the MCU's PIN26
RB5
, output is the relayRY1
- Channel 3-7: input is the MCU's PIN25
RB4
, output is the "Auxiliary bell (24 Vdc output, in call)" terminals of CON1
- Channel 1: input is the MCU's PIN27
U4
is a "LM393" voltage comparator- Comparator 1 is not used
- Noninverting input 2: +12 V
- Inverting input 2: the "Speaker and Data" terminals of CON1
- Output 2: PIN23 of the MCU
U5
is a "PC357NJ0000F" optocoupler, input is the "Ding-Dong function (tension free button)" terminals of CON1, which pulls down the MCU's PIN22RB1
when they are shorted
MCU pin functions
- 1
MCLR
: reset - 2
RA0
: input of the bell melody select buttonPB1
(low level trigger) - 3
RA1
: output of the red LED - 4
RA2
: output of the green LED - 5
RA3
: input of the building door unlock button (low level trigger) - 6
RA4
: input of the AUX1 button (low level trigger) - 7
RA5
: output of unlock signal? - 8
Vss
: GND - 9
OSC1
, 10OSC2
: inputs of the crystal oscillatorX1
- 11
RC0
- 14RC3
: inputs of the 5-8 positions of the DIP switchSW1
(low level trigger) - 15
RC4
- 18RC7
: inputs of the 1-4 positions of the DIP switchSW1
(low level trigger) - 19
Vss
: GND - 20
Vdd
: +5 V power input - 21
RB0
: input of the master-slave selection jumperJ1
(high level as master) - 22
RB1
: input of the "Ding-Dong function (tension free button)" through optocouplerU5
's collector pin (low level trigger) - 23
RB2
: input of the doorbell signal? - 24
RB3
: output of the unlock signal? - 25
RB4
: output of the "Auxiliary bell", through the driver ICU3
's channels 3-7 (high level trigger) - 26
RB5
: output of the relay, through the driver ICU3
's channel 2 (low level trigger) - 27
RB6
: output of the doorbell sound to the handset speaker, through the driver IC's channel 1 - 28
RB7
: input of the switchhook for handset (low level while hanging)
We can see that PIN5 RA3
can be used to unlock the building door, and PIN27 RB6
can be used to detect if the doorbell is ringing.
The circuit is as follows, since the PIC MCU uses 5 V TTL but the ESP8266 uses 3.3 V, they need a logic level shifter to talk to each other:

Installation
As shown below, +5 V (purple), GND (green), MCU PIN5 (white) and PIN27 (blue) are tapped from several contacts that are easy to solder:

Since I already have an ESPHome device (Whole Home Energy Monitoring) lying nearby, I just modified and reused it (the 4-pin DuPont cable is for the PZEM energy monitor):

Connected to the intercom phone with an old USB cable:

Software
ESPHome configuration example:
esphome:
name: building-intercom
comment: 'Auta building intercom and entry system hack'
esp8266:
board: d1_mini
logger:
level: WARN
# baud_rate: 115200
wifi:
fast_connect: true
networks:
- ssid: !secret wifi_ssid
bssid: !secret wifi_bssid
password: !secret wifi_password
domain: !secret domain_name
api:
ota:
password: !secret ota_password
button:
# expose the unlock button to HASS frontend
- platform: output
name: 'Unlock Building Door'
output: building_intercom_unlock_door_button
duration: 3s
icon: mdi:door
binary_sensor:
# building intercom ringing sensor
- platform: gpio
name: 'Building Intercom Ringing'
pin: 12
filters:
- delayed_off: 30s # adjust this to the actual ringing time
icon: mdi:bell-outline
publish_initial_state: true
output:
# pull down to trigger the intercom unlock building door button
- platform: gpio
id: building_intercom_unlock_door_button
pin:
number: 14
inverted: true
After flashing the firmware, it can be added to Home Assistant:

Then I created an Automation in Home Assistant to push a Notification to my phone when the intercom doorbell is ringing (the following YAMLs are for demonstration purposes only, they should be created using the UI):
alias: 'Building Intercom Ringing Notification'
trigger:
- type: turned_on
platform: device
device_id: # use UI to create
entity_id: binary_sensor.building_intercom_ringing
domain: binary_sensor
condition: []
action:
- service: notify.mobile_app_notification_group
data:
message: 'Building Intercom Ringing'
data:
push:
# iOS Critical Alerts
sound:
name: default
critical: 1
volume: 1
actions:
# a button to unlock the door
- action: UNLOCK_BUILDING_DOOR
title: 'Unlock Door'
destructive: true # show it in red
mode: restart
And another Automation for handling the unlock button callback event from the Notification:
alias: 'Unlock Building Door by Notification Callback'
trigger:
- platform: event
event_type: mobile_app_notification_action
event_data:
action: UNLOCK_BUILDING_DOOR
condition: []
action:
- device_id: # use UI to create
domain: button
entity_id: button.unlock_building_door
type: press
mode: restart
0 Comments