Wireless Light Control

My first project was allowing an iOS app to talk to Phillips HUE lights using a WiFi connection. My project was based on David’s project and involved working with Node.js and Modulus. While my project was similar to David’s I decided to do everything on my PC, while David had done his project using a BeagleBoard and Mac. Most of the information on how to create the project has been covered in David’s GitHub and blog post, so I will focus more on the parts that I found most difficult.

The first part of the project was installing Node. Since I was using Windows, I decided to just download the installer online. It turned out, however, that the installer had a slight bug where it set up Node so that it was always looking for npm in C:\Users\(Username)\AppData\Roaming\npm. As it was not installed there, Node kept crashing for me when trying to run anything. To solve this problem, I eventually just created the corresponding folder in that location and then everything started working fine.

To next test if my code could actually create a server before uploading it to Modulus, I decided to run it on my computer. To do this, I had to first install all the missing dependencies, luckily running npm install in the corresponding folder automatically installs all the dependencies. After checking that the server ran on my computer, I proceeded to then upload it to Modulus.

For my code to run on Modulus, I had to first create a project, which was relatively straightforward. I then had to upload my files into my project. I decided to upload them myself instead of using the command line tool. For this to work, I had to delete all of the dependencies that had been installed in the previous step then zip the folder and upload it. Once the code had been uploaded, I just needed to set up the local server on my computer.

To connect my computer, the Phillips lights, and the iOS app, I used the same AirPort that David had used. To connect to the AirPort, I downloaded the AirPort utility for windows that allowed me to talk to the AirPort. I ended up spending a lot of time trying to debug the AirPort, until I found out that it hadn’t actually been connected to the Ethernet. Another thing that required a lot of time was realizing that I had to be connected on the network created by the AirPort to be able to connect with everything else. Once I had realized both of these, it was just a matter of modifying the code so that it would point to the IP address created by the AirPort and my Modulus project instead of David’s. After this step, I had a mostly working project.

A couple steps that had to be done at the very end were that I had to create users manually and change ownership of the bulbs from David to me. The latter though was a result of me using the same equipment as David. Overall the project was a cool first experience working with Node.js, Modulus, and IOT and I’m looking forward to my next project, which will be working with Rollbase and AngularJS as well.