To be honest, I couldn't get it to ever work right either. The button implementation is completely different between Smartthings and Hubitat which is why I think that's the case. I actually got it working partially before but I gave up on using ST to HubConnect for my Ring devices and using the Unofficial Ring Integration located here instead created by @codahq :
I have it setup on my Server hub and using my own custom drivers so the devices are on my other hub that I use for the outdoor motion events so it triggers to turn lights on with motion and button events on my ring devices.
Below is the custom driver I created for myself for my Ring Doorbell:
/*
* Copyright 2019 Steve White
*
* 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.
*
*
*/
metadata
{
definition(name: "HubConnect Ring Doorbell Pro", namespace: "shackrat", author: "Steve White")
{
capability "Motion Sensor"
capability "PushableButton"
capability "Sensor"
capability "Actuator"
attribute "statusMessage", "string"
attribute "active", "string"
attribute "version", "string"
command "sync"
}
}
/*
installed
Doesn't do much other than call initialize().
*/
def installed()
{
initialize()
}
/*
updated
Doesn't do much other than call initialize().
*/
def updated()
{
initialize()
sendEvent(name: "numberOfButtons", value: "1")
}
/*
initialize
Doesn't do much other than call refresh().
*/
def initialize()
{
refresh()
}
/*
parse
In a virtual world this should never be called.
*/
def parse(String description)
{
log.trace "Msg: Description is $description"
}
/*
pushed
Pushes button #<btn>.
*/
def pushed(btn)
{
// The server will update pushed status
parent.sendDeviceEvent(device.deviceNetworkId, "pushed", [btn], stateChange: true)
}
/*
refresh
Refreshes the device by requesting an update from the client hub.
*/
def refresh()
{
// The server will update status
parent.sendDeviceEvent(device.deviceNetworkId, "refresh")
}
/*
sync
Synchronizes the device details with the parent.
*/
def sync()
{
// The server will respond with updated status and details
parent.syncDevice(device.deviceNetworkId, "ringdoorbellpro")
sendEvent(name: "numberOfButtons", value: "1")
sendEvent([name: "version", value: "v${driverVersion.major}.${driverVersion.minor}.${driverVersion.build}"])
}
def getDriverVersion() {[platform: "Universal", major: 1, minor: 1, build: 1]}
Once stub driver is installed, create a custom driver like this:
You can remove Pro off of the name if you want, doesn't really matter since it's the same for Pro vs non Pro.
Here's an example when I pushed my doorbell button just now using this custom driver on my other hub using HubConnect: