Popp Z-Wave outdoor siren 2

After a long search for an outdoor siren without the need of an external power source I realized that there are not many options available and have now ordered a Z-Wave Popp Solar Outdoor Sensor 2. I see that there is no driver available from Hubitat but „assumed“ that there would be a Generic Z-Wave Siren driver implemented in Hubitat. I added a dummy virtual device and looked for a Generic Z-Wave Siren Driver but it seems like no such driver exists!!!!

Does anybody have an idea if I the Siren will be available as a z-wave switch at least or how can get this siren to work...

I found this information on Github, maybe someone can take a look of even create a hubitat driver. There must be others in need of a working outdoor siren for hubitat?

@bravenel
Is there a generic z-wave driver for o siren implemented in HE?

No, there is not a Generic Z-Wave Siren driver. We have a Z-Wave siren driver for Linear, Vision, and Utilitech sirens.

@bravenel
Any chance that a driver for the Popp siren could be implemented? That seems to be the only outdoor siren available in Europe that is waterproof and operational without AC power. The device will not be easily accessible to change batteries etc.

And Aeon/Aeotec.

Have you tried it with these other drivers? Linear and Aoetec? It might just work as is.

Yes I am aware of all the devices and drivers that @bravenel and you mentioned. I also am already using an Aeotec siren inside.

I need a waterproof (outdoor) siren with strobe that does NOT need an external power source.

All the ones that HE provided drivers for are either for inside use only or need AC power

The siren arrived Saturday I will try all the drivers that I can find, but I have the feeling that this siren is very different to the ones listed above... I will keep you posted. Thanks

@MarcusD what's was the outcome of this. O also looking for a battery powered siren.

Darn, sorry for not following up.... had to get vpn installed on by buddies router to re-connected and check how we got this working.

The good news... Its works like a charm using the My Utilitech Z-Wave driver copied below.

/**

  • 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, 366060)) {
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"
}

2 Likes

Thanks for the update. I think I will get this siren. Its a premium price but it's meets my requirements for a battery powered siren.

Let me know how it works for you....

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.