DSCAlarmSmartThings Guide?

@Nickd, as far as I know, the AlarmServer has the same basic features. However, some people are not exposing the arm/disarm functions (they are afraid of potential security breaches) as Envisalink, by default, exposes those functions to the internet.

Also, as I said earlier, AlarmServer requires a PC or a device that runs 24/7 for the python script which deciphers any events coming from your alarm panel. There are several ST threads about that solution.

If you want to change the alarm panel, you’d need to know how many security zones your current system has and buy the equivalent DSC panel. As indicated earlier, there are several panels which interfaces with the IT-100. The last 2 digits indicate the number of zones they can support (PC1616=16 zones).

I’d recommend to use the PC1832 or PC1864 as they come with 8 on-board zones zones compared to PC-1616 which comes with only 6 on-board zones out-of-the-box.

You’d need to buy some zone extension board(s) if you have more than 8 zones (PCS 5108)

Please take into account that you’d need to also replace any wireless sensor(s) that you have if you change your panel.

All your hardwired sensors (door/window contacts, motion sensors) should be compatible.

Regards.

P.S. I just read that your installer will change your panel to the DSC-1864…

Thank you, also, we do have a motion sensor that could or could not be wireless. It doesn’t matter though as we have a cat so the away feature is useless…

@yvesracine I really like what you’ve done on your setup. I am planning to start my ST integration with my DSC pc1832. I have about 20 wireless and 4 wired.Do you know if your setup possibly integrate geo-fencing(using my smartphone as a presence sensor) to arm/disarm the DSC alarm? I would be really interested on this. Any idea would really help. Thank you in advance.

1 Like

Hi @lsibarra78,

As a foundation for what you’re trying to achieve, please take a look at:

https://github.com/yracine/device-type.myecobee/blob/master/smartapps/AwayFromHome.groovy

The smartapp triggers a series of actions when leaving the house, one of them is to activate the alarmSwitch (house
alarm system).

I’ve also developed a smartapp that integrates my house alarm panel with SmartAlarm…

Regards.

1 Like

Hi @yvesracine,
Thank you so much for your quick reply. I am a newbie on this and new in this community. I noticed that there is a Copyright on that code. Does that mean that I am unable to use this code? If I am able to use this code, will I need to integrate this code in my ST along with your original setup? Any guidance on this will be much appreciated. Thanks.

@lsibarra78, if you don’t know that much about ST, have a look at the following thread:

As far as my copyright is concerned, it is there so that I can eventually sell my smartapps later when an app store
will be made available.

For the moment, you can use my code as a foundation for yours. I understand that you will probably take
some sections of it, but not all of it.

Regards.

1 Like

@yvesracine, Thank you so much for your support. I really appreciate your expertise and knowledge as well as your guidance to provide these resources. I will let you know how my progress goes. Thanks again.

Hello everyone,

First of all I want to thank all the developers/enthusiasts here that’s making ST so much more awesome. I literally love all of you (ok maybe not that literal :stuck_out_tongue: ). Anyway I’ve been following obycode’s instructions and code on setting the whole thing up on my DSC alarm system (which is compatible with IT100). I connected all the hardware and published all the software including installing the arduino bits. The hub picked up the ST shield and I got to the alarm manager smartapp and all. However the arm/disarm/chime functions don’t do anything and neither are their statuses correct.

Because I’m hella dumb I accidentally bought a female/female null modem rs232 cable. To remedy this I bought 2 male/male null modem adapters for each end. Does that make the whole thing null modem or straight through? Could this be the cause of the problem? Another thing I noticed is that the pins of the rs232 shield doesn’t plug all the way into the ST shield so the rs232 is kind of loose. Not sure if that’s normal either. I took some photos of my setup and uploaded them here: http://imgur.com/a/zQF8W#0

I’m a complete novice to all this so any help would be greatly appreciated!

Hello @kevdliu I’ve not been working on this kind of integration for a while, but the way your arduino RS232 is hooked up seems a bit odd.

The only way for you to know what’s going on is to use your Arduino IDE and run the Serial Monitor (under tools) to see the network traffic between the IT100 and the Arduino Mega.

First, you need to hook up your laptop to the Arduino Mega via the usb port, load the sketch, and run the monitor. If there is no handshake between the 2 at the lower level, and the messages are just gibberish, then you won’t be able to see anything at the higher layers (ThingShield and in ST).

P.S. Your cable and adapers may be a problem too as you should use a straight-through cable with a null modem adapter and not a null modem adapter with a null modem cable. A null modem adapter will already have the necessary crosslinks between the signals (TD and RD). I’d recommend to use a null modem cable with regular male-male adapters (that’s what I have at home).

Good luck!

1 Like

Hello @yvesracine ,

Thank you for the serial monitor suggestion. I pinpointed the problem to be the connection between the arduino and the ST shield. I have no idea what could be the cause. I tried connecting the shield to pins 15 & 16 and changing &Serial2 in the constructor to &Serial3 and still no go. The only thing I could think of is the switch on the ST shield. Mine came with it set to D2/D3. Should it be D0/D1 instead?

Thank you so much for helping

@kevdliu, as stated in my readme file:

Make sure that the SmartThings shield serial port selection switch is set to pins 1,2. By default the RS232 shield will also use pins 1 &2.

See detailed instructions:

Regards.

2 Likes

@yvesracine, first of all, many thanks for providing your DSC integration guide and codes! I have successfully integrated my current DSC alarm following your instructions and am now able to arm/disarm and monitor my zones. One question I have is while the alarm is in the ‘ready’ state, by pressing the away or stay tile, should it armAway or armStay the system? Currently, I am only able to arm by pressing the main alarm tile. However, if the alarm is in the ‘arm’ state, pressing the away or stay tile will disarm. I may have missed something but any help is appreciated. Thanks

@snguyen428, if you created a SecurityAlarmPanel device type and did a copy and paste of this code from github:

You should be able to press ‘away’ or ‘stay’ to properly set your alarm panel to the correct mode accordingly.

I use this code every day w/o any issue.

To see what’s going on, activate the live logging in the IDE:

https://graph.api.smartthings.com/ide/logs

And, add some debug instructions when needed.
P.S. You still need to customize this code for your own zones.
Regards.

1 Like

@yvesracine, live logging shows the disarm command is being sent instead of armAway or armStay. I think the current state may not be showing correctly so it’s sending the wrong command. I am completely new to coding and have copied the device type below. Do you have any suggestions?

/**

  • SecurityAlarmPanel
  • Author: ObyCode
  • based on work by Josh Foshee
  • Modified by Yves Racine to include system statuses
  • Date: 2014-06-10https://graph.api.smartthings.com/ide/devices
    */

metadata {
// Automatically generated. Make future change here.
definition (name: “SecurityAlarmPanel”, author: "brice@obycode.com") {
capability "Alarm"
capability "Switch"
capability "Motion Sensor"
capability "Contact Sensor"
capability “Refresh”

    attribute "alarmStatus", "string"
    attribute "entranceDoor", "string"
    attribute "garageSideDoor", "string"
    attribute "familyWindows", "string"        
    attribute "patioDoor", "string"
    attribute "diningWindows", "string"
    attribute "frontMotion", "string"
    attribute "switchAway", "string"
    attribute "switchStay", "string"
    attribute "panic", "string"
    attribute "systemStatus", "string"
    attribute "response", "string"


    command "armAway"
    command "armStay"
    command "disarm"
    command "clear"
    command "update"
    command "chimeToggle"
    command "panic"
    command "away"
}

    // Simulator metadata
simulator {
        // status messages
        status "ping": "catchall: 0104 0000 01 01 0040 00 6A67 00 00 0000 0A 00 0A70696E67"
        status "hello": "catchall: 0104 0000 01 01 0040 00 0A21 00 00 0000 0A 00 0A48656c6c6f20576f726c6421"
}

    // UI tile definitions
tiles {
    
            standardTile("alarmStatus", "device.alarmStatus", width: 2, height: 2, canChangeIcon: false, canChangeBackground: false) {
                    state "ready", label: 'Ready', action: "armStay", icon: "st.Home.home2", backgroundColor: "#ffffff"
                    state "disarmed", label: 'Ready', action: "armAway", icon: "st.Home.home2", backgroundColor: "#ffffff"
                    state "notready", label: 'Not Ready', icon: "st.Home.home2", backgroundColor: "#ffa81e"
                    state "away", label: 'Away', action: "disarm", icon: "st.Home.home3", backgroundColor: "#add8e6"
                    state "stay", label: 'Stay', action: "disarm", icon: "st.Home.home4", backgroundColor: "#f1d801"
                    state "arming", label: 'Arming', action: "disarm", icon: "st.Home.home2", backgroundColor: "#B8B8B8"
                    state "alarm", label: 'Alarm', action: "clear", icon: "st.Home.home2", backgroundColor: "#ff0000"
            }
            standardTile("away", "device.awaySwitch", width: 1, height: 1, canChangeIcon: false, canChangeBackground: false) {
                    state "on", label: "Away", action: "disarm", icon: "st.Home.home3", backgroundColor: "#add8e6"
                    state "off", label: "Away", action: "armAway",icon: "st.Home.home3", backgroundColor: "#ffffff"
            }
            standardTile("stay", "device.staySwitch", width: 1, height: 1, canChangeIcon: false, canChangeBackground: false) {
                    state "on", label: "Stay", action: "disarm", icon: "st.Home.home4", backgroundColor: "#f1d801"
                    state "off", label: "Stay", action: "armStay",icon: "st.Home.home4", backgroundColor: "#ffffff"
            }
            
            // For the moment, each sensor has its own states due to a smartthings UI framework issue on android.
            // To be fixed later: states should be 'open', 'closed', 'active', 'inactive'
            
            standardTile("entranceDoor", "device.entranceDoor",width: 1, height: 1, canChangeIcon: false, canChangeBackground: true) {
                    state "ED open", label:'entrance\nDoor', icon: "st.contact.contact.open", backgroundColor: "#ffa81e"
                    state "ED closed", label:'entrance\nDoor', icon: "st.contact.contact.closed", backgroundColor: "#79b821"
            }
            standardTile("garageSideDoor", "device.garageSideDoor", width: 1, height: 1,inactiveLabel: false, canChangeIcon: true, canChangeBackground: true) {
                    state "GSD open", label:'garage\nSide Door', icon: "st.contact.contact.open", backgroundColor: "#ffa81e"
                    state "GSD closed", label:'garage\nSide Door', icon: "st.contact.contact.closed", backgroundColor: "#79b821"
            }
            standardTile("familyWindows", "device.familyWindows", width: 1, height: 1,inactiveLabel: false, canChangeIcon: true, canChangeBackground: true) {
                    state "FW open", label:'family\nFamily Window', icon: "st.contact.contact.open", backgroundColor: "#ffa81e"
                    state "FW closed", label:'family\nFamily Window', icon: "st.contact.contact.closed", backgroundColor: "#79b821"
            }                
            standardTile("patioDoor", "device.patioDoor", width: 1, height: 1,inactiveLabel: false,canChangeIcon:true, canChangeBackground: true) {
                    state "PD open", label:'patio\nDoor', icon: "st.contact.contact.open", backgroundColor: "#ffa81e"
                    state "PD closed", label:'patio\nDoor', icon: "st.contact.contact.closed", backgroundColor: "#79b821"
            }
            standardTile("diningWindows", "device.diningWindows", width: 1, height: 1,inactiveLabel: false, canChangeIcon: true, canChangeBackground: true) {
                    state "DW open", label:'dining\nDining Window', icon: "st.contact.contact.open", backgroundColor: "#ffa81e"
                    state "DW closed", label:'dining\nDining Window', icon: "st.contact.contact.closed", backgroundColor: "#79b821"
            } 
            standardTile("frontMotion", "device.frontMotion", width: 1, height: 1, inactiveLabel: false,canChangeIcon:true, canChangeBackground: true) {
                    state "FM active", label:'motion\nMotion', icon: "st.motion.motion.active", backgroundColor: "#ffa81e"
                    state "FM inactive", label:'motion\nMotion', icon: "st.motion.motion.inactive", backgroundColor: "#79b821"
            }
            
            
            standardTile("chime", "device.chime", width:1, height: 1, canChangeIcon: false, canChangeBackground: false) {
                    state "chimeOff", label:'Chime', action:'chimeToggle', icon:"st.secondary.off", backgroundColor: "#ffffff"
                    state "chimeOn", label:'', action:'chimeToggle', icon:"st.secondary.beep", backgroundColor: "#ffffff"
            }
            standardTile("panic", "device.panic", width: 1, height: 1, canChangeIcon: false, canChangeBackground: true) {
                    state "panic", label:'Panic', action:"panic", icon:"st.alarm.alarm.alarm", backgroundColor:"#ff0000"
            }
	        valueTile("systemStatus", "device.systemStatus", inactiveLabel: false,
	 	               decoration: "flat", width: 3, height: 1) {
		               state "default", label: '${currentValue}'
	        }
            standardTile("refresh", "device.refresh", inactiveLabel: false, width: 1, height: 1, canChangeIcon: false, canChangeBackground: false) {
                    state "default", action:"refresh", icon:"st.secondary.refresh"
            }
            main(["alarmStatus"])
            details(["alarmStatus","away","stay","entranceDoor","garageSideDoor","familyWindows","patioDoor","diningWindows","frontMotion","chime","systemStatus","refresh","panic"])
    }

}

// Parse incoming device messages to generate events
def parse(String description) {

log.debug description
def stateToDisplay

def msg = zigbee.parse(description)?.text
log.debug "Received ${msg}"
def result

if (!msg || msg.trim() == "ping") {
    result = createEvent(name: null, value: msg)

// update()
} else if ( msg.length() >= 4 ) {
if ( msg.substring(0, 2) == “RD” ) {
if (msg[3] == “0”) {
result = createEvent(name: “alarmStatus”, value: “notready”)
// When status is “Not Ready” we cannot arm
//createEvent(name: “away”, value: “off”)
//createEvent(name: “stay”, value: “off”)
sendEvent(name: “switchAway”, value: “off”)
sendEvent(name: “switchStay”, value: “off”)
sendEvent(name: “contact”, value: “open”)
sendEvent(name: “response”, value: “alarmStatus notready”, type: alarmStatus)

        }
        else {
            result = createEvent(name: "alarmStatus", value: "ready")
            // When status is "Ready" we can arm
            //createEvent(name: "away", value: "on")
            //createEvent(name: "stay", value: "on")
            sendEvent(name: "switchAway", value: "on")
            sendEvent(name: "switchStay", value: "on")
            sendEvent(name: "switch", value: "off")
            sendEvent(name: "panic", value: "off")
            sendEvent(name: "contact", value: "open")
            sendEvent(name: "systemStatus", value: "System Status:No events")
            sendEvent(name: "response",  value: "alarmStatus ready", type: alarmStatus)

        }
    // Process arm update
    } else if ( msg.substring(0, 2) == "AR" ) {
        if (msg[3] == "0") {
            result = createEvent(name: "alarmStatus", value: "disarmed") 
            sendEvent(name: "switch", value: "off")
            sendEvent(name: "contact", value: "open")
            sendEvent(name: "response",  value: "alarmStatus disarmed", type: alarmStatus)
        }
        else if (msg[3] == "1") {
            if (msg[4] == "0" | msg[4] == "2") {
                result = createEvent(name: "alarmStatus", value: "away")
                sendEvent(name: "switch", value: "on")
                sendEvent(name: "contact", value: "closed")
                sendEvent(name: "response",  value: "alarmStatus away", type: alarmStatus)
            }
            else if (msg[4] == "1" | msg[4] == "3") {
                result = createEvent(name: "alarmStatus", value: "stay")
                sendEvent(name: "switch", value: "on")
                sendEvent(name: "contact", value: "closed")
                sendEvent(name: "response",  value: "alarmStatus stay", type: alarmStatus)
            }
        }
        else if (msg[3] == "2") {
            result = createEvent(name: "alarmStatus", value: "arming")
            sendEvent(name: "switch", value: "on")
            sendEvent(name: "response",  value: "alarmStatus arming", type: alarmStatus)
        }
    } else if ( msg.substring(0, 2) == "SY" ) {
     // Process various system statuses
        if ( msg.substring(3, 3) == "658")  {
        
            result = createEvent(name: "systemStatus", value: "System Status\nKeypad Lockout")
        
        }
        else if ( msg.substring(3, 3) == "670")  {
        
            result = createEvent(name: "systemStatus", value: "System Status\nInvalid Access Code")
        
        }
        else if ( msg.substring(3, 3) == "672")  {
        
            result = createEvent(name: "systemStatus", value: "System Status\nFailed to arm")
        
        }
        else if ( msg.substring(3, 3) == "802")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nPanel AC Trouble")

        }
        else if ( msg.substring(3, 3) == "803")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nPanel AC Trouble Rest")

        }
        else if ( msg.substring(3, 3) == "806")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nSystem Bell Trouble")

        }
        else if ( msg.substring(3, 3) == "807")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nSystem Bell Trouble Rest")

        }
        else if ( msg.substring(3, 3) == "810")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nTLM line 1 Trouble")

        }
        else if ( msg.substring(3, 3) == "811")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nTLM line 1 Trouble Rest")

        }
        else if ( msg.substring(3, 3) == "812")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nTLM line 2 Trouble")

        }
        else if ( msg.substring(3, 3) == "813")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nTLM line 2 Trouble Rest")

        }
        else if ( msg.substring(3, 3) == "821")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nLow Battery at " + substring(6,3))

        }
        else if ( msg.substring(3, 3) == "822")  {

            
            result = createEvent(name: "systemStatus", value: "System Status\nLow Battery Rest at " + substring(6,3))

        }
        else if ( msg.substring(3, 3) == "829")  {

            result = createEvent(name: "systemStatus", value: "System Status\nSystem Tamper")

        }
        else if ( msg.substring(3, 3) == "830")  {

            result = createEvent(name: "systemStatus", value: "System Status\nSystem Tamper Rest")

        }
        else if ( msg.substring(3, 3) == "840")  {

            result = createEvent(name: "systemStatus", value: "System Status\nTrouble Status(LCD)")

        }
        else if ( msg.substring(3, 3) == "841")  {

            result = createEvent(name: "systemStatus", value: "System Status\nTrouble Status Rest")

        }
        else if ( msg.substring(3, 3) == "896")  {

            result = createEvent(name: "systemStatus", value: "System Status\nKeybus fault")

        }
        else if ( msg.substring(3, 3) == "897")  {

            result = createEvent(name: "systemStatus", value: "System Status\nKeybus Fault Rest")

        }
     
    // Process alarm update
    } else if ( msg.substring(0, 2) == "AL" ) {
        if (msg[3] == "1") {
            result = createEvent(name: "alarmStatus", value: "alarm")
            sendEvent(name: "response",  value: "alarmStatus alarm", type: alarmStatus)
}
    // Process chime update
    } else if ( msg.substring(0, 2) == "CH" ) {
        if (msg[3] == "1") {
            result = createEvent(name: "chime", value: "chimeOn")
        } else {
            result = createEvent(name: "chime", value: "chimeOff")
        }    
    // Process zone update
    } else if ( msg.substring(0, 2) == "ZN" ) {
        if ( msg.substring(3, 9) == "609001" ){
            stateToDisplay = "ED open"
            result = createEvent(name: "entranceDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 1 open", type: "Open/Closed Sensor")                  
        }
        else if ( msg.substring(3, 9) == "610001" ){
            stateToDisplay = "ED closed"
            result = createEvent(name: "entranceDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 1 closed", type: "Open/Closed Sensor")   
        }
        else if ( msg.substring(3, 9) == "609002" ){
            stateToDisplay = "GSD open"
            result = createEvent(name: "garageSideDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 2 open", type: "Open/Closed Sensor")                  
        }
        else if ( msg.substring(3, 9) == "610002" ){
            stateToDisplay = "GSD closed"
            result = createEvent(name: "garageSideDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 2 closed", type: "Open/Closed Sensor")            
        }
        else if ( msg.substring(3, 9) == "609003" ){
            stateToDisplay = "FW open"
            result = createEvent(name: "familyWindows", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 3 open", type: "Open/Closed Sensor")                  
        }
        else if ( msg.substring(3, 9) == "610003" ){
            stateToDisplay = "FW closed"
            result = createEvent(name: "familyWindows", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 3 closed", type: "Open/Closed Sensor")            
        }
        else if ( msg.substring(3, 9) == "609004" ){
            stateToDisplay = "PD open"
            result = createEvent(name: "patioDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 4 open", type: "Open/Closed Sensor")            
        }
        else if ( msg.substring(3, 9) == "610004" ){
            stateToDisplay = "PD closed"
            result = createEvent(name: "patioDoor", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 4 closed", type: "Open/Closed Sensor")            
        }   
        else if ( msg.substring(3, 9) == "609005" ){
            stateToDisplay = "DW open"
            result = createEvent(name: "diningWindows", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 5 open", type: "Open/Closed Sensor")                  
        }
        else if ( msg.substring(3, 9) == "610005" ){
            stateToDisplay = "DW closed"
            result = createEvent(name: "diningWindows", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 5 closed", type: "Open/Closed Sensor")            
        }
        else if ( msg.substring(3, 9) == "609006" ){
            stateToDisplay = "FM active"
            result = createEvent(name: "frontMotion", value: stateToDisplay)
            sendEvent(name: "motion", value:  "active")
            sendEvent(name: "response",  value: "r 6 active", type: "Motion Detector")            
        }
        else if ( msg.substring(3, 9) == "610006" ){
            stateToDisplay = "FM inactive"
            result = createEvent(name: "frontMotion", value: stateToDisplay)
            sendEvent(name: "response",  value: "r 6 inactive", type: "Motion Detector")            
        }
        else {
            log.debug "Unhandled zone: " + msg
        }
    }
}

log.debug "Parse returned ${result?.descriptionText}"
return result

}

// Implement “switch” (turn alarm on/off)
def on() {
armStay()
}

def off() {
disarm()
}

def away() {
armAway()
}

// Commands sent to the device
def armAway() {
log.debug "Sending arm command"
zigbee.smartShield(text: “armAway”).format()
}

def armStay() {
log.debug "Sending arm command"
zigbee.smartShield(text: “armStay”).format()
}

def disarm() {
log.debug "Sending disarm command"
zigbee.smartShield(text: “disarm”).format()
}

def strobe() {
panic()
}

def siren() {
panic()
}

def both() {
panic()
}

def chimeToggle() {
log.debug "Toggling chime"
zigbee.smartShield(text: “chimeOn”).format()
}

def panic() {
log.debug "Sending panic command"
zigbee.smartShield(text: “panic”).format()
}

// TODO: Need to send off, on, off with a few secs in between to stop and clear the alarm
def clear() {
disarm()
}

def refresh() {
update()
}

def update() {
log.debug "Sending update command"
zigbee.smartShield(text: “update”).format()
}

def configure() {
update()
}

Hello @snguyen428, did you save and publish your device type in the IDE?

Please look at

https://graph.api.smartthings.com/ide/devices

and see if your Security Alarm Panel device type is saved and ‘published’. Any smartapp related to
the security panel should also be ‘published’ (ex. Arduino Alarm Controller).

Otherwise, you may have to contact ST support about your environment. There maybe other issues
that I’m not aware of, and it’s kind of difficult for me to investigate remotely as I don’t have access to
your environment. ST support does.

Regards.

P.S. If you toogle the ‘stay’ and ‘away’ tiles, you should see different commands sent to your device type…If not, you could try to clear your cache (android) or uninstall and reinstall the smartThings app (iOS). That’s the only thing you can try before contacting support.

P.S.2 You need to customize the device type code to reflect your own zones. The code that I provided in my github is a template for your own security alarm setup.

@yvesracine, unfortunately my device type is saved and published. But I’ll take your advice and contact ST support after I play around with this a bit more. Thanks again for your help!

Best,
Sean

@snguyen428, as I wrote earlier, you can try to clear your cache (Android) or uninstall and reinstall the SmartThings app (iOS) on your device(s). That’s the only thing you can try before contacting support.

Bye And good luck.

Hello Sean,

Tonight, I compared my running SecurityAlarmPanel code with the one stored at github and found some differences… So, I did a check in with my latest code at github.

Please retry again. This may solve your state issues.

Regards.

Hi Yves,

The changes worked like a charm! The ‘Away’ and ‘Stay’ tiles are now functioning perfectly. I am very appreciative of your work and support. Thank you very much!

Yves, et al
I’ve a couple questions, you may be able to offer some guidance.

DSC PC 5010
IT100

  • connected Green/Yellow to Green/Yellow on DSC
  • connected Red/Black to Aux+/Aux- on DSC
  • flashes 2 times per second indicating normal operation

LinkSprite RS232 v2

  • Jumper 1 bridging MRX J2 J3
  • Jumper 2 bridging MTX J1 J2
  • Null Modem Cable with male to male DB9P Serial Coupler on each end, connecting to IT100
  • Pin 0 (MRX) removed and jumped to Arduino Mega pin 19 using breadboard jumper
  • Pin 1 (MTX) removed and jumped to Arduino Mega pin 18 using breadboard jumper

SmartThings Shield

  • Serial Selector set to 0,1 instead of default 2,3
  • Pin 0 RX bent and jumped to Arduino Mega pin 17 using breadboard jumper
  • Pin 1 TX bent and jumped to Arduino Mega pin 16 using breadboard jumper

Arduino Mega 2650

  • SmartThingsDSCAlarm.ino (from commit ~ July 17) loaded
    • replaced with Alarm User Code in 3 places as per comments

When I run the Serial Monitor, click refresh on the ST tile, I see
received: update
< 5 digit numeric code >
< 2 lines of nonprintable characters with a few interspersed printables>
received:

When I run the armStay I see
received: armStay
< 6 character Alpha and Numeric code >
< 3 lines of nonprintable characters with a few interspersed printables>
received:

I have verified that my user code can arm / disarm the system at the wallmounted keypad. If I try to arm the system using the wall mounted keypad while running a Serial Monitor, I see a long line of nonprintables with a couple interspersed characters. Likewise if I disarm using the wallmounted keypad. No statuses are viewable by the ST tiles. The ST app is unable to arm / disarm the system.

I’m at a loss as to where to continue my debugging. If you need photographs for insight https://goo.gl/photos/e9uT72rFiWhXDtYu8.