So I have an older genie garage door opener (push button to open/close with 1 button remotes) that I decided to integrate with HE and Homekit. I'm sure there's a lot of these legacy openers out there so I thought I'd publish my solution here. End result is that my opener is now a fully functional garage door device on my HE zigbee network that can also be controlled via siri and accessed from Apple Carplay.
Parts needed:
- Ademco 958 overhead door contact to show door position
- Zigbee relay with momentary on capabilities to perform push button garage door actuation.
- Zigbee contact closure sensor to capture the state of the Ademco 958.
Here's the device that I use to perform the relay and contact functions. It's small, easily mounts in the garage and has a variety of power supply options :
This Sinope device may also work but I'm not sure if it has a momentary on capability for the relay devices:
Of course there are many inexpensive stand-alone zigbee devices out there that can perform the functions too. Feel free to make your own choices.
Next, you will need to load up this driver and create a virtual device:
/*
* Virtual driver for garage door control. Useful for Homekit and other implementations when your garage door is controlled by a pushbutton.
* Needs relay and contact sensor devices. A good device to use is a Frient I/O module which has both.
* DoorState is used to change state from opening/closing to opened/closed
*
* This driver is designed to work in conjunction with a rule machine rule that manipulates the device.
* The required hubitat compatible devices are an auto off relay controlling the door pushbutton and a NO contact sensor connected to a magnetic sensor
* such as an Ademco 958 for door position sensing.
* See the "Garage Door Controller" rule which integrates the two I/O devices to control a virtual garage opener device using this driver
*/
metadata {
definition (name: "Push Button Garage-Opener device", namespace: "sleuth255", author: "Sleuth255") {
capability "GarageDoorControl"
capability "ContactSensor"
command "SetDoorState", [[name:"Set Door State",type:"NUMBER", description:"1 = Closed, 0 = Open"]]
}
}
preferences {
section("Garage Door Logging") {
input name: "logEnable", type: "bool", title: "Enable debug logging", defaultValue: false
}
}
void SetDoorState(DoorState){
if (DoorState == 0) //Door is open
sendEvent(name: "door", value: "open", isStateChange: true);
else
sendEvent(name: "door", value: "closed", isStateChange: true);
}
//
//-----------------------------------------------------------------------------
// Standard stuff
//-----------------------------------------------------------------------------
//
void installed()
{
if (logEnable) log.debug "Garage Opener driver Installed";
}
def logsOff() {
log.warn "debug logging disabled...";
device.updateSetting("logEnable", [value: "false", type: "bool"]);
}
def updated() {
log.info "updated..."
log.warn "debug logging is: ${logEnable == true}"
if (logEnable) runIn(1800, logsOff)
}
def parse(String description) {
// Shouldn't be used
log.debug(description)
}
//
//-----------------------------------------------------------------------------
// Operations
//-----------------------------------------------------------------------------
//
def close() {
if (logEnable) log.debug "Received Close command";
sendEvent(name: "door", value: "closing", isStateChange: true);
}
def open() {
if (logEnable) log.debug "Received Open command";
sendEvent(name: "door", value: "opening", isStateChange: true);
}
Finally you will need to add this rule machine rule to control the device:
In the above rule, "Garage Door Position" is the zigbee contact sensor attached to the ademco 958, the "Garage Door Actuator" is the zigbee momentary on relay wired in parallel with the door activation push button in the garage and "Garage Door" is the virtual device created from the above driver. Its important that you make sure the rule test for "Garage Door Position" uses the actual name you give to your contact sensor device.
Once you have everything set up, you will be able to use your legacy opener as a fully functional HE Garage Door device and you will also be able to publish it via Homekit integration to your homekit installation.
Here's some shots of my implementation:




