No problem 123456789
@malthus86 do you have issues with your Everspring sensor falling asleep and failing to respond to button presses or getting stuck in the âclosedâ state. Iâm still trying to optimize my setup and tweak my device type and am having a hell of a time getting a setup to reliably work.
No sir. Transformers are AC in, AC out by definition. A transformer changes voltage - step up or step down. The doorbell transformer is a step down transformer, typically 120VAC to 12 or 16 VAC. Transformers do not and cannot change current by themselves.
You might be thinking of wall wart power supplies that also have a rectifier which converts the stepped-down AC voltage to DC. Those are often generically called transformers, but itâs a simplification. Also, thatâs not your standard doorbell transformer.
Thatâs because of the momentary switch, and might be what saves you from any real problem in using a DC relay in an AC setup. Youâre not noticing the 120Hz hum because the relay is only powered for an occasional brief instant.
Apologies for the pedantry, but something you connect to your homeâs mains is not to be underestimated. Consider the knockoff iPhone usb charging blocks - the little white cube ones made to look like Appleâs but were not. They went for form (look like Appleâs) over function (safe voltage step-down and current rectification), and earned a reputation for starting fires. Google âknockoff apple chargers cause firesâ if youâre not familiar with this phenomenon. And while itâs not apples-to-apples (no pun intended, really), the lesson is the same: Itâs easy to say âgood enoughâ when something performs the task intended (charges phone), but the implied functions (doesnât overheat nor burst into flame) are neglected or forgotten about.
I like the approach @Mike_Maxwell describes. Elegant, simple, requires no wiring into the houseâs electrical system. Got a notification a bit ago that my magnetic reed sensors have been delivered, so I have another sensor to add to my condoâs awareness.
Absolutely no problems. Itâs probably the one device that works the best of my whole set up.
@malthus86, thanks for the input.
Works for me too.
Does the sensor show as open all the time on your phone, it closes and repoens when the door bell is rung?
just wondering. mine is open the whole time. closes for split second, opens again and an alerts comes to my phoneâŠ
if that is the case, is there away to flip the sensor status ?
Yes, it closes for a split second and I use that to trigger an alert. I cobbled together from previously written device types a custom one for it that turns the tile grey and it wonât show as âSome doors are openâ on the dashboard. Flashes orange ding dong! when the bell is rung. 2am now so tomorrow Iâll try and put it on github or post it here. I also did this same thing with a relay into my smoke/CO alarms. Then set it to trigger all the lights and unlock the doors if thereâs a fire.
Iâve never posted code here, hopefully this works. Sorry it took so long to get to this.
Doorbell device type:
/**
- Z-Wave Door/Window Sensor for use as Doorbell
- Author: SmartThings (modded malthus86)
- Date: 2014-11-6
*/
// for the UI
metadata {
// Automatically generated. Make future change here.
definition (name: âDoorbellâ, namespace: âmalthus86â, author: âmalthus86 (SmartThings)â) {
capability âContact Sensorâ
capability âSensorâ
capability âBatteryâ
fingerprint deviceId: "0x2001", inClusters: "0x30,0x80,0x84,0x70,0x85,0x86,0x72"
}
// simulator metadata
simulator {
// status messages
status âopenâ: âcommand: 2001, payload: FFâ
status âclosedâ: âcommand: 2001, payload: 00â
}
// UI tile definitions
tiles {
standardTile(âcontactâ, âdevice.contactâ, width: 2, height: 2) {
state âopenâ, label: âDing Dongâ, icon: âst.Home.home2â, backgroundColor: â#ffa81eâ
state âclosedâ, label: âNo Guestsâ, icon: âst.Home.home2â, backgroundColor: â#ffffffâ
}
valueTile(âbatteryâ, âdevice.batteryâ, inactiveLabel: false, decoration: âflatâ) {
state âbatteryâ, label:â${currentValue}% batteryâ, unit:ââ
}
main "contact" details(["contact", "battery"])
}
}
def parse(String description) {
def result = null
if (description.startsWith(âErrâ)) {
result = createEvent(descriptionText:description)
} else if (description == âupdatedâ) {
if (!state.MSR) {
result = [
response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:4*3600, nodeid:zwaveHubNodeId)),
response(zwave.manufacturerSpecificV2.manufacturerSpecificGet()),
]
}
} else {
def cmd = zwave.parse(description, [0x20: 1, 0x25: 1, 0x30: 1, 0x31: 5, 0x80: 1, 0x84: 1, 0x71: 3, 0x9C: 1])
if (cmd) {
result = zwaveEvent(cmd)
}
}
return result
}
def sensorValueEvent(value) {
if (value) {
createEvent(name: âcontactâ, value: âopenâ, descriptionText: â$device.displayName is openâ)
} else {
createEvent(name: âcontactâ, value: âclosedâ, descriptionText: â$device.displayName is closedâ)
}
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
sensorValueEvent(cmd.sensorValue)
}
def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
sensorValueEvent(cmd.sensorState)
}
def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd)
{
def result =
if (cmd.notificationType == 0x06 && cmd.event == 0x16) {
result << sensorValueEvent(1)
} else if (cmd.notificationType == 0x06 && cmd.event == 0x17) {
result << sensorValueEvent(0)
} else if (cmd.notificationType == 0x07) {
if (cmd.v1AlarmType == 0x07) { // special case for nonstandard messages from Monoprice door/window sensors
result << sensorValueEvent(cmd.v1AlarmLevel)
} else if (cmd.event == 0x01 || cmd.event == 0x02) {
result << sensorValueEvent(1)
} else if (cmd.event == 0x03) {
result << createEvent(descriptionText: â$device.displayName covering was removedâ, isStateChange: true)
result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:4*3600, nodeid:zwaveHubNodeId))
if(!state.MSR) result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
} else if (cmd.event == 0x05 || cmd.event == 0x06) {
result << createEvent(descriptionText: â$device.displayName detected glass breakageâ, isStateChange: true)
} else if (cmd.event == 0x07) {
if(!state.MSR) result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
result << createEvent(name: âmotionâ, value: âactiveâ, descriptionText:â$device.displayName detected motionâ)
}
} else if (cmd.notificationType) {
def text = âNotification $cmd.notificationType: event ${([cmd.event] + cmd.eventParameter).join(â, â)}â
result << createEvent(name: ânotification$cmd.notificationTypeâ, value: â$cmd.eventâ, descriptionText: text, displayed: false)
} else {
def value = cmd.v1AlarmLevel == 255 ? âactiveâ : cmd.v1AlarmLevel ?: âinactiveâ
result << createEvent(name: âalarm $cmd.v1AlarmTypeâ, value: value, displayed: false)
}
result
}
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
def result = [createEvent(descriptionText: â${device.displayName} woke upâ, isStateChange: false)]
if (!state.lastbat || (new Date().time) - state.lastbat > 5360601000) {
result << response(zwave.batteryV1.batteryGet())
result << response(âdelay 1200â)
}
if (!state.MSR) {
result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:43600, nodeid:zwaveHubNodeId))
result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
result << response(âdelay 1200â)
}
result << response(zwave.wakeUpV1.wakeUpNoMoreInformation())
result
}
def zwaveEvent(physicalgraph.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â
map.isStateChange = true
} else {
map.value = cmd.batteryLevel
}
state.lastbat = new Date().time
[createEvent(map), response(zwave.wakeUpV1.wakeUpNoMoreInformation())]
}
def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
def result =
def msr = String.format(â%04X-%04X-%04Xâ, cmd.manufacturerId, cmd.productTypeId, cmd.productId)
log.debug âmsr: $msrâ
updateDataValue(âMSRâ, msr)
retypeBasedOnMSR()
result << createEvent(descriptionText: â$device.displayName MSR: $msrâ, isStateChange: false)
if (msr == â011A-0601-0901â) { // Enerwave motion doesnât always get the associationSet that the hub sends on join
result << response(zwave.associationV1.associationSet(groupingIdentifier:1, nodeId:zwaveHubNodeId))
} else if (!device.currentState(âbatteryâ)) {
result << response(zwave.batteryV1.batteryGet())
}
result
}
def zwaveEvent(physicalgraph.zwave.Command cmd) {
createEvent(descriptionText: â$device.displayName: $cmdâ, displayed: false)
}
def retypeBasedOnMSR() {
switch (state.MSR) {
case â0086-0002-002Dâ:
log.debug(âChanging device type to Z-Wave Water Sensorâ)
setDeviceType(âZ-Wave Water Sensorâ)
break
case â011F-0001-0001â: // Schlage motion
case â014A-0001-0001â: // Ecolink motion
case â0060-0001-0002â: // Everspring SP814
case â0060-0001-0003â: // Everspring HSP02
case â011A-0601-0901â: // Enerwave ZWN-BPC
log.debug(âChanging device type to Z-Wave Motion Sensorâ)
setDeviceType(âZ-Wave Motion Sensorâ)
break
}
}
CO/Smoke Detector Device Type:
/**
- Z-Wave Door/Window Sensor for use as Smoke/CO Detector
- Author: SmartThings (modded malthus86)
- Date: 2015-03-11
*/
// for the UI
metadata {
definition (name: âSmoke/CO Detectorâ, namespace: âmalthus86â, author: âmalthus86 (SmartThings)â) {
capability âContact Sensorâ
capability âSensorâ
capability âBatteryâ
fingerprint deviceId: "0x2001", inClusters: "0x30,0x80,0x84,0x70,0x85,0x86,0x72"
}
// simulator metadata
simulator {
// status messages
status âopenâ: âcommand: 2001, payload: FFâ
status âclosedâ: âcommand: 2001, payload: 00â
}
// UI tile definitions
tiles {
standardTile(âcontactâ, âdevice.contactâ, width: 2, height: 2) {
state âopenâ, label: âNo Smokeâ, icon: âst.Weather.weather3â, backgroundColor: â#ffffffâ
state âclosedâ, label: âDANGER! SMOKE/CO DETECTED!â, icon: âst.particulate.particulate.particulateâ, backgroundColor: â#CC3300â
}
valueTile(âbatteryâ, âdevice.batteryâ, inactiveLabel: false, decoration: âflatâ) {
state âbatteryâ, label:â${currentValue}% batteryâ, unit:ââ
}
main "contact" details(["contact", "battery"])
}
}
def parse(String description) {
def result = null
if (description.startsWith(âErrâ)) {
result = createEvent(descriptionText:description)
} else if (description == âupdatedâ) {
if (!state.MSR) {
result = [
response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:4*3600, nodeid:zwaveHubNodeId)),
response(zwave.manufacturerSpecificV2.manufacturerSpecificGet()),
]
}
} else {
def cmd = zwave.parse(description, [0x20: 1, 0x25: 1, 0x30: 1, 0x31: 5, 0x80: 1, 0x84: 1, 0x71: 3, 0x9C: 1])
if (cmd) {
result = zwaveEvent(cmd)
}
}
return result
}
def sensorValueEvent(value) {
if (value) {
createEvent(name: âcontactâ, value: âopenâ, descriptionText: âAll Clearâ)
} else {
createEvent(name: âcontactâ, value: âclosedâ, descriptionText: âDANGER! SMOKE/CO DETECTED!â)
}
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
sensorValueEvent(cmd.sensorValue)
}
def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
sensorValueEvent(cmd.sensorState)
}
def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd)
{
def result =
if (cmd.notificationType == 0x06 && cmd.event == 0x16) {
result << sensorValueEvent(1)
} else if (cmd.notificationType == 0x06 && cmd.event == 0x17) {
result << sensorValueEvent(0)
} else if (cmd.notificationType == 0x07) {
if (cmd.v1AlarmType == 0x07) { // special case for nonstandard messages from Monoprice door/window sensors
result << sensorValueEvent(cmd.v1AlarmLevel)
} else if (cmd.event == 0x01 || cmd.event == 0x02) {
result << sensorValueEvent(1)
} else if (cmd.event == 0x03) {
result << createEvent(descriptionText: â$device.displayName covering was removedâ, isStateChange: true)
result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:4*3600, nodeid:zwaveHubNodeId))
if(!state.MSR) result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
} else if (cmd.event == 0x05 || cmd.event == 0x06) {
result << createEvent(descriptionText: â$device.displayName detected glass breakageâ, isStateChange: true)
} else if (cmd.event == 0x07) {
if(!state.MSR) result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
result << createEvent(name: âmotionâ, value: âactiveâ, descriptionText:â$device.displayName detected motionâ)
}
} else if (cmd.notificationType) {
def text = âNotification $cmd.notificationType: event ${([cmd.event] + cmd.eventParameter).join(â, â)}â
result << createEvent(name: ânotification$cmd.notificationTypeâ, value: â$cmd.eventâ, descriptionText: text, displayed: false)
} else {
def value = cmd.v1AlarmLevel == 255 ? âactiveâ : cmd.v1AlarmLevel ?: âinactiveâ
result << createEvent(name: âalarm $cmd.v1AlarmTypeâ, value: value, displayed: false)
}
result
}
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
def result = [createEvent(descriptionText: â${device.displayName} woke upâ, isStateChange: false)]
if (!state.lastbat || (new Date().time) - state.lastbat > 5360601000) {
result << response(zwave.batteryV1.batteryGet())
result << response(âdelay 1200â)
}
if (!state.MSR) {
result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds:43600, nodeid:zwaveHubNodeId))
result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
result << response(âdelay 1200â)
}
result << response(zwave.wakeUpV1.wakeUpNoMoreInformation())
result
}
def zwaveEvent(physicalgraph.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â
map.isStateChange = true
} else {
map.value = cmd.batteryLevel
}
state.lastbat = new Date().time
[createEvent(map), response(zwave.wakeUpV1.wakeUpNoMoreInformation())]
}
def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
def result =
def msr = String.format(â%04X-%04X-%04Xâ, cmd.manufacturerId, cmd.productTypeId, cmd.productId)
log.debug âmsr: $msrâ
updateDataValue(âMSRâ, msr)
retypeBasedOnMSR()
result << createEvent(descriptionText: â$device.displayName MSR: $msrâ, isStateChange: false)
if (msr == â011A-0601-0901â) { // Enerwave motion doesnât always get the associationSet that the hub sends on join
result << response(zwave.associationV1.associationSet(groupingIdentifier:1, nodeId:zwaveHubNodeId))
} else if (!device.currentState(âbatteryâ)) {
result << response(zwave.batteryV1.batteryGet())
}
result
}
def zwaveEvent(physicalgraph.zwave.Command cmd) {
createEvent(descriptionText: â$device.displayName: $cmdâ, displayed: false)
}
def retypeBasedOnMSR() {
switch (state.MSR) {
case â0086-0002-002Dâ:
log.debug(âChanging device type to Z-Wave Water Sensorâ)
setDeviceType(âZ-Wave Water Sensorâ)
break
case â011F-0001-0001â: // Schlage motion
case â014A-0001-0001â: // Ecolink motion
case â0060-0001-0002â: // Everspring SP814
case â0060-0001-0003â: // Everspring HSP02
case â011A-0601-0901â: // Enerwave ZWN-BPC
log.debug(âChanging device type to Z-Wave Motion Sensorâ)
setDeviceType(âZ-Wave Motion Sensorâ)
break
}
}
I love all the ideas in this thread! I am planning on getting a monoprice contact sensor for my doorbell (same as the one pictured here)⊠however I would like to go one step further and add a relay to disable the bell⊠I would ideally like to have it automatically triggered by a door state.
when my 10month olds bedroom door is closed I would like the bell disabled and instead get a notification when its pressed. the issue is when the baby is napping the doorbell goes and if that does not wake him the dog barking in response does⊠I cant even get mad at the dog for barking because i trained her years ago to bark several times and go sit by the door when it rings for when my wife is home alone.
anyone have any ideas as to how / what device i should use to add a relay to disable the bell as well?
Doable with the typical 24vac doorbell, but a bit complicated electrically.
Might be easier to replace the doorbell button with a zwave doorbell.
im not overly concerned about electrically complicated. Ideally i would like a normally closed relay as it would be great if I didnât have a device eating up power whenever the baby is not sleeping and saving when he is. if such a device does not exist i may do it with an appliance module and use that to trigger a power supply with a standard normally closed relay.
I guess the other option could be to put an appliance module on the doorbell transformer.
but if a smart things compatible device already exists thats probably cleaner
Doesnât exist yet, but Aeotec has announced one for release this summer:
the difficulty is that you want to have the doorbell send an alert when off, and ring the doorbell when on.
This requires intercepting the doorbell signal, then enabling the alerts and disabling the bell itselfâŠ
With a single relay module (of whatever contact form), thereâs no way of capturing the door bell action via the contact sensor, since the relay has cut the power to the doorbellâŠ
If I was super keen on pulling this off with currently available stuff, I would do the following.
âconnect existing door bell button to monoprice contact sensors external inputs., this becomes the doorbell trigger (you may have to remove the doorbellâs light from the button)
âuse the zwave relay module to activate the doorbell (replacing the existing doorbell button)
âcrank out a smart app, or use an existing one to determine the actions that the contact takes (alert vs. relay on/off)
good suggestions! thanks!
FYI, my relay fried on me recently. Contact sensor still works perfectly and the APP runs just fine, but the relay is kaput. Relays are cheap enough but the time to remove it, solder a new one in, and put it all back together every 6 months is just not worth it. So either I have to find a more appropriate relay or Iâll be looking at another alternative like the Reed Switch Mike_Maxwell used.
I had to test a few different relays to work with my lighted doorbell button on a 16v transformer without an actual bell. This 24v AC beefcake has been doing the job well with no signs of quitting:
You might give it a go.
This actually works for you? I just got a nearly identical reed sensor and it doesnât pick up the field change at all.Did you do anything special?
Yea, been working for over a year.
I used an external reed sensor so I could mount it right to the side of the doorbell coil, the reed switch axis parallel to the coil .
Thanks for this idea, @Mike_Maxwell! This did indeed turn out to be super easy. The trickiest part was knocking out the hole for the external sensor wires and figuring out exactly how to insert the wires in the Monoprice sensor.
Alas, I canât fit it inside the cover, because the contact sensor is just a little too long to fit between the chime plates and too long to fit in any other direction. For now, itâs sitting on top of the cover. The wall is light colored, so itâs mostly unobtrusive.
The New SkyBell HD is here and our new IFTTT Channel has launched: http://goo.gl/cYVclE
With SkyBell HD, you can start, view and record live video from the SkyBell HD at any time. You can do it from the app or any of the IFTTT/SmartThings devices can trigger SkyBell HD to turn on and start recording.
SkyBell HD also records when the motion sensor is triggered, even if you donât answer it.
SkyBell HD is the same size as SkyBell 2.0, yet is a major improvement across the board.
Some other nice things about SkyBell HD:
âFull color night vision
âFree cloud recording and activity history so you can watch video later
âUp to 1080p camera without the fishbowl or periscope effect
âMade in the USA
âYou can turn off your indoor chime from ringing (good for quiet time, sleeping babies and napping dogs!)
âOn-demand video
âNew Wi-Fi chip for faster performance and B/G/N support
â You can customize the color of the LED button
â Works with Nest
I liked your approach, but noticed the clatter of the relay when the doorbell was activated, and suspect, over time, the DC relay does not like the low AC voltage coming from the transformer. Just a thought, adding a AC to DC full wave rectifier between the relay and the solenoid might keep it alive. I am by no means and expert in this area, and invite others with a better understanding to comment.