On Saturday, May 11, 2013 12:21:21 AM UTC-5, Jimmy Pop wrote:
> Knowing what type of alarm you have, and bypassing said alarm is not quite the same, anyone driving by that sees your yard sign or sticker in the window knows what alarm system you have.
>
Unless you leave the signs/stickers as-is and change out the hardware so you can hack your own system together... *ahem* ;-) ADT takes vendor boards and replaces the stock firmware with their own proprietary locked down stuff that basically cripples the hardware from utilizing its full potential until you pay their techs to come out and do another (expensive) firmware swap to get more features. They can go shove it.
>
>
> I would be quite interested on the details you found on the bus protocol.
>
>
>
> J
The bus protocol is pretty well-documented since the ademco keybus protocol was used in several different systems. I should caveat that I can *mostly* read it because it is a one-wire data line and there is another wire pulled high by devices when they want to assert that they are transmitting, and other times works more like a clock line. I don't read that line, just the data wire. And as such transmitting on the bus from the Pi is not possible unless I get a lot more clever beyond using resistors and a optocoupler. :-D
So... here's the code I've conjured up to sniff the bus written in Groovy. Basically all it does is read the telnet port for messages, but later I might add better handling to identify the different message types. I think that one dangerous thing about doing this hack is that you also see messages from the keypads -- making it trivial to sniff passwords.
/**
Derived from information found here:
https://github.com/markkimsal/homesecurity
http://www.diysecurityforum.com/index.php?topic=10480.0
http://www.google.com/patents?id=pzwWAAAAEBAJ&pg=PA6&source=gbs_selected_pages&cad=4#v=onepage&q&f=false
Hardware info:
You could do this for $88 and no work:
http://www.nutech.com/online-store/35.html
Or you could get a raspberry pi for $45 and an optocoupler for $1 and build the circuit in a few minutes. Nutech makes a great product. But $88 is too spendy for a hobby hack.
Loop 16 closed:
fd 3 2 1 6
Status message "DISARMED CHIME Hit * for faults.":
fd 0 0 17 10 8 0 c 28 2 0 0 20 44 49 53 41 52 4d 45 44 20 43 48 49 4d 45 20 48 69 74 20 2a 20 66 6f 72 20 66 61 75 6c 74 73 10
**/
def host = "???.???.???.???" // IP address not shown. :-D
def port = 4141
def requestSocket = new Socket(host, port)
requestSocket.setSoTimeout(100000)
r = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()))
w = new BufferedWriter(new OutputStreamWriter(requestSocket.getOutputStream()))
def term = false
def zeroCounter = 0;
def counter = 5000;
def waiting = true;
def size = 0;
def expectedSize = -1;
def message = ""
def messageSize = [0x0FD : 13]
def messageType = 0;
while (! requestSocket.isClosed() ) {
def ch = r.read() & 0x0ff;
if (ch == 0) {
if (--zeroCounter <= 0) {
expectedSize = size;
}
} else {
zeroCounter = 10;
}
if (ch == 0 && size >= expectedSize) {
if (!waiting) {
println ""
println message + " (${size} bytes)"
}
messageType = 0;
message = ""
size = 0
expectedSize = -1
waiting = true
continue
}
if (waiting) {
waiting = false
messageType = ch;
expectedSize = messageSize[ch] ?: -1
}
if (size == 12 && messageType == 0x0FD) {
expectedSize += ch
}
print Integer.toHexString(ch) + " "
message += (ch >= ' ' && ch <= '~') ? (ch as char) : '.'
size++
}