Skip to content
Brad edited this page Apr 14, 2016 · 13 revisions

This is doorbell which is a doorbell.

Doorbell runs on a BeagleBone Black which is connected to a button, a USB Audio device, and a Russound whole-house audio system. When the button is pressed, the whole-house audio system's configuration is saved, changed to "doorbell mode", an audio file is played, and finally the audio system's configuration is restored.

The module of doorbell that controls the whole-house audio system is called rnet which is also the name of the serial protocol used by the Russound system. The rnet program may be used outside of the doorbell application. Rnet documentation

Construction

Here's how to wire this thing:

The push button is connected to an input pin on the BeagleBone through a simple low pass filter.

Installation

To make the doorbell program start automatically when the BeagleBone is booted, perform these steps:

cp doorbell.sh /usr/bin
chmod u+x /usr/bin/doorbell.sh
cp doorbell.service /lib/systemd
cd /etc/systemd/system/ 
ln /lib/systemd/doorbell.service doorbell.service
systemctl daemon-reload 
systemctl start doorbell.service 
systemctl enable doorbell.service

Remote Doorbells

I'm working on a way to activate remote bells. This will use SSDP (actually just the GENA part) to indicate when the button is pressed. A NOTIFY packet is sent by the button detector with an NT header of 'doorbell' and and NTS header of 'doorbell:ring'. The remote ringer is a Raspberry Pi connected to an amplified speaker running a program waiting for that notification. When one is received, a sound file is played.

Ideas:

Without any parameters, the ssdp program will listen for notifications.

Perhaps the ssdp program should accept a configuration file that maps notification type/subtype pairs to programs/scripts to run. Alternatively, it could just run a specific script passing the NT, NTS, and other headers as parameters. This script could be edited to check the notification types and then perform the appropriate action.

The ssdp program is also used to send a notification. To ring the doorbell, this command is used:

ssdp notify doorbell doorbell:ring

In this case, the NT header is set to doorbell and NTS is set to doorbell:ring.

NOTE: I should think more about how I use the NT and NTS headers... According to GENA both values are a URI and the NTS header is optional (while the NT header is not). Perhaps I should come up with a scheme like "home:" to use for all of my notification types, and maybe I don't even need to use NTS all the time. The doorbell button could just generate NT: home:ring-doorbell.