This project should be the dumbest, simplest thing in the world. Share a binary state with another location, let that location share a binary state back. I could've gone analog and just set up a light or a flag or something, but it just felt like this should be a little device that doesn't require anything but electricity that just communicates state quietly and discretely from point to point.

In a perfect world, I'd also like a "request" state that says "hey, you may have forgotten to set your state, can you look? if your dogs are outside, can you bring them in so I can let mine out?". 

I couldn't find a product that just does this, so I tried using some simple home automation stuff I had sitting around.

The first iteration of this project attempted to use TP-Link Tapo buttons https://www.tapo.com/en/product/smart-switch/tapo-s200b/ and a basic wifi plug https://www.tp-link.com/us/home-networking/smart-plug/smart-outdoor-plug/ and a fun light which I weirdly found for cheap at home depot: https://nmteaco.com/Solar-System-Night-Light_p_3382.html?p=20



Boy, would that have been nice if it worked. Although it sorta worked, sometimes presses would be missed, and the Tapo buttons don't have any state indicator so if you press it and it fails, you have no way to know. It failed a LOT.

So I decided to go custom:

  1. https://www.amazon.com/dp/B0D3DPLFL8 - ESP32 with build in 8x8 display
  2. https://www.amazon.com/dp/B07SJRX7JL?th=1 - switch with LED



The next question was how to have them communicate. My neighbor and I don't share wifi, so I wanted something that was infrastructure free. That's when I found out about ESPNOW. https://www.espressif.com/en/solutions/low-power-solutions/esp-now

It's honestly super cool. It's just point-to-point radio between two esp32s. It's not great on getting through walls, but it's good enough for neighbors!

The switch confirms the current state both physically and with the LED, and the state is synced between each device.

You have to push two separate copies of the firmware in, letting each device know the other device's mac address. You could probably code around this by just defining a mac address group or something, but this was the easiest for point-to-point. 

And, of course, I couldn't resist making the world's worst wooden case by laser cutting layers of wood and stacking them.

Some things I'd love to see improved on this one day

A Request Feature

It'd be amazing to have one extra button that causes both devices to flash a notification state which would mean "bump - can my dogs come out?". I don't feel like getting into the hardware right now, but this would help mitigate a common user problem where we forgot to flip the switch off. Alternatively, maybe switching back to some sort of timeout option would work, but that can be tricky. A real solution might be presence detection, but this is already over-engineering things.

A Better Case

The cases I made are, admittedly, a little embarrassing, but they add a personal touch. I know a good 3d printed case would be way better, but this is fine for now.

Advanced Software Features

Some advanced features that I think would be cool would be:

  • a web UI to config the devices
  • grouping - i.e. reconfigurable state management for pub/sub among a larger number of devices - you'd probably need to add some sort of logical conditioning on this, but it would let a group of neighbors sharing an area have something like "if any dogs are out, everyone's signals are on". this would complicate the "Request" feature as you'd want to request to the person whose state is active. at some point, this is just a different product
  • configurable timer/timouts
  • audio notifications (that can be disabled)

The weird thing about this problem is how much it's a UX question of what the easiest thing to do is. I think I've landed on the right level of simplicity here, but it's easy to imagine ways to make it even easier.

Better Signal Management...

Read more »