[RELEASE] Petsafe Smart Feeder Integration

After Petnet pretty much went belly up I needed a new smart feeder for my cats. I decided to go with the Petsafe. It's already been much more reliable and just works a lot better. Of course that meant I needed an integration for HE, so I built one (leveraging some samples from Dusty Greif who built an integration for HomeBridge). It will let you do an instant feed and also has notifications built in for feeding, errors, and low/empty food. It also tracks the battery if you have the battery backup installed.

You can find it on Github at https://github.com/dcmeglio/hubitat-petsafe

It will be available in HPM shortly. Hope someone finds it useful!


Is this the Petsafe that you are using?

I have a few questions about it, as I'm currently searching for a solution too.

How are you finding it?
How is the Hubitat integration?
Does it store scheduling locally, in case of network disruption?
Thanks :slight_smile:

I like it. The device is well built. It has a conveyor belt system instead of an auger. As a result I have never had a single jam (my old Petnet feeder jammed all the time). If I could change one design element it would be the metal bowl. It's a nice stainless steel bowl, but when the feeder runs the sound of the food "pinging" against it is loud and wakes me up. A plastic one would be cheaper and quieter. Only other complaint is it is cloud based, I wish it were local so I didn't have to depend on the internet and their servers for my notifications.

Works pretty well, I have a couple tweaks I need to make. Recently I didn't get a notification that I was low on food... need to figure out what didn't work.

Yup. It also has a battery backup using D batteries in case power is out too.

1 Like

You could print one with a 3-D printer.

Could. But I don’t have a 3D printer :grinning:

Awesome, thanks for the feedback!

1 Like

@dman2306 I just installed this app and am getting groovyx.net.http.HttpResponseException: Bad Request on line 395 (prefDevices) when I try and enter the 6-digit code.

Any ideas on how I can get around this please?

I think you included the - ? Try it without that. @kbo5000 if that doesn't help, let me know and we can try to find a time to troubleshoot together.

Thanks. Yes, I tried with and without the hyphen/space - still no luck.
I initially set it up via the SmartFeed Android app, do you think that could be causing a conflict with the code?

I'm in Western Australia, but available most daylight times here (GMT+8).

EDIT: Nevermind, I checked my emails and it seems that each time I tried the code with a hyphen, I hit 'Done' to go back an attempt the same code without one - this act of going back actually issued a new code, and I didn't realise. I entered that new code sans hyphen and it appears to have added the feeder. Will let you know how it goes :slight_smile: Thanks!

@dman2306 Looks awesome! I am just wondering how to integrate the 'push' control onto my dashboard - would I need to use a virtual button/switch?

Also, how are the others (setConsumableStatus and setSchedule) utilised?
What command would I need to enter to action these?

Sorry, I'm a bit of a coding noob.

No coding involved. Just add a button template tile to your dashboard:

As far as setConsumableStatus, not sure why you'd want to do that? If food is low, why would you manually want to change the setting to say it isn't? You need to add more food. Same with set schedule? I'd need more information on what you're trying to accomplish with that one. You want to be changing the schedule for the feeder from a dashboard?

Not sure what I was doing wrong there, but through a bit of trial and error, I eventually got it working. I think deactivating and reactivating child lock did it...

I was more curious what those functions did. I wasn't sure if I needed to set a data point for the low status to work, or if I could change the scheduling through Hubitat rather than the phone app.

Not necessarily a dashboard, but I assume your comment means that any schedule changes would need to happen in the Smartfeed app? I'm okay with that, just seeing what I can and can't do within Hubitat

Also, do you have any suggestions for having the feed status trigger a virtual switch? I have a virtual switch on my dash that I toggle for manual feeds (sometimes they get wet food), and through RM, I am notified only IF that switch is not on by a certain time each day.
I'm not too interested in getting the notifications for the feed, only if they are not fed.
As you mentioned the notifications are cloud dependant, would that mean that I can only turn them on/off?

Nope. You should be set!

You can. You pass JSON to the setSchedule command. You can see an example here GitHub - dcmeglio/hubitat-petsafe

Sounds like you’re suggesting an event that fires when a feeding happens. Then you could set RM to trigger a virtual switch when that happens. If not triggered you could do just like you are for manual feedings. It doesn’t have that at the moment but I could definitely add something probably this weekend.

1 Like

That would be amazing, and exactly why this community is so inspiring. Thank you :slight_smile:

@kbo5000 Been testing the change for a few days. Seems good. I’ll push it out tomorrow.

1 Like

Update is available now.

1 Like

Hey thanks for that!
How is the numerical value used, is that hours/mins since last feeding or the time of actual feeding?
Just looking on how to pull the data to use in RM

It’s an epoch timestamp in milliseconds. Looks like someone was just asking about this, How to do a Unix timestamp in a variable in rm4.0?

Most of that went way over my head.
That situation calls for a separate (power) trigger event, then adjusts the timestamp as required.
I don't know how to make a trigger event out of the timestamp.

Do I need to create a 'current time' variable in some way, as they did in that thread, and calculate whether current time is the same as the last feed time, if so then turn virtual switch on?
What if the feeding doesn't happen at the exact time I specify.

I'm very confused by this timestamp thing and how to implement it into my logic.
I'm just trying to turn a switch on each time the event happens. I have another RM rule to reset the switch at certain times through the day, and another to notify if the switch hasn't turned on by a certain time. Perhaps I am oversimplifying or overcomplicating it.

Something like this?: