Utilitech Z-Wave Alarm

Anyone have any experience adding this device type? It was a pain to exclude from ST, but now I can’t seem to add it to hubitat. Nothing is detected.

Here is the device.

https://www.lowes.com/pd/Utilitech-85-Decibel-Wireless-Indoor-Siren-Works-with-Iris/50038872

Yep, I got mine paired without problem. I needed to use a custom driver (I easily ported the “My Utilitech Z-Wave Siren” DTH by jscgs350 from SmartThings) because Hubitat just detected it as a Z-Wave device and I couldn’t use any of the device’s features, but that was on the originally-shipped hub firmware and things may have changed by now.

If it was properly excluded from ST, the documentation says you should just need to press the button between the batteries once to put it into pairing mode and connect it to Hubitat. I may have had to “reset” my device (pressing this button five times in the span of five seconds, once per second) then tap the button once more to pair it, but I did manage to make it work in any case.

I’ve reset it… I’ve done everything and it won’t pair. Is there a possibility that this device is still lingering on ST.

I removed the device (force remove) and when I went to exclude I hit the button and nothing excluded, but I can’t see the device in ST. I did a ST repair and did not see the device in the logs.

Could the device be in ‘limbo’ forever?

I had the same issue with my Fortrezz SSA-1 siren. I ran a general exclude and it signaled (blinked success) like it had excluded. It did that every time I tried to exclude, yet Hubitat wouldn’t see it on discovery runs. I finally left it alone for several hours while sleeping last night and working today. I got home this afternoon and tried again and boom, it appeared. It showed up as a “Device”. I had to import the driver into Hubitat and switch it from “Device” to “SmartAlert Siren”. All is well now with it.

you mind sharing the groovy? Im still learning how to port from smartthings to hubitat.

/**
 *  Utilitech/Everspring Siren
 *
 *  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.
 *
 *  Updates:
 *  -------
 *  02-19-2016 : Initial commit
 *  03-11-2016 : Due to ST's v2.1.0 app totally hosing up SECONDARY_CONTROL, implemented a workaround to display that info in a separate tile.
 *  08-14-2016 : Reimplemented SECONDARY_CONTROL (looks like formatting issues were fixed.
 *  08-27-2016 : Modified the device handler for my liking, primarly for looks and feel.
 *  01-31-2017 : Modified the device handler for my liking, primarly for looks and feel.  Cleaned up code a bit.
 *  03-11-2017 : Changed from valueTile to standardTile for a few tiles since ST's mobile app v2.3.x changed something between the two.
 *  02-03-2018 : Cleaned up code.
 *
 */
metadata {
	definition (name: "My Utilitech Z-Wave Siren", namespace: "jscgs350", author: "SmartThings") {
		capability "Actuator"
        capability "Alarm"
        capability "Battery"
        capability "Polling"
        capability "Refresh"
        capability "Sensor"
		capability "Switch"
        
		attribute "alarmState", "string"

	}

	tiles(scale: 2) {
		multiAttributeTile(name:"alarm", type: "generic", width: 6, height: 4, canChangeIcon: true){
			tileAttribute ("device.alarm", key: "PRIMARY_CONTROL") {
				attributeState "both", label:'alarm!', action:'alarm.off', icon:"st.alarm.alarm.alarm", backgroundColor:"#e86d13"
				attributeState "off", label:'off', action:'alarm.strobe', icon:"st.security.alarm.clear", backgroundColor:"#ffffff"
			}
            tileAttribute ("device.battery", key: "SECONDARY_CONTROL") {
                attributeState("default", label:'${currentValue}% battery', icon: "https://raw.githubusercontent.com/constjs/jcdevhandlers/master/img/battery-icon-614x460.png")
            }
		}
        standardTile("refresh", "device.refresh", width: 6, height: 2, inactiveLabel: false, decoration: "flat") {
			state "default", label:'Refresh', action:"refresh.refresh", icon:"st.secondary.refresh-icon"
		}
        standardTile("blankTile", "statusText", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
			state "default", label:'', icon:"http://cdn.device-icons.smartthings.com/secondary/device-activity-tile@2x.png"
		}   
        standardTile("statusText", "statusText", inactiveLabel: false, decoration: "flat", width: 5, height: 1) {
			state "statusText", label:'${currentValue}', backgroundColor:"#ffffff"
		}      
		main "alarm"
		details(["alarm", "blankTile","statusText","refresh"])        
	}
}

def parse(String description) {
	log.debug "parse($description)"
	def result = null
	def cmd = zwave.parse(description, [0x20: 1])
	if (cmd) {
		result = createEvents(cmd)
	}
    
    def statusTextmsg = ""
    statusTextmsg = "Siren is ${device.currentState('alarmState').value} (tap to toggle on/off)."
    sendEvent("name":"statusText", "value":statusTextmsg)
//    log.debug statusTextmsg

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

def createEvents(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
	def map = [ name: "battery", unit: "%" ]
	if (cmd.batteryLevel == 0xFF) {
		map.value = 1
		map.descriptionText = "$device.displayName has a low battery"
	} else {
		map.value = cmd.batteryLevel
	}
	state.lastbatt = new Date().time
	createEvent(map)
}

def poll() {
	if (secondsPast(state.lastbatt, 36*60*60)) {
		return zwave.batteryV1.batteryGet().format()
	} else {
		return null
	}
}

private Boolean secondsPast(timestamp, seconds) {
	if (!(timestamp instanceof Number)) {
		if (timestamp instanceof Date) {
			timestamp = timestamp.time
		} else if ((timestamp instanceof String) && timestamp.isNumber()) {
			timestamp = timestamp.toLong()
		} else {
			return true
		}
	}
	return (new Date().time - timestamp) > (seconds * 1000)
}

def on() {
	log.debug "sending on"
	[
		zwave.basicV1.basicSet(value: 0xFF).format(),
		zwave.basicV1.basicGet().format()
	]
}

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

def strobe() {
	log.debug "sending stobe/on command"
	[
		zwave.basicV1.basicSet(value: 0xFF).format(),
		zwave.basicV1.basicGet().format()
	]
}

def both() {
	log.debug "Sending ON command to ${device.displayName} even though BOTH was called"
	[
		zwave.basicV1.basicSet(value: 0xFF).format(),
		zwave.basicV1.basicGet().format()
	]
}

def refresh() {
	log.debug "sending battery refresh command"
	zwave.batteryV1.batteryGet().format()
}

def createEvents(hubitat.zwave.commands.basicv1.BasicReport cmd)
{
	def switchValue = cmd.value ? "on" : "off"
	def alarmValue
	if (cmd.value == 0) {
		alarmValue = "off"
        sendEvent(name: "alarmState", value: "standing by")
	}
	else if (cmd.value <= 33) {
		alarmValue = "strobe"
        sendEvent(name: "alarmState", value: "ON - strobe only!")
	}
	else if (cmd.value <= 66) {
		alarmValue = "siren"
        sendEvent(name: "alarmState", value: "ON - siren only!")
	}
	else {
		alarmValue = "both"
        sendEvent(name: "alarmState", value: "ON - strobe and siren!")
	}
	[
		createEvent([name: "switch", value: switchValue, type: "digital", displayed: false]),
		createEvent([name: "alarm", value: alarmValue, type: "digital"])
	]
}

def createEvents(hubitat.zwave.Command cmd) {
	log.warn "UNEXPECTED COMMAND: $cmd"
}
3 Likes

I too utilize the Fortrezz SSA-1 Siren. I was able to add the siren and it worked as a generic Zwave switch but further testing the next day it stopped. I added your driver and updated the device type to My Utilitech ZWave Siren and updated the Device Name to SmartAlert Siren.

I added the Siren to HSM and tested. No dice. Do you mind offering some advice on how to get this working?

Bit of an old thread, but I paired mine and loaded the custom driver and assigned it to the siren, but it still doesn't work. Current state only shows "Battery". Am I missing something?

Maybe. You don't need the custom driver anymore, as Hubitat now has one built in that will work ("Linear/Vision Siren" ... which I think is actually a different device, but must be similar enough on the Z-Wave side). I haven't used the custom driver since then ... back in the day there was a lot more that didn't work natively. :smiley: I'm still not sure why the custom driver wouldn't work, as I'm pretty sure it did for me, but it's been a while...

If that still doesn't work for you, are you on a C-7 hub, by chance? Maybe there is something with the driver related to the new Z-Wave stack on that hub. I don't think this device supports S0 (and definitely not S2) or anything people might have had problems with on the C-7, but maybe. Mine is still on a C-5 and I don't have an up-to-date C-7 to try it with at the moment.

Yeah, it's strange, I originally tried to use the Linear/Vision driver, but that didn't work either.
I'm on a C-4 hub, but the Linear/Vision driver behaves just like the custom driver, the only thing I see under current state is "battery".
I'm also unable to disable auto off. i keep getting this error in the log "Turning off alarm because it's already on."
i guess i'll try to exclude it and rejoin it.

I was able to exclude from ST and include the device in my C7. Battery, siren and strobe work; however, When I select just the strobe mode, it always sounds the siren along with the strobe. I guess the Utilitech firmware isn’t exactly the same as the Linear/Vision Siren used by Hubitat.

Hi everyone. I just got one of these today and cannot seem to pair it. When I plug in batteries. It beeps every 10 seconds, and an orange light flashes every 2 seconds.

I tried pressing the pair button 5 times to reset, then one more time to put in pairing mode. After 5 presses it does indicate a reset with a longer beep. But it goes back to the behavior above after.

I tried both include and exclude in the z-wave add section.

Are there any additional diagnostics I can run?

I have three of these and it’s been a long time since I paired them but I’m pretty sure you have to press the pair button 8 times to reset. Make sure to allow 1 second between each button press. After resetting put your hub in exclusion mode and press the pair button on your siren once. Your device should now be ready pairing.

There's youtube videos for reset. To pair press and hold a second...

I paired 4 no problem...

I'd like 2 more for outdoors under the eaves...

Thanks for the tips everyone. I'm getting closer. Following the video and steps others listed, I can get it to stop beeping every few seconds, and even got to the point where Hubitat recognizes it and starts initializing.

Problem is, it hangs on initializing, saying:

Found Z-Wave Device with id 19
Initializing

Still working on that

I also see activity in the Z-Wave logs, and I see the entry for ID 19 in the Z-wave table. But it doesn't have any additional info.

from the logs:

19 2021-05-03 21:37:45.543 seqNo: 139, routeChanged: false, transmissionTime: 109ms, repeaters: None, rssi: [N/A, N/A, N/A, N/A, N/A], Ack channel: 0, Transmit channel: 1

19 2021-05-03 21:37:42.024 seqNo: 139, routeChanged: false, transmissionTime: 111ms, repeaters: None

Is this your only Zwave device? If so, how far from the hub, and how much stuff is in the way like walls, metal studs, pipes, wiring etc?

I have a few other Z-Wave devices:

  • Aeotek Siren 6
  • Three GoControl Glass Break Sensors
  • Three GE Enbrighten Light Switches

As for the location, I've had trouble pairing at longer distances in the past. So I place the Hubitat right next to the Z-Wave device when pairing.