There are several protocols used by alarm systems to communicate with central stations. By far the most popular of them is Contact-ID. Here is the official document describing the Contact-ID standard (PDF). Like most standard documents, reading it is quite boring (though I’ve seen worse), so let me shorten the story for you:

Contact-ID Timeline

Contact-ID Protocol Time-Line

When an alarm event is triggered, the alarm system “picks up the phone” (a.k.a “takes the phone off-hook”), and waits for a dial tone. When a dial tone is received, the alarm dials the number of the central station. Up until now, we’re not dealing with the Contact-ID protocol, but simply with the necessities of using a phone line to communicate. The central station then receives the call, and waits for one second, after which it sends the Contact-ID Handshake. The handshake is made of 100 mSec of 1400Hz pure-tone, then 100 mSec of silence, and then 100 mSec of 2300Hz pure-tone. 250 mSec after that, the alarm sends the Contact-ID message. This message comprises 16 DTMF digits. Each digit is 50 mSec long, and they are separated with 50 mSec silence. The last digit is a check-sum digit that enables the central station to verify the integrity of the received message. After a successful reception of a message, the central station sends a kissoff signal. This is 800 mSec of 1400Hz pure-tone. If the alarm system does not receive the kissoff tone in time, it retransmits the message.

Contact-ID Message

The Contact-ID message contains 16 digits as follows:

  • 0-3 – Account number. These four digits identify the specific alarm system or customer to the central station. These digits are not very important in Alarmino’s case, but think about a central station with thousands of customers. When it receives a call from an alarm system, it must be able to tell which one of the thousands customers is calling. These four digits enable this.
  • 4-5 – Message Type. Basically this field should always be “18”. Not terribly useful, I know.
  • 6 – Event Qualifier.
  • 7-9 – Event Code.
  • 10-11 – Group/Partition Number.
  • 12-14 – Zone Number. Ahh, finely something useful. This is the number of the zone that triggered the alarm.
  • 15 – Checksum.

As you can guess, Alarmino is mostly interested in the zone-number and checksum digits. It uses the checksum to verify the received message, and the zone-number to report to the user.


Next, you can read about Alarmino’s software, about the Alarmino’s hardware, or go back to Alarmino’s main page.

5 Responses to “Contact-ID Protocol”

  1. 1 Bill September 18, 2012 at 7:02 am

    Im addition to the zone number, don’t you also want some info on what the nature of the alarm is? (the event code maybe?)

    • 2 jah September 18, 2012 at 8:50 pm

      That would be very usefull, however as long as you know what kind of sensor is on the zone it’s not really a problem (though you wouldn’t know wether the zone is actually triggered, sending a trouble or fault or tamper)

    • 3 li0r September 19, 2012 at 5:55 am

      You’re right, and actually the SMS that Alarmino sends contains all the information in the Contact-ID message (including the event code).

  2. 4 pfd October 17, 2012 at 5:48 pm

    Hi, do you have published arduino source code somewhere?

    Can we have it?


  3. 5 Rob Krten November 2, 2014 at 1:00 am

    Have you reverse engineered the protocol that goes to the end-user alarm panel (the one with the LCDs and buttons)? I’m interested in doing something similar, and would love to have that part working…

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: