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.

A four-panel collage of cats in various settings: top left shows a black cat with yellow eyes wearing a red collar sitting indoors by a window; top right shows a cream-colored cat with a pink heart-shaped tag; bottom left shows a tabby and white cat lying on a colorful rug; bottom right shows two long-haired cats sitting together outdoors.

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.

A smart home dashboard for managing cats and their accessories. The interface displays the presence of four cats (Lily, Linus, Mac, and Polly), cat door status showing one cat outside, feeder information, and litter box status for two automated litter boxes with battery and waste levels.

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.

Security camera footage from a cat door showing a laundry room or utility space with a white cat door flap in the center of a dark door, surrounded by household appliances, storage items, and a window with bright light streaming through it.

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.

A security camera view of the upstairs hall: a white litter robot beside a low shelf holding a planted aquarium, framed artwork on the wall behind it, and a Roomba is on the wood floor mid-hall. Timestamped August 5, 2026 at 9:02 a.m.

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.

Pet tracking dashboard showing details for a cat named Lily and her flea collar. Left panel displays Lily's information including age (7 years 3 months), weight (8.8 lb), and activity metrics. Right panel shows the Flea Collar status and a location history timeline with timestamps indicating Lily's movements between home and away locations on August 4-5, 2026.

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?

  • GreatWhiteBuffalo41@slrpnk.net
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 days ago

    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 😭

  • surewhynotlem@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 days ago

    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.

  • limelight79@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 days ago

    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?

  • magnue@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 days ago

    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.

  • Grimy@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 days ago

    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.

  • TheMadCodger@piefed.social
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 days ago

    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?

    • michaelharley@infosec.pubOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 days ago

      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?

        • michaelharley@infosec.pubOP
          link
          fedilink
          English
          arrow-up
          0
          ·
          2 days ago

          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: false
          

          The 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 .storage instead 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 Alert
          

          I 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-info
          

          Mine 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-info
          

          I compare against today_at('00:00') instead of now(). With now() 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_alert
          

          And 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. _expired flips on when the date passes so it gets read out in our good morning announcement, and dismiss_ 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.

          • TheMadCodger@piefed.social
            link
            fedilink
            English
            arrow-up
            0
            ·
            2 days ago

            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.