00:00:11.920
Thanks for coming out, everyone, and checking out my presentation on the Internet of Things (IoT). It's a topic I'm very fascinated by, even though it's not something I work with on a day-to-day basis. However, I've been tinkering with IoT and reading a lot about it, so I wanted to share that with you today.
00:00:30.640
Today, I'm going to walk you through a simple Rails-based IoT application that I've built. I'll discuss some of the background and context around IoT, as well as the future of it and where I see it going.
00:00:49.680
As a quick introduction, I’ve had quite a roller-coaster career. I started off as a political science major, then moved into business, trying management consulting and venture capital. Eventually, I taught myself to code, loved it, and attended the Flatiron School for formal education. Now, I work at a small legal tech startup called Caseflex. I may not have as much experience as many of you here, but I love what I do.
00:01:21.759
On a day-to-day basis, I use Rails and Angular. As an IoT enthusiast, I've gotten really into tinkering a lot with Raspberry Pis and Arduinos. Before I delve into the presentation, let me give you a quick disclaimer: I brought all my setup here with me, but I think the demo might be better if you can see it on video. So I'll show you the recorded video of the app.
00:02:03.600
The video shows both the actual web app on the left and my IoT setup at home on the right. In the morning, I wake up and turn my lights on, but I’m really cranky at that time, so I need to dim my lights a bit. As the day progresses, it's beneficial to use a redder type of light for your circadian rhythm, so I start changing the colors of my lights. My next step is to get some caffeine, so I go to the appliances tab and turn on my coffee maker.
00:02:48.720
As you can see in the video, I begin brewing my coffee using an Arduino setup. Once I have enough, I can turn off the coffee maker and then turn on my favorite music playlist. I often play ‘Happy’ to try and boost my mood in the morning, even though it typically doesn't work.
00:03:17.760
Before I leave my apartment, I set up my security motion detector. You’ll see a little graph on the right that lights up every time it detects motion. It tracks the count of motions over time. I can also set it to alert me either silently or with a loud alarm. Additionally, I connect it with my Sonos speaker, allowing them to interact with each other.
00:04:10.239
While I’m coding during the day, I generally listen to beats. At the end of the week, say Friday or Saturday, I like to unwind and throw a little party. That’s a quick overview of the app I’ve built, and I’ll go into more detail about how it works shortly.
00:04:40.479
The high-level stack of this IoT application consists of an Angular application running in the cloud, served using Divshot. If you haven’t used Divshot before, it’s like Heroku, but for static applications, making it easy to push your application up. The Angular application consumes the API from my Rails app, which runs locally on a Raspberry Pi.
00:05:23.760
The reason it's running locally on the Raspberry Pi is because I need it to connect to various smart objects in my home network, like Sonos speakers and Lifx light bulbs, for which I need access to their APIs. Currently, I'm serving the application through ngrok, which is a simple tunneling tool to expose the development environment to the web.
00:05:56.559
My Rails app connects both smart objects—those already connected to the internet like smart bulbs or speakers—and some dumb objects—regular devices I’ve connected via Arduino. The smart objects may have a significantly higher price tag compared to traditional devices—like a dollar for a regular light bulb versus a hundred dollars for a connected one. My application can connect to the Lifx light bulb and the Sonos, as well as control a $5 motion detector using Arduino.
00:07:01.599
To control my coffee maker, which is a 10-cup standard machine, I can turn it on and off from the app. The motion detector I built is a simple five-dollar device. I’ve managed to splice circuits with Arduino to send signals to turn devices on and off.
00:07:40.799
The beauty of this setup is that since the front end resides in the cloud, I can control my devices from anywhere, whether I’m at the office or elsewhere, ensuring things are turned off. I’m even starting to connect a slow cooker, allowing me to turn it on and have my food ready by the time I get home.
00:08:38.880
So, what exactly is the Internet of Things? It’s about connecting to physical objects through code. We are currently witnessing the rise of IoT applications ranging from health and fitness monitors, home security devices, connected cars, to household appliances.
00:09:03.440
There are also numerous non-consumer applications. For instance, local governments utilize sensors on their infrastructures to detect leaks before damage occurs. The importance of this technology can be distilled into three main reasons. First, IoT allows for enhanced interaction with the world around us. Take the Nest thermostat, for example: rather than adjusting a wall unit, we can use an app that learns our routines and optimizes temperature settings.
00:09:57.681
Second, IoT is already making a significant impact. There’s been explosive growth in connected devices, and research suggests that by 2020, there could be 40 to 80 billion connected objects, equating to ten devices for every person on the planet. Recently, I saw a report stating that the IoT healthcare market will be worth around $117 billion by 2020.
00:10:47.679
The most crucial reason IoT is vital is that it increases the amount of available data. While we typically think of big data as information generated online, IoT enables data collection directly from physical interactions, including light bulbs, thermostats, and wearables. This collection of data allows us to analyze and improve our daily lives, encapsulated in the idea of the quantified self.
00:11:49.120
For example, there’s a startup in the Netherlands that has developed sensors for cows, allowing farmers to track various health metrics and behaviors. A cow can generate 200 megabytes of data yearly. This highlights the potential scale of data collection from human activities and interactions.
00:12:09.960
When I started building my IoT application, I wasn't sure what topics to present. I began with a standard HTTP API but quickly ran into performance issues. For example, each time I wanted to turn on a light or change its brightness, my Rails app needed to connect to it, causing excessive requests. If a user moved the brightness slider rapidly, it could create hundreds of requests, significantly slowing down response times.
00:12:57.120
To address these performance issues, I explored WebSockets, which DHH discussed in his recent talk about Action Cable. WebSockets maintain an open connection between the client and server for more efficient interactions. One key advantage is that they allow server-generated events, enabling real-time updates on the front end without being tied to a request-response cycle.
00:13:52.320
In the Rails app I built, requests interface with physical objects through socket controllers. These controllers work with models to save interactions to the database, allowing analysis of motions, light states, and more. Given we are at RailsConf, it’s interesting that I use a dispatcher created on the frontend with Action Cable to manage events through the Rails application.
00:14:44.320
Each event maps to the controllers just like standard HTTP routing. For instance, creating an event could involve turning an object on, while destroying it would turn it off. Updating an object would change its attributes and retrieving its status would display its current settings.
00:15:06.639
In the update action of my application, I extract RGB values from the front end, save them to the database, and interface with the physical objects. The models involved include Sonos players, motion detectors, coffee makers, and lights with varying attributes.
00:15:48.400
The interface classes in the application serve as the intermediary between the Rails app and physical objects. This is relatively straightforward for smart objects with existing APIs. However, dumblected installation separates the process, using Arduino libraries and circuit design.
00:16:45.120
For example, my motion detector utilizes two-way communication whereby the Rails app receives data. This uses multi-threading to avoid freezing my app, continuously checking the Arduino for input. When a motion is detected, it signifies that all codes synchronize the state through server-generated events.
00:17:38.480
Reflecting forward, IoT remains in its infancy, resembling the transition of computers masquerading as better versions of paper, as articulated by Alan Kay. Currently, the IoT industry often operates by offering smart versions of commonplace objects, such as connected light switches, yet the value is not yet substantial.
00:18:30.080
We observe numerous dumb devices existing parallel to their smart counterparts, often requiring separate apps to run. The next phase involves centralized systems capable of integrating multiple brands and products into single functioning platforms. We are already seeing nascent versions of these centralized controls manifest in products like Apple’s HomeKit and Amazon Echo.
00:19:12.080
Ultimately, what we desire in IoT technology is seamless integration among varied smart objects, eliminating brand barriers. Imagine returning home late from work, where your home anticipates your return—heating food, turning on lights, unlocking doors, and ensuring a smooth experience.
00:20:05.279
My goal today was to demonstrate that building an IoT app is easier than you'd think. The app I developed didn’t take much time to create—it’s quite simple. As Rails developers, we hold valuable skills to create such applications, especially with the introduction of Action Cable making IoT development even more streamlined.
00:20:49.919
I encourage all of you to join this IoT revolution, building your applications to push us towards a future reminiscent of the Jetsons instead of the Flintstones. Thank you so much for listening.