I have a Eufy Video doorbell that does a great* job with push notifications, 2K video streaming, and providing basic doorbell functionality; all without a monthy subscription. It comes with a basic 433MHz chime that you can pair and put anywhere in your house. This doesn't really work well with a two story house... it is no where near loud enough to hear it upstairs.
* Despite notifying me that the tree in my front yard is a person when it is windy enough.
Everything in our house is "wired" together through an instance of Home Assistant. We also have Sonos speakers in pretty much every room. The solution seems obvious: make HA play a noise through Sonos. This would be easy if Eufy exposed any kind of consumer facing API... but alas they do not.
Note: There is a bunch of random, unsupported information about the API and MQTT out there. If there is one thing that I have learned from my day job, it is that internal API design is fast, loose, and can change at any moment. Relying on this is not something that is likely to remain working long term.
The idea is pretty simple: Listen in on the Doorbell -> Chime radio comms and push messages to an MQTT topic. Once there we can leverage the existing NodeRed and HA setup to do the Sonos magic.
I am going to include Amazon links because that is likely the most consumer friendly option. Feel free to buy your heart out on Aliexpress if you have the patience to wait.
-
1x NodeMCU
- These are super handy little ESP8266 boards with decent I/O and (more importantly) a WiFi chip.
-
1x RXB6 433Mhz Superhet Reciever
- This is likely overkill, but the concepts of Superheterodyne recievers have always been cool to me... sooo it's worth the $5 to me.
- If you want to learn more about superhet radios, Technology Conncetions has an awesome video. His channel is also really cool in general, you should check it out.
-
- You could also just use a wire twisted around a pencil. I wanted something compact because my eventual plan is to encase this and hide it somewhere.
The NodeMCU runs at 3.3V and the RXB6 runs at 5V. Luckily, the NodeMCU has the circuitry to convert 5V to what it needs, so you can power the NodeMCU over USB (which typically provides 5V power) and run the RXB6 off the Vin pin.
Wiring Diagram | Breadboarded Design
Unless I am doing WLED stuff, I tend to always flash my NodeMCUs via the Arduino IDE. You can get a copy here if you don't already have it.
If this is your first NodeMCU/ESP8266 project, you will need to add the ESP8266 Board Manager to the IDE using these instructions.
You will also need to add a few libraries to the Arduino IDE:
- PubSubClient for publishing messages to MQTT
- RCSwitch for talking to the RXB6
Note: If you haven't installed Arduino libraries before, download the ZIP files from GitHub and load them in via Sketch > Include Library > Add .ZIP Library
.
Once you have all of this installed, you can connect your NodeMCU via USB. Go to Tools > Port
and select the USB device for your NodeMCU. Then, set the board type to Node MCU 1.0
via the Tools > Board > ESP8266 Boards
menu.
Press and hold both the RST and Flash buttons, let go of the RST button and after a single flash of the LED, then let go of the Flash button.
Load the program below into the Arduino IDE, fill in the variables, and hit the Upload button (the right facing arrow at the top). This will compile and load the program onto the NodeMCU.
Load the serial monitor (from the Tools menu) and set it to 115200 Baud. As the NodeMCU starts up, you will see it connecting to your WiFi network, getting and IP address, and attempting to connect to your MQTT broker.
We aren't done yet though. We need you figure out the code your doorbell is sending out to the chime. Once everything has booted (the broker has printed it's connected message), you should be able to press your doorbell and have a message appear in the console. If nothing shows up, make sure you have wired everything correctly.
Unknown signal received!
Received XXXXXX / 24 bit Protocol: 1
Take the XXXXXX
portion and set the doorbell_id
variable at the top of the program. Re-upload the program and let it boot. This time presing your doorbell should result in a "Ding Dong!" message and should publish a message to the MQTT topic.
I have included my NodeRED flow JSON below. You will likely need to modify the names and entity regex(es) but it should give you a pretty good jumping off point.