Outdoor Sirens for UK? (2018)

project_security

(Ahmed) #62

Does WebCoRE run fine simultaneously with normal ST routines ? No conflicts?


(Ahmed) #63

I tried the reset procedure as per the manual for the siren. It just doesn’t work. Nothing getting detected when i go to add a thing. Everytime i go to the z wave exclusion utility and press the pair button 3 times on the siren it successfully removes it but just cannot get it to get detected. Any ideas what could be wrong?


(Robin) #64

If it’s not pairing how come you are able to remove it “every time”?

If it’s not paired there’s nothing to remove.

Don’t use general exclusion either… each device has a remove button within the device preferences page in the app (click on the cog symbol when viewing a device)

Please describe step by step what process you are following for the inclusion.


(Robin) #65

Yes, as long as you don’t setup a rule in ST that fights with webCoRE, you can create and endless loop, i.e.

ST
turn off A If B turns on

WC
turn on B if A turns off

But you could create such a loop easily using two ST automations so no real difference there.


(Ahmed) #66

I think the Z-Wave exclusion just seems to let you disassociate a device to anything. The first time I removed it with the following steps because it just wasn’t going online:

I went to Z-Wave Exclusion section, Pressed Remove, then it was waiting for combination to be pressed on device. So on the siren I pressed the the tamper switch 3 times and it said successfully removed.

I then went to Add a Thing in ST and tried pressing the tamper switch in 3 times, tried 4 times tried all combinations it just never got picked up. At one point when i was trying all these combinations I got a message on ST saying something about incorrect Token then it disappeared.


(Ahmed) #67

All the combinations I try pressing the tamper switch sometimes makes the light flash. What’s the difference between the tamper switch and the small tiny button right next to the micro-usb connector? A few times playing with the tamper switch caused the siren to go off as if it’s been tampered.

I try the complete reset process by pressing the tamper switch quickly 4 times and hold on the 4th time. This causes the red light to come on after a few seconds, the red light fades away. As soon as it fades away i release pressing the tamper switch. But according to the manual its supposed to just turn light on once and not flash but the LED flashes a few times.


(Robin) #68

Perhaps it’s already reset (sounds like you got the exclusion correct so shouldn’t need resetting).

What distance from the hub are you attempting to pair? Being a security device it probably needs to be a zwave secure inclusion so you need to be right next to the hub (no repeaters between).


(Ahmed) #69

I was about 1.5meters away from the hub. Will try right next to the hub tomorrow as last I tried earlier the siren went off and my little one is fast asleep lol.

In the meantime, in regards to WebCoRE, I was watching a few of your YouTube videos to try and familiarize myself with it. You mentioned above that WebCoRE saves and runs all automations in the SmartThings cloud. In your video I noticed you have to use the webCoRE web UI as the tool to manage the automations, so it got me thinking, am I correct in understanding that WebCoRE is the tool/UI used to create and edit the automations which then save on the ST cloud. So if WebCoRE was to have downtime, it won’t effect the automations just the abiity to edit or manage the automations. Is that right? So hence once the automations are created they are reliant on WebCoRE to actually run?

Also, noticed in your demo you set up a SMS alert. How does this work? surely SMS messages costs someone. Who is sending this SMS and how does that work? Can we send Push notifications with custom messages? for example when SHM is armed to send Push Notification to say Your Home is Armed


(Robin) #70

Correct… You only need the WC UI to build and edit pistons… once saved the UI is irrelevant.

SMS is a feature provided by ST… they are rate limited to 15 messages per minute.

SMS message services are dirt cheap for the scale of ST, hundreds of messages can be sent for just a penny.

You can send push messages with custom messages. And you can even write variables, expressions and ternary operators into the messages.


(Robin) #71

Example:

(count(openSensors)==0 ? ”All doors and windows are closed” : (count(openSensors)==1 ? OpenSensors “ is open” : openSensors “ are open” ))


(Ahmed) #72

That’s awesome, just watching the installation video properly to make sure i do the webCoRE install properly. In your personal opinion which is better option for alerting SMS or Push? or both? Like for example I want to have a rule that arms the SHM if all mobile presence and presence sensor leaves to let me know that house is armed. That way for example I can get used to that and if I don’t get that then know something went wrong so i can manually arm it etc.


(Robin) #73

Here is a quick example that arms SHM when all sensors leave and disarms when one of them comes back. It sends messages for both events.

The leaving message also includes a weather forecast and a reminder to take an umbrella if there is a greater than 30% chance of rain over the next 4 hours. :sunglasses:

image

You can import this piston directly into your version of webCoRE using code j4ouy


(Ahmed) #74

Wow that looks good. Going to give the install a try tomorrow


(Ahmed) #75

Sorry this might sound silly but when you say I can import the above example code using j4ouy how do I do that?

Also when automations are created and saved are they only visible through webCoRE web UI or can we see a summary of it on ST app?


(Robin) #76

New piston > restore using a backup code

You can only view a piston in the webUI


(Ahmed) #77

I figured out what was wrong with the siren. It seems that the following custom handler, just isnt working my my DCH-Z510. As soon as I deleted the handler and attempted to re-pair it, it came up straight away. And it seems this was the reason I had to reset my siren in the first place thinking it wasn’t working when in fact when it tried to come online the handler was effecting it. So I managed to pair it and it paired as a Aeon Siren, i tested it and the alarm goes off nicely. The minute i add the handler again it goes funny and completely stops responding and eventually goes offline.

Seeing as I am planning to be setting up WebCoRE shortly, is it possible to control the chime from WebCoRE using the default Aeon Handler?


(Robin) #78

I use that custom handler with the same siren… and changing handler should have no effect on inclusion???

Perhaps different firmware / fingerprint?

Try removing this part of the handler:

fingerprint deviceId: "0x1005", inClusters: "0x5E,0x71,0x20,0x25,0x85,0x70,0x72,0x86,0x30,0x59,0x73,0x5A,0x98,0x7A"

(Robin) #79

The Aeon handler does not expose the chime or other sounds that the dlink is capable of… it just has on / off / Test.


(Ahmed) #80

I tried removing the fingerprint deviceId doesn’t work and now device is completely failing to come online at all. I’ve removed the device handler and still cannot get it to come online anymore. So probably have to do a full reset again.


(Robin) #81

Just to be sure the copy on GitHub is the same as I’m using… here is a copy paste from my IDE:

/**
 *  Copyright 2015 Stuart Buchanan
 *
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
 *
 *	Dlink DCH-Z510
 *
 *	Author: fuzzysb
 *	Date: 2015-01-05
 */
 
 
 
preferences {
 input "defaultSound", "enum", title: "Default Sound to use for the Siren?", options: ["Emergency","FireAlarm","Ambulance","PoliceCar","DoorChime"], required: false, defaultValue: "Emergency"
}
 
metadata {
 definition (name: "Dlink DCH-Z510", namespace: "fuzzysb", author: "Stuart Buchanan") {
	capability "Actuator"
	capability "Alarm"
	capability "Switch"
	capability "Configuration"

	command "Emergency"
	command "FireAlarm"
	command "Ambulance"
	command "PoliceCar"
	command "DoorChime"
    
	fingerprint deviceId: "0x1005", inClusters: "0x5E,0x71,0x20,0x25,0x85,0x70,0x72,0x86,0x30,0x59,0x73,0x5A,0x98,0x7A"
 }

simulator {

}

 tiles(scale: 2) {
	multiAttributeTile(name:"alarm", type: "generic", width: 6, height: 4, canChangeIcon: false, canChangeBackground: true){
		tileAttribute ("device.alarm", key: "PRIMARY_CONTROL") {
			attributeState "off", label:'off', action:'alarm.siren', icon:"st.alarm.alarm.alarm", backgroundColor:"#ffffff"
			attributeState "both", label:'alarm!', action:'alarm.off', icon:"st.alarm.alarm.alarm", backgroundColor:"#e86d13"
		}
	}
	standardTile("Emergency", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'Emergency', action:"Emergency", icon:"st.Weather.weather1"
	}
	standardTile("FireAlarm", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'Fire Alarm', action:"FireAlarm", icon:"st.Outdoor.outdoor10"
	}
	standardTile("Ambulance", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'Ambulance', action:"Ambulance", icon:"st.Transportation.transportation2"
	}
	standardTile("PoliceCar", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'Police Car', action:"PoliceCar", icon:"st.Transportation.transportation8"
	}
	standardTile("DoorChime", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'Door Chime', action:"DoorChime", icon:"st.Home.home30"
	}
	standardTile("off", "device.button", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
		state "default", label:'', action:"alarm.off", icon:"st.secondary.off"
	}
	main "alarm"
	details(["alarm", "Emergency", "FireAlarm", "Ambulance", "PoliceCar", "DoorChime", "off"])
 }
}

def parse(String description)
{
	def result = null
	if (description.startsWith("Err 106")) {
		state.sec = 0
		result = createEvent( name: "secureInclusion", value: "failed", isStateChange: true,
			descriptionText: "This sensor failed to complete the network security key exchange. If you are unable to control it via SmartThings, you must remove it from your network and add it again.")
	} else if (description != "updated") {
		def cmd = zwave.parse(description, [0x20: 1, 0x25: 1, 0x26: 1, 0x70: 1, 0x80: 1])
		if (cmd) {
			result = zwaveEvent(cmd)
            log.debug "Parse returned ${result?.inspect()}"
            		} else {
			log.debug("Couldn't zwave.parse '$description'")
			null
		}
		
	}
	log.debug "Parsed '${description}' to ${result.inspect()}"
	return result
}



def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
	def encapsulatedCommand = cmd.encapsulatedCommand([0x20: 1, 0x25: 3, 0x26: 3, 0x70: 1, 0x80: 1])
	state.sec = 1
	log.debug "encapsulated: ${encapsulatedCommand}"
	if (encapsulatedCommand) {
		zwaveEvent(encapsulatedCommand)
	} else {
		log.warn "Unable to extract encapsulated cmd from $cmd"
		createEvent(descriptionText: cmd.toString())
	}
}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityCommandsSupportedReport cmd) {
	response(configure())
}

def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) {
    log.debug "---CONFIGURATION REPORT V2--- ${device.displayName} parameter ${cmd.parameterNumber} with a byte size of ${cmd.size} is set to ${cmd.configurationValue}"
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd)
{
	[name: "switch", value: cmd.value ? "on" : "off", type: "digital", displayed: true, isStateChange: true]
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
	log.debug "rx $cmd"
	[
		createEvent([name: "switch", value: cmd.value ? "on" : "off", displayed: false]),
		createEvent([name: "alarm", value: cmd.value ? "both" : "off"])
	]
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv2.SensorBinaryReport cmd) {
	createEvent(name:"Alarm", cmd.sensorValue ? "on" : "off")
}

def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) {
if (cmd.notificationType == 6 && cmd.event == 22) {
		log.debug "Playing Door Chime"
	} else if (cmd.notificationType == 10 && cmd.event == 1) {
		log.debug "Playing Police Car"
	} else if (cmd.notificationType == 10 && cmd.event == 3) {
    	log.debug "Playing Ambulance"
    } else if (cmd.notificationType == 10 && cmd.event == 2) {
    	log.debug "Playing Fire Alarm"
    } else if (cmd.notificationType == 7 && cmd.event == 1) {
    	log.debug "Playing Emergency"
    }
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	log.debug "Unhandled: $cmd"
    createEvent(descriptionText: cmd.toString(), isStateChange: false)
}

def strobe() {
	on()
}

def siren() {
	on()
}

def both() {
	on()
}

def on() {
	log.debug("Sounding Siren")
	switch ( settings.defaultSound ) {
		case "Emergency":
		Emergency()
		break
		
		case "FireAlarm":
		FireAlarm()
		break
		
		case "Ambulance":
		Ambulance()
		break
		
		case "PoliceCar":
		PoliceCar()
		break
		
		case "DoorChime":
		DoorChime()
		break
		
		default:
		Emergency()
		break
	}
}

def off() {
	log.debug "sending off"
	[
		secure(zwave.basicV1.basicSet(value: 0x00)),
		secure(zwave.basicV1.basicGet())
	]
}

def Emergency() {
	log.debug "Sounding Siren With Emergency"
	[
		secure(zwave.notificationV3.notificationReport(event: 0x01, notificationType: 0x07)),
		secure(zwave.basicV1.basicGet())
	]
}

def FireAlarm() {
	log.debug "Sounding Siren With Fire Alarm"
	[
		secure(zwave.notificationV3.notificationReport(event: 0x02, notificationType: 0x0A)),
        secure(zwave.basicV1.basicGet())
	]
}

def Ambulance() {
	log.debug "Sounding Siren With Ambulance"
	[
		secure(zwave.notificationV3.notificationReport(event: 0x03, notificationType: 0x0A)),
        secure(zwave.basicV1.basicGet())
	]
}

def PoliceCar() {
	log.debug "Sounding Siren With Police Car"
	[
		secure(zwave.notificationV3.notificationReport(event: 0x01, notificationType: 0x0A)),
        secure(zwave.basicV1.basicGet())
	]
}

def DoorChime() {
	log.debug "Sounding Siren With Door Chime"
	[
		secure(zwave.notificationV3.notificationReport(event: 0x16, notificationType: 0x06)),
        secure(zwave.basicV1.basicGet())
	]
}

def configure() {
	log.debug "Resetting Siren Parameters to SmartThings Compatible Defaults"
	def cmds = []
    
	cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 4, size: 1)
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 29, size: 1)
    cmds << zwave.configurationV1.configurationSet(configurationValue: [6], parameterNumber: 31, size: 1)
    
    delayBetween(cmds, 500)
}

private secure(physicalgraph.zwave.Command cmd) {
	if (state.sec) {
         log.debug "Sending Secure Command $cmd"
		zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()
	} else {
    	log.debug "Sending Insecure Command $cmd"
		cmd.format()
	}
}