Introduction: Internet-facing Downton Abbey Bell

About: A mechanical man, workin' his mechanical plans.

My wife and I loved watching the Downton Abbey series. So much so that after it ended, we purchased an actual servant’s bell from the supplier to the TV production.

Being a maker, my servant’s bell must cast off the fetters of pulleys and cords. Why not have an embedded webserver that receives “ring” requests from the Internet? Then I could ring it whenever I have an urgent e-mail, there is another sale on my web storefront, or my wife would simply like some tea.

The possibilities seem endless for this whimsical mode of notification.

Step 1: Acquire a Servant’s Bell

After laying out $215 (US) to Antique Doorbells of Leintwardine, Shropshire, UK, and a bit of a wait, we received our own (Mister-Carson-would-approve) servant's bell (the battery-powered shaker version).

http://antique-door-bells.com/electric-doorbell.html

The first step, then, is to acquire one’s own servant bell. If you’re Julian Fellowes, you probably already have an original from the series (and well done, sir!) For the rest of us, try Antique Doorbells or check on-line for used hardware.

Step 2: Build the Webserver

Let me introduce the Adafruit HUZZAH ESP8266 Breakout. This small $10 board includes a self-contained system-on-a-chip with integrated TCP/IP stack and Wi-Fi capability. It has almost everything one needs to build a webserver to field ring requests from the Internet. All I needed to do was add a few parts for a relay trigger circuit, plus a project board/case and a power supply.

https://www.adafruit.com/products/2471

What is more, this board is programmable using the Arduino IDE. I highly recommend you take a look at Adafruit’s excellent tutorial on the HUZZAH.

https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/overview

See the attached circuit diagram. The circuit uses HUZZAH GPIO pin 13 to trigger a relay, which runs the shaker motor that rings the bell.

Step 3: Load the Webserver Program

I followed Adafruit’s tutorial instructions on preparing the Arduino IDE to program the HUZZAH.

https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide

Then I created the attached code, compiled it and then uploaded it to the board using the IDE. Note that one will have to change the hard-coded Wi-Fi login values for their own home network, should they use this code.

Step 4: Configure Home Network

My home network is very similar to most people’s: I have a router/firewall that is assigned a dynamic IP address by my ISP. To receive ring requests on my home network from the Internet, it requires a domain name. Thus, I signed up with a Dynamic DNS (DDNS) service, picked a domain name for my home network, and then configured my router to do DDNS updates. Now, whenever my home network’s public IP address changes, my router will notify the DDNS service, which will then update the domain name routing.

Next, I gave my webserver a fixed IP address on my home network. I found the webserver in my router’s DHCP “currently connected devices” list and then manually assign its IP address. In this way, the webserver will always receive the same IP address every time it connects to my home network using DHCP.

Finally, I configured the router port forwarding list to forward TCP traffic on port 51235 to the webserver’s (now static) IP address, and the port specified in the webserver sketch, which was 41114. Thus, any inbound TCP traffic from the Internet, on port 51235, will be routed to the webserver, on port 41114.

Yes these port numbers are arbitrary. The important thing is that there are no collisions with any other ports in use on one's network.

Step 5: Test the Webserver

Once my home network was configured, I could then test my webserver. Using a browser, I typed in my home network’s domain name, using the public port number I selected when configuring port forwarding, followed by the request line expected by the webserver for ring requests:

http://{home network domain name}:{my public port}/dingaling?

For those testing their own webserver, replace the values in braces with the values you’ve selected. I opened my request URL in a browser, which in turn issued an HTML GET request to my home network, which the router then forwarded to the bell webserver. After recognizing the request, the webserver issued an OK response, activated the relay for 0.75 seconds, and then disconnected the requesting client. Success!

Step 6: Configure an IFTTT Recipe

I wanted a slick way of issuing ring requests to my hardware. Enter IFTTT, which stands for If This Then That. It allows one to set up “recipes” that define what to do when something particular happens on a connected event channel. Many companies have worked with IFTTT to provide channel triggers and actions that tie in with IFTTT’s paradigm.

https://ifttt.com/

First, I signed up for an IFTTT account. For testing purposes, I decided to create a DO recipe, which executes whenever one taps a button on IFTTT’s DoButton app. Next I downloaded the DoButton app to my iPhone, providing it with my IFTTT account information.

To configure the DO recipe on my iPhone, I first needed to “connect” to the IFTTT Maker channel. The purpose of this channel is to allow people to send web requests to their DIY projects. Once I connected to the Maker channel in the app, I clicked the ‘+’ button under My Recipes, selected the Maker channel, tapped “Create a New Recipe”, then tapped “Make a web request” under Choose an Action. I typed in the title, “Carson, I’d like some tea.” For the URL, I typed in the ring request URL for my network, outlined above. For Method, I selected GET. For Content Type, I selected text/plain. I left the Body field blank. Finally, I tapped Add to complete the recipe.

To test the new recipe, I tapped it. Once displayed, I tapped the large circular button with the Maker M in it. A checkmark animation gave feedback that everything was working as expected. After a few seconds, I heard the relay on the webserver click On and Off. On the IFTTT website, I then logged onto my account and checked the request log for errors. This log helps users to see if everything is working OK from IFTTT’s perspective. If the webserver is ever turned off, one should noticed request time-outs in this log.

Step 7: Install the Bell and Webserver

Once everything was working, I transferred my breadboard circuit to a more permanent project board, which I put in a project box, using an external power brick for power.

Rather than permanently mounting my bell to the wall, I chose to keep it portable, crafting a custom wood stand to mount the shaker motor and bell to. Then I finished it in matte black, to match the bell board used in the Downton Abbey series.

Two wood items I bought from Michael's to form the basic structure:

  • ArtMinds Basswood Canvas 12" x 12"
  • ArtMinds Pine Innkeepers Signboard 6" x 14"

I added reinforcing wood blocks to each corner of the canvas, as well as a full height vertical support to mount the bell to. The extra wood at the bottom on the back was meant to hold a heavy object, to offset the weight of the bell on the front. This turned out to be unnecessary for my bell.

|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|

Good luck with your own version! My only regret is that my wife has now gotten used to ringing me whenever she wants something. The world does not need another Lady Mary, my dear.

The most logical extension to this project is to leverage the many "this" triggers available from IFTTT channels by creating IF recipes to ring the bell. Also, the Internet-facing relay could be used for limitless other applications.

Get crackin'.

|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|