Keeping up with my cat's πŸ’© using a RaspberryPi

Fernando - May 23 '23 - - Dev Community

As a former dog owner and first time cat dad I was amazed at how cats are "potty trained" practically from birth. I was prepared to deal with the smell when having to clean the litter box. However, I didn't expect their bowel movements (πŸ’©) to carry a punch that would stink up half my apartment.

This might not be the case for everyone, but certainly for me, with an indoor cat in a 2 bedroom apartment without a naturally ventilated place to keep her litter box.

The hero/villain of the story

Her name is Dua and she is a cuddly & playful rescue tortie cat. Dua loves to play with her mouse toys and adores wet food, the latter of which is likely the reason I'm writing this post πŸ˜΅β€πŸ’«

Dua sitting on a puff sofa

I have her litter box in my second bathroom's shower. The bathroom has an extractor fan that runs when the bathroom light is on, but she refuses to hasn't figured out how to turn it on and off each time she goes #2... Annoying, right?

Automating the extractor fan

To mitigate the smell I wanted the lights to turn on when Dua goes in her litter box. To do this I put together a few things:

The software that calls the webhook (which in turn triggers the Alexa routine) can be found here:

GitHub logo fdocr / pir_trigger

Script that connects a PIR Sensor to a webhook

PIR Trigger

Script that connects a PIR Sensor to a webhook.

Usage

Clone the repo in a folder, install dependencies and then run in background

# Install requirements
pip install -r requirements.txt

# Run in background
# TODO: Find/Document a better way to do this
TRIGGER_URL="<webhook_url>" python main.py &
Enter fullscreen mode Exit fullscreen mode

Otherwise add TRIGGER_URL = "<webhook_url>" to an .env file and the script will pick it up.

The script writes its own PID to pid.txt so it can be used. Examples:

# Follow output of background process
tail -f /proc/$(cat pid.txt)/fd/1

# Kill process
kill -9 $(cat pid.txt)
Enter fullscreen mode Exit fullscreen mode

Sensor to board connections

Cable diagram here

The script was inspired by this Raspberry Pi Foundation article and uses their suggested example layout. The sensor needs 5v (Vcc) and Ground (Gnd), so PIN 2 and PIN 6 work well. Connect the sensor's output (Out) to…

It works!

Here's what the hardware looks like in action

RPi and motion sensor

RPi and motion sensor

Awful quality GIF of our hero/villain

Awful quality GIF of our hero/villain

πŸ’© Stats

With all of this in place I went a step further and added Opentelemetry to track the stats of how often the routine was being triggered on Honeycomb.

I wanted to know if I was turning on the bathroom lights over false positives from the motion sensor, but after some tests it simply serves the purpose of telling how often she goes in her litter box.

Last 7 days πŸ’© activity

Last 7 days πŸ’© activity

Last 24 hours πŸ’© activity

Last 24 hours πŸ’© activity
Β 

Interestingly, I can tell she goes in her litter box (# of motion sensor triggers) on average ~8.5 times per day. I don't think many cat owners can say they know this about their feline friends. I do remember and took inspiration from Aaron Patterson doing something similar a long time ago though.

Anyways, that's it. Pura vida!

. . . . . . . . . . . . . . . . . . . . . . . . . . . .