I’m a big Home Assistant fan and power user. It’s the home automation platform of choice in our house and I’ve added many devices and automations, sometimes to the chagrin of Rachelle.
We also have five cats so it only makes sense to use some automations to help manage all the cat chores.

Top row: Lily and Mac. Second row: Linus, Lennie and Polly.
The dashboard
To help me stay organized and visualize all the cat automations and functionality, I’ve created a cats dashboard. Let’s walk through the dashboard, and I’ll explain as we go.

Cat door
Our cats are indoor/outdoor cats and we have a SureFlap Microchip Cat Flap. This thing talks to a little Sure Petcare hub in our living room, and that hub is what connects to Home Assistant. It’s Cloud Polling, which isn’t the best but when I was shopping, I couldn’t find one with better local connectivity.
It allows us to use Home Assistant to lock the door when needed so the cats can’t go out. Home Assistant does this on a schedule. It’s open during the day but prevents the goblins from leaving after sunset.

We have a little Unifi G3 Instant camera pointed at the cat door so we can see who’s coming and going and fiddling around at the door.
All of our cats have a microchip and it uses this chip ID to only allow our cats in. That means no neighborhood cats or raccoons can use the door, thank you please. We also get presence reporting so we can generally see who’s in, who’s out and when they transitioned.
Automatic feeders
We have Aqara Smart Pet Feeders that we use to dispense breakfast and snacks. They’re zigbee devices so they connect directly to Home Assistant and are fully local. No Aqara app needed for any part of it. These are pretty basic devices and I wish it could alert us on food level but alas, they simply dispense. The automatic feeders hit at 6 a.m., a time I set from a tile on the dashboard rather than hardcoding it. Cats go scattering every which way to get their spot at a feeder.
Litter boxes
We have two Litter Robot 4s we purchased used from Facebook Marketplace. They’re Cloud Push, which means the internet has to be up for these to work correctly with Home Assistant (or I presume the Whisker app). This thing allows us to unlock a couple of fun automations.
Voice announcements when a Litter Robot is full
When a litter box is full, Home Assistant announces it over the speakers: “The black litter robot is full and needs to be emptied.” Then when we’re up there, we pull the bag of dirty litter and reset it. If it needs a top off, we do that too. With two litter boxes and five cats, we can go a few days before one of them needs to be emptied! Not bad.
Send the robot vacuum after a cat has used the robot litter box
This is probably one of my favorite automations. Home Assistant can detect when a cat uses a litter box, which allows us to trigger automations to send the Roomba to spot clean the litter box area. We gate when the vacuum can run as we don’t want the thing running during the middle of the night if a cat goes to the bathroom.

Lennie is an especially messy litter box user so this has been a great automation.
Helpers and trackers
So there are several helpers and trackers we use to keep up with everyone’s different dates and things and such.
- Flea collar: We use Seresto flea collars and they need to be replaced about every 8 months. I set up a helper to track this so it announces it in the good morning announcement message when it’s due.
- Age: Based on their birthday!
- With Us: Based on their gotcha date!
- Yearly Vaccines: I’ve not built this yet but I plan to also track when each cat received their vaccinations so I can remember when it’s time to reschedule.

Improvements
Cat door
I purchased the wrong cat door. When we first purchased it, we had Oliver and he was a bigger boy and I was skeptical he could fit through the smaller door. The problem is the larger door is all or nothing: locked or unlocked, for everybody. The smaller flap they sell can be set per cat. That would have been helpful in the past when someone was sick or wasn’t confident using the cat door yet and we were going to be away. We could restrict the kitten or the sick kitty while letting the rest come and go as usual.
Automatic feeders
I wish the Aqara feeders reported food levels instead of just dispensing. I also wish the automatic feeders were the chip variety and allowed us to restrict certain feeders to only certain cats. Linus likes to go around and finish off everyone else’s bowls.
Water fountains
We purchased an AquaPurr fountain but have never fully installed it. We had it in one of the bathrooms but disconnected it. My plan is to move it into the guest bathroom then hopefully we can stop fiddling with these little plastic filter ones. This thing doesn’t connect to anything but it would be super nice to eliminate the water fountain clean chore.
Conclusion
So that’s it! Thanks for reading this. Do you have any smart home automations that you especially like?
It’s rare I read a post and think GOALS! Lol. I miss having an automatic litter box but even with a ramp in their old age my cats are now refusing to use it so I gave it to my ex. Regular poop scooping for me 😭
I love this.
Have you considered using Bluetooth or NFT sensors and trackers in the collar to keep tabs on them?
I was thinking of setting up something like that so my home knows where I am and can act accordingly, but I don’t know where to start.
I don’t have anything automated for our cats (and dog).
For the cats, we use the flea and tick treatment that goes on the back of their necks every thirty days, so I have a timer set up to remind me to do that (along with giving the dog his heart worm and his own flea and tick treatment).
There a timer to remind me to clean their recirculating water bowl.
For their dry food, I have a system that tracks how many bags I’ve opened since the start date, then divides that out to get an average of how long a bag lasts. This is helpful when figuring out the length of time between autoship orders of food. Bags are sold by weight, but we give them food measured by volume, so it doesn’t easily convert. It takes a few bags for the measurement to settle down to a rough estimate of the number of days, but it did work after that. Just have to remember to hit the new bag button.
One of our cats uses an inhaler with a counter on it, so I use a helper to track when I last administered it and what the counter was at. The great thing about that is that I can detect easily if I missed the treatment or if I did it and just failed to hit the button in HA. Another of the same cat’s treatments (he’s old) requires ordering medicine roughly once a month, so I track when I start a new one, then add a to-do when it’s time to reorder.
We have four litter boxes for the three cats, and I change two of them each week, and scoop the other two (well, I scoop all four each evening, but two are changed once a week, while the other two get scooped at that time). I track what dates each one was changed last so I know the following week which ones are due. I tried remembering, and it didn’t go well. The helpers remind me.
I would like a way to detect where the cats are in the house. Two of them do not wear collars. In particular I’d like to be able to determine whether our skittish cat (no collar) is hiding under the bed in our bedroom or not (I just want to know where he is when it’s feeding time). Would a presence sensor under there do that?
I use frigate+ to give me notifications when I see a cat. Gives me a pretty good idea of what’s going on at a glance.
Just a thought but you could drill two holes in the automatic feeder and slip in an Hc-sr04 with an esp-32. It’s an ultrasonic sensor, it could measure the depth of food and signal you when it’s going low.
It might seem daunting but these things are a lot easier to use these days, lots of info online and it can be connected to your home assistant set up.
I love this, thanks for sharing! What are you using on the pet dashboard to count up from their birth and gotcha dates? Also the flea collars reminder/reset?
Thanks! Both are the same trick: an input_datetime per cat, and a Mushroom template card doing the math inline in Jinja. No custom integration.
The collar card colors off days remaining, and the reset button runs a script that pushes the date out and clears the alert flags.
Want the YAML?
Yes, please!
Happy to! I’ll do Lily, since it’s the same block copy pasted five times, once per goblin.
Fair warning: I’m not a developer and there’s almost certainly a tidier way to do all of this. It works though, and good enough is good enough.
The helpers
All of this is built on helpers, the ones under Settings > Devices & services > Helpers. Birthday and gotcha date are each a date/time helper set to date only, no time. I keep mine in
input_datetime.yaml, but making them in the UI gets you the exact same thing:lily_birthday: name: Lily Birthday icon: mdi:cake-variant has_date: true has_time: false lily_gotcha_date: name: Lily Gotcha Date icon: mdi:home-heart has_date: true has_time: falseThe collar needs three more: one date/time helper for the expiration date, plus two toggle helpers that my alert automation flips on and off. I made these ones in the UI so they live in
.storageinstead of a file, but here’s the shape:# input_datetime lily_flea_collar_expiration: name: Lily Flea Collar Expiration has_date: true has_time: false # input_boolean lily_flea_collar_expired: name: Lily Flea Collar Expired dismiss_lily_flea_collar_alert: name: Dismiss Lily Flea Collar AlertI left
initial:off all of them on purpose. If you set it, the next restart resets the helper back to that default and throws away whatever date you actually put in. Took me a restart or two to work that one out.Age and With Us
These two are Mushroom template cards on the dashboard (Mushroom is a HACS install if you don’t already have it). Add a manual card, hit “Show code editor” and paste. It’s the same card twice, just pointed at the other helper:
type: custom:mushroom-template-card primary: Age entity: input_datetime.lily_birthday icon: mdi:cake-variant icon_color: blue secondary: >- {% set b = state_attr('input_datetime.lily_birthday','timestamp') %} {% set by = b | timestamp_custom('%Y', true) | int %} {% set bm = b | timestamp_custom('%m', true) | int %} {% set bd = b | timestamp_custom('%d', true) | int %} {% set months = (now().year - by) * 12 + (now().month - bm) - (1 if now().day < bd else 0) %} {% set y = (months // 12) | int %} {% set mo = (months % 12) | int %} {%- if y > 0 %}{{ y }} yr{{ 's' if y != 1 }}{% endif %} {%- if mo > 0 %}{{ ' ' if y > 0 }}{{ mo }} mo{% endif %} {%- if y == 0 and mo == 0 %}new{% endif %} · {{ b | timestamp_custom('%b %-d, %Y', true) }} tap_action: action: more-infoMine reads
7 yrs 3 mo · Apr 2, 2023.One thing worth calling out: counting whole months first and then dividing by 12 avoids the leap year drift you get from dividing days by 365.
The collar card
Another template card, this one reading the expiration helper. It’s what goes green, orange, red as the days run down:
type: custom:mushroom-template-card primary: Flea Collar entity: input_datetime.lily_flea_collar_expiration icon: >- {% set ts = state_attr(entity,'timestamp') %} {% set days = ((ts - as_timestamp(today_at('00:00'))) / 86400) | round(0) | int %} {% if days < 0 %}mdi:alert{% elif days <= 30 %}mdi:alert-outline {% else %}mdi:shield-check{% endif %} icon_color: >- {% set ts = state_attr(entity,'timestamp') %} {% set days = ((ts - as_timestamp(today_at('00:00'))) / 86400) | round(0) | int %} {% if days < 0 %}red{% elif days <= 30 %}orange{% else %}green{% endif %} secondary: >- {% set ts = state_attr(entity,'timestamp') %} {% set days = ((ts - as_timestamp(today_at('00:00'))) / 86400) | round(0) | int %} {% if days < 0 %}Expired {{ days * -1 }}d ago{% else %}{{ days }}d left{% endif %} · {{ ts | timestamp_custom('%b %-d, %Y', true) }} tap_action: action: more-infoI compare against
today_at('00:00')instead ofnow(). Withnow()the count flips over at whatever time of day I happened to put the collar on, so it’d read a day short all afternoon. Little thing, but it bugged me.The reset script
This part isn’t a card, it’s a script. Settings > Automations & scenes > Scripts, create one, then use the three dot menu to edit it in YAML. Mine lives in
scripts.yaml:reset_lily_flea_collar: alias: Reset Lily Flea Collar description: Sets Lily's flea collar expiration to today + 7 months and clears alerts icon: mdi:cat sequence: - action: input_datetime.set_datetime target: entity_id: input_datetime.lily_flea_collar_expiration data: date: "{{ (now() + timedelta(days=213)).strftime('%Y-%m-%d') }}" - action: input_boolean.turn_off target: entity_id: input_boolean.lily_flea_collar_expired - action: input_boolean.turn_off target: entity_id: input_boolean.dismiss_lily_flea_collar_alertAnd the button that fires it, which is one more template card back on the dashboard:
type: custom:mushroom-template-card primary: Reset Collar secondary: Expiry 7 months out entity: script.reset_lily_flea_collar icon: mdi:restart tap_action: action: perform-action perform_action: script.reset_lily_flea_collar confirmation: text: Reset Lily's flea collar expiration to 7 months from today?The confirmation is in there because I tap this on my phone and I have fat fingers.
Those two
input_booleans are for my alert automation._expiredflips on when the date passes so it gets read out in our good morning announcement, anddismiss_shuts it up once I’ve actually heard it (otherwise it just keeps announcing it, every single morning, forever). If you’re not doing alerts you can drop those steps and the helpers along with them.Hope that helps! Let me know if something doesn’t work, I probably typed something wrong. Are you tracking vaccines too? That’s the one I still need to build.
Wow, thanks for the incredibly detailed response! Twas more than I was expecting, but super helpful nonetheless. Related tangent, I wrote a few micro-stories called the Goblin’s Tale about mine. More like the text to a comic than a story, I guess. Her name is Lizzy: one part Lizzy Bennett from Pride and Prejudice, one part Lizzy Borden, the axe murderer. You probably understand. But it did make it rather easy to adapt your scripts from Lily’s name.
But at any rate, I got it all working without too much trouble. If you’re not a developer, how did you write all that? I only just started learning python (my first language) so I understood a fair bit of what was going on, but that definitely takes some knowledge to come by.
I’m not tracking vaccines yet, but now that I have these, I’m going to. As well as figure out combining your alert mechanism with notifications. I can do a triggered notification, but I don’t have anything currently set up to check on a daily basis.
Access control on a cat door is very cool!
That’s fantastic. I’m taking notes for if/when I get a cat again.




