Many existing devices issue personal notifications to the owner of the device (e.g. a new email or SMS has arrived), but it can also be handy to have a device to issue ambient notifications to anyone that happens to be nearby. This project is an HTTP-controlled bell that can sit in a central place and generate configurable ambient notifications through a MIDI synthesizer.
An ambient notification bell can be useful for different types of events than those associated with personal device notifications. At my house, we like to leave the windows open in the morning to capture cool, fresh air, but it's easy to forget to close them as the day warms up. I configured my ambient notification bell to ring when the temperature rises above 73 degrees, although I'm still trying to figure out why there is a delay between when that threshold is crossed and the bell rings. Perhaps the weather station is too far from my house. I can also make it ring when I leave work as an FYI for my family. IFTTT has a lot of triggers that could be useful for generating ambient notifications.
I got the idea for this project after reading Craig Lindley's Nuts & Volts article about connecting a MIDI synthesizer to an Arduino. Craig also posted a PDF of the article on his website. I bought the current revision of the synthesizer shield, the Modern Device Fluxamasynth Shield v.3, and connected it to my first generation Intel Galileo.
I am one of the Intel employees that is enabling Intel Galileo boards on Contiki OS, so I naturally started with that as my software base. However, this is a personal project, and this post is my own and doesn't necessarily represent Intel's positions, strategies, or opinions. I extended the Contiki nano webserver with a new CGI script that rings the bell, and I added a new webserver configuration that is oriented towards programmatic access rather than interactive browsing. Thus, I eliminated support for unneeded elements such as a navigation bar. I also configured the build to enable support for some security features in the Intel Quark X1000 SoC, specifically segmentation, Task State Segment (TSS) switching, and Isolated Memory Regions (IMRs). However, keep in mind that no security solution is perfect.
Instructions for setting up the hardware, building the software, and using the final device can be found in the README.md file. The synthesizer chip on the MIDI shield supports a large number of instruments, so that README also includes instructions for selecting a different instrument and pitch than the default celesta middle C that I selected.
The simplest way to play the bell is to navigate to http://<IP address>/synth.shtml with a web browser. Keep in mind that in a typical setup with a router, this will only work if the browser is running on a machine in the same network as the bell. Port forwarding can be used to provide access to the bell from the Internet. Of course, you should carefully consider any security ramifications from making your network more accessible to the Internet. Another challenge in making the bell accessible from the Internet is discovering the current IP address, since the bell may be behind a router with a dynamic IP address. Dynamic DNS services can help in such circumstances.
If the bell is configured to be Internet-accessible, then services such as IFTTT can be used to play the bell in response to whatever triggers are supported by the service in use. For example, this is how I configured my bell to ring when the temperature rises beyond a certain threshold. I setup the IFTTT Maker channel to issue an HTTP GET request to the port forwarding URL that I configured on my router.