Lowes IRIS Transition

I now have everything that worked in IRIS working in Hubitat except my Nest thermostat. There appears to be a solution using IFTTT but I have not tried it yet mainly because I'm trying to keep everything local and I believe IFTTT requires the internet but I could be wrong. My Arlo cameras never worked with IRIS but again IFTTT appears to offer a solution to make them work with Hubitat. To the best of my knowledge everything I've set up has been working continuously with no down time. I read horror stories with other systems that kept dropping devices. But Hubitat just works which is what it should do.

My primary concern was security and now that I have that working my wife is happy and therefore we are both quite happy with Hubitat. I view the home automation part to be a convenience rather than a necessity but it is fun to play with as time permits and I have plans for some additional automation. I am quite happy with my decision to go with Hubitat.

1 Like

Try this NST Manager ported to Hubitat

Did you replace these afterall. I'm looking to replace all my 'Dumb' smoke detectors with First Alert ZSmoke or ZCombos. I'm curious as to why you're looking to replace them or what you mightve replaced them with? Thanks in advance!

I dont know what good the IRIS Hubs are anymore but if anyone needs one for science then I'll gladly mail you a brand new Gen 3. DM me if interested.

I have been a longtime user of the Petsafe door (you're right, it's Zigbee) on SmartThings. Like a lot of people here, I migrating away from ST and have come to Hubitat. Much better. Hubitat, however, does not appear to have a native device driver for the PetSafe door, nor has anyone in the community done the integration work.

This morning, I pulled up the ST device driver written by ST user @Sticks, followed the directions here regarding porting ST drivers to HE. And, at least for the moment (10 minutes in), it works.

I just sent @Sticks a message on the ST board asking him for permission to use his intellectual property. I get a little nervous about just using other people's stuff without asking. Leftover from getting beat up in the playground when I was five I guess. :stuck_out_tongue_winking_eye:

Anyone else have any luck on this?

1 Like

I have been using it just fine for about a year -- until suddenly a couple days ago something -- possibly an update, caused it to stop working. I am going to reinstall the device and try that but using the Petsafe Dog Door , has worked for me just fine. Alexa also picks it up and you can use voice commands.

1 Like

Have you noticed any issues with it in the past few days?

1 Like

Nope - all good here. I can say it’s a bit finicky. Every few months it drops off the zigbee mesh. It’s simple and reliable to reconnect.

1 Like

mluck -- do you know how to do a factory reset on the PetSafe door? Habitat finds the device but it is stuck in "initialize" and never allows me to save the device. I had this installed previously and removed the drivers to reinstall but it doesn't seem to want to complete the install of the device.

2 Likes

Ok— I got it back on the mesh. I did have to do a factory reset.. to do this, i discovered that you hold the Mode/Reset button down as you insert the last battery. The Rad and Orange LEDs will flash 3 times. Once that is done, the discovery picked it up instantly. Prior, discovery would find it, but not initialize and allow me to save it. All is back online and working well again. I did see a hack for this door, to be able to use a 5v adapter to power the device instead of using batteries. It’s found easily by searching for the pet safe dog door and ac adapter. I did see where there is a battery level driver for ST but it doesn’t work with HB and it’s a bummer that those of use using this can’t see our battery levels on this current driver. Surely, we are not the only 2 people using this door. I am able to control it from Alexa and also have it send TTS voice notifications and set rules to open and close based on alerts from my Blue Iris Camera Platform and my IP outdoor cameras. It’s amazing. The materials used as the “hinge” on this door becomes brittle after a couple years. Also, the versions being sold now do not have the same radios that were in the Lowe’s version— therefore, I’ve kept the innards from the original door and have had to purchase new doors just to get new a new hinge.. now the one I have is already starting to split on the left side where the “teeth” go— to connect to the piece that raises and lowers the door. They need to come up with a better hinge and or put the zigbee radios back into the new releases. I can see this product being much more popular if people knew it’s potential and how it can be used with other systems. When I show people how I use it for our 4 Great Pyrenees.. they are awestruck.

1 Like

@tebiv1, I found a copy of the official PetSafe user manual, which feels like it belongs among the relics of King Tut's treasures or something. This product has been seriously mothballed by PetSafe. They don't even know what to do when I've called them for support. If you PM me your email address, I'm happy to send you the pdf I have of their user manual. It does a pretty good job explaining all the button pushes and LED flashes.

Also - FWIW I'm using an ST device handler from ST user @sticks18. With his permission, I ported it to Hubitat. The battery monitoring capability works pretty well -- at least as well as any battery monitoring works. I've found that once it hits about 70%, it means that aberrant device behavior is right around the corner. So I set my battery notification at 70%, and it's worked so far just fine.

I never thought of converting the battery to AC using a 5v adapter. That's a brilliant idea. Feel like I go through four "D" batteries every couple months. Think I'll give that a try when I have time.

Regarding your automation, curious to hear more about your logic with BI as I'm a BI user as well. The automation we've set up is to lock the pet door when any of the following become true: (1) it's dark; (2) either of the back gates are opened; or (3) nobody is home. If all of these are untrue, the pet door is unlocked. This logic seems to work for us pretty well. It's prevented runaway dogs and avoided a few skunking incidents!

Thankfully I've not faced the hinge problem you described. Now you've got me worried :slight_smile:

1 Like

Can you share the exact driver you're using? I've had the dog door for about a year, but in a moment of weakness, removed it from my hub. Now I'm trying to get it reconnected and am having zero luck. Full factory reset of the hub and dog door and I'm getting squat! Installed sticks18's driver, but man... this is really irking me.

Sorry to be slow, just saw your note......here you go:

Driver for Petsafe Smart Door

/**

  • PetSafe Smart Door
  • Copyright 2015 Scott Gibson
  • Ported to Hubitat in 2019 by Mark Olson with explicit permission from Scott Gibson
  • 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 {
// Automatically generated. Make future change here.
definition (name: "PetSafe Smart Door", namespace: "sticks18", author: "Scott Gibson") {
capability "Battery"
capability "Polling"
capability "Actuator"
capability "Refresh"
capability "Lock"

	fingerprint profileId: "0104", inClusters: "0000 0001 0003 0009 000A 0101", outClusters: "0000 0001 0003 0009 000A 0101"
}


	simulator {
	/*  // status "locked": "command: 9881, payload: 00 62 03 FF 00 00 FE FE"
	// status "unlocked": "command: 9881, payload: 00 62 03 00 00 00 FE FE"

	// reply "9881006201FF,delay 4200,9881006202": "command: 9881, payload: 00 62 03 FF 00 00 FE FE"
	// reply "988100620100,delay 4200,9881006202": "command: 9881, payload: 00 62 03 00 00 00 FE FE"  */
}

tiles {
	standardTile("toggle", "device.lock", width: 2, height: 2) {
		state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821", nextState:"unlocking"
		state "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff", nextState:"locking"
		state "unknown", label:"unknown", action:"lock.lock", icon:"st.locks.lock.unknown", backgroundColor:"#ffffff", nextState:"locking"
		state "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#79b821"
		state "unlocking", label:'unlocking', icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff"
	}
	standardTile("lock", "device.lock", inactiveLabel: false, decoration: "flat") {
		state "default", label:'lock', action:"lock.lock", icon:"st.locks.lock.locked", nextState:"locking"
	}
	standardTile("unlock", "device.lock", inactiveLabel: false, decoration: "flat") {
		state "default", label:'unlock', action:"lock.unlock", icon:"st.locks.lock.unlocked", nextState:"unlocking"
	}
	valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
		state "battery", label:'${currentValue}% battery', unit:""
	}
	standardTile("refresh", "device.lock", inactiveLabel: false, decoration: "flat") {
		state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
	}

	main "toggle"
	details(["toggle", "lock", "unlock", "battery", "refresh"])
}

}

def parse(String description) {

log.trace description

def msg = zigbee.parse(description)
log.trace msg

def results = []
if (description?.startsWith('catchall:')) {
	results = parseCatchAllMessage(description)
}
else if (description?.startsWith('read attr -')) {
	results = parseReportAttributeMessage(description)
}

}

private parseReportAttributeMessage(String description) {

Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param ->
def nameAndValue = param.split(":")
map += [(nameAndValue[0].trim()):nameAndValue[1].trim()]
}

//log.debug "Desc Map: $descMap"
def results = []
if (descMap.cluster == "0001" && descMap.attrId == "0020") {
	log.debug "Received battery level report"
	results = createEvent(getBatteryResult(Integer.parseInt(descMap.value, 16)))
}
else if (descMap.cluster == "0101" && descMap.attrId == "0000") {
	log.debug "Received lock status"
	def linkText = getLinkText(device)
    
    if(descMap.value == "01"){
    	results = createEvent( name: 'lock' , value: "locked", descriptionText: "${linkText} is locked")
	}
    else if(descMap.value == "02") {
    	results = createEvent( name: 'lock' , value: "unlocked", descriptionText: "${linkText} is unlocked")
    }
        
}

return results

}

private getBatteryResult(rawValue) {

//log.debug 'Battery'
def linkText = getLinkText(device)
def result = [ name: 'battery' ]

def volts = rawValue / 10
def descriptionText
if (volts > 6.5) {
	result.descriptionText = "${linkText} battery has too much power (${volts} volts)."
}
else {
	def minVolts = 4.0
	def maxVolts = 6.0
	def pct = (((volts - minVolts) / (maxVolts - minVolts))*100)
	result.value = Math.min(100, (int) pct)
	result.descriptionText = "${linkText} battery was ${result.value}%"
}

return result

}

private Map parseCatchAllMessage(String description) {

def results = [:]
def cluster = zigbee.parse(description)

if (shouldProcessMessage(cluster)) {
	switch(cluster.clusterId) {
		case 0x0001:
			results << createEvent(getBatteryResult(cluster.data.last()))
			break
	}
}

return results

}

private boolean shouldProcessMessage(cluster) {
// 0x0B is default response indicating message got through
// 0x07 is bind message

boolean ignoredMessage = cluster.profileId != 0x0104 ||
	cluster.command == 0x0B ||
	cluster.command == 0x07 ||
	(cluster.data.size() > 0 && cluster.data.first() == 0x3e)

return !ignoredMessage

}

def poll() {

log.debug "Executing 'poll'"
refresh()

}

def refresh() {

[
"st rattr 0x${device.deviceNetworkId} 0x0C 0x101 0", "delay 500",
"st rattr 0x${device.deviceNetworkId} 0x0C 1 0x20"
]

}

def updated() {

configure()

}

def lock() {

log.debug "Executing 'lock'"
sendEvent(name: "lock", value: "locked")
"st cmd 0x${device.deviceNetworkId} 0x0C 0x101 0 {}"

}

def unlock() {

log.debug "Executing 'unlock'"
sendEvent(name: "lock", value: "unlocked")
"st cmd 0x${device.deviceNetworkId} 0x0C 0x101 1 {}"

}

def configure() {

String zigbeeId = swapEndianHex(device.hub.zigbeeId)
log.debug "Confuguring Reporting and Bindings."
def configCmds = [	

    //Lock Reporting
    "zcl global send-me-a-report 0x101 0 0x30 0 3600 {01}", "delay 500",
    "send 0x${device.deviceNetworkId} 1 1", "delay 1000",

    //Battery Reporting
    "zcl global send-me-a-report 1 0x20 0x20 5 3600 {}", "delay 200",
    "send 0x${device.deviceNetworkId} 1 1", "delay 1500",

    "zdo bind 0x${device.deviceNetworkId} 0x0C 1 0x101 {${device.zigbeeId}} {}", "delay 500",
    "zdo bind 0x${device.deviceNetworkId} 0x0C 1 1 {${device.zigbeeId}} {}"

]
return configCmds + refresh() // send refresh cmds as part of config

}

private hex(value, width=2) {
def s = new BigInteger(Math.round(value).toString()).toString(16)
while (s.size() < width) {
s = "0" + s
}
s
}

private Integer convertHexToInt(hex) {
Integer.parseInt(hex,16)
}

private String swapEndianHex(String hex) {
reverseArray(hex.decodeHex()).encodeHex()
}

private byte[] reverseArray(byte[] array) {
int i = 0;
int j = array.length - 1;
byte tmp;
while (j > i) {
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
j--;
i++;
}
return array
}

private getEndpointId() {
new BigInteger(device.endpointId, 16).toString()
}

EDIT: This clearly isn't the right way to post driver code. Can anyway help a noob out and I'll fix it!

So I have been looking around for a combo Zigbee/Z-Wave repeater and the only device that seems to have that is the Iris 3210-L/L2 outlets, but when looking on the forums it seems that only a few of the firmwares, I believe 20085010 and 20115010, are really worth it for the devices. Since Iris is now, gone is there any way to update plugs to these firmwares? I saw that ST hubs can update some Iris products or is it possible to update through Arcus?

Not that anyone has found yet, to the best of my knowledge. Personally, I have eliminated Z-Wave from my home in favor of Lutron Caseta (for switches, dimmers, fan controllers and Pico remotes), and Zigbee (for motion, contact, temperature, humidity, and leak sensors). This has been a very stable combination for my specific needs.

Yeah, I am still in the setup/transition stages from a WiFi based non-hub Alexa smart home into Hubitat so I still do not have a ton of devices, but I needed a Zigbee repeater for my Hue motion sensor and Hue remote dimmer, and I needed a Z-Wave repeater for my August Pro smart lock. I figured I would look for a 2-in-1 solution is all.

In your eyes, what is the key differentiating factors between Zigbee and Z-Wave for you, like why have you avoided Z-Wave?

For me, my older GE Z-Wave (not Z-Wave Plus) switches and dimmers were prone to randomly stop responding for no obvious reason. I grew tired on those devices. That firsthand experience, along with all of the reports of users having Z-wave mesh network issues in general (not just on Hubitat, but on SmartThings, Wink, and other platforms as well), led to my decision to go all-in on Lutron Caseta. Lutron is to Siwtches, Dimmers, Fan Controllers, a Pico remotes what Philips Hue is to Zigbee bulbs. Both companies offer solid, reliable performance. Both charge a premium, but since I wanted home automation to be less hobby/tinkering, and more true Automation, I decided to go with Lutron. Best home automation hardware I have ever used. For me, worth every penny to set it up once, and have it work 100% of the time without any issues whatsoever.

Other users have reliable Z-Wave mesh networks, although most are probably happiest with all Z-Wave Plus devices.

I prefer Zigbee due to its simpler pairing/resetting process. Z-Wave's Inclusion/Exclusion process is a little finicky, IMHO. Also, Zigbee devices (like motion sensors and contact sensors) typically are much faster to report a status change. Thus, they make for faster lighting automations. I was able to buy a bunch of Lowes Iris v2 Motion and Contact sensors from a bulk seller on ebay. Getting these devices for about $5 a piece was a great deal.

1 Like

Thank you. So would you recommend getting the Iris v2 motion and contact sensors if I can find them or are other brands/products probably better places to look first?

I really like the Iris v2 sensors, however they are getting harder to find. A lot of folks are also very happy with the latest Samsung/SmartThings Motion and Contact/Multi sensors. Some like the Nyce sensors as well. I would avoid the Aqara/Xiaomi sesnors, as these are not Zigbee HA1.2 standards compliant devices, and they tend to drop off the network. Also, I recommend Sengled Zigbee bulbs, if you decide to add smart bulbs to your system. Sengled bulbs are not Zigbee repeaters, by design, so they do not screw up your Zigbee home automation mesh network (I personally avoid old GE and Cree bulbs, as well as Osram/Lightify bulbs due to the problems they are know to cause.)

https://www.amazon.com/Samsung-SmartThings-GP-U999SJVLBAA-Optional-Automated/dp/B07F8ZHBLS/ref=sr_1_2?crid=4W96JM84UO33&dchild=1&keywords=samsung%2Bmotion%2Bsensor%2Bsmartthings&qid=1586025430&sprefix=Samsung%2BMotion%2B%2Caps%2C137&sr=8-2&th=1

and

https://www.amazon.com/Samsung-SmartThings-GP-U999SJVLBAA-Optional-Automated/dp/B07F956F3B/ref=sr_1_2?crid=4W96JM84UO33&dchild=1&keywords=samsung%2Bmotion%2Bsensor%2Bsmartthings&qid=1586025430&sprefix=Samsung%2BMotion%2B%2Caps%2C137&sr=8-2&th=1

3 Likes

Do you use Zigbee repeaters, or do you just have enough devices to provide a stable mesh? If you do use repeaters which ones would you recommend? I've heard good things about the Iris outlets, reason why I bought them, but I also have some of the IKEA Tradfri Signal Repeaters coming in the mail. Do you have any experience using those?