This weekend I posted to GitHub the source code for a Patriot iOS app. This is a cleaned-up version of an app that I wrote awhile back to control Photon devices in my RV. The intent is to allow mounting old iPhone devices to the wall to use as control panels for my Photon controllers. Refer to my previous Patriot Alexa controlled Photon project for information about the Particle.io code and Alexa skill.
In the image here you can see 3 different ways of controlling a Photon controller. There is an Alexa sitting next to an iPhone 4s mounted to the wall next to several wall switches.
The switches are connected to a Photon mounted in the wall behind them and actually broadcast particle.io events instead of directly controlling power to lights. They can control multiple lights, or even things that aren't lights. I had intended to put a bunch of switches like these around my home, but there's a problem with mechanical switches like these. They suggest a 'state' of on or off. So for example, typically a switch would be "on" if one way, and "off" if the other. However, if I turn a a light on by flipping a switch up, then I turn the light off by telling Alexa to turn it off, then the switch continues to indicate "on" but the light is actually off.
The Alexa is running the Patriot Alexa smart home skill. It dynamically determines the events that my IoT Photons are listening for, so I can tell Alexa to turn those activities on or off. But as described above, this leaves normal switches indicating the wrong state. So I decided that I need some sort of switch that can change to reflect the state even when changed by other devices or switches.
So an obvious choice is to use motorized switches. Unfortunately I couldn't find any in my parts locker. But I did come across several old iPhones and began to think about how extremely powerful these could be to control my IoT devices. So I wrote a simple control panel app that displays the state of a list of hard coded activities, and allows tapping on them to toggle their on/off state. I then purchased some cheap plastic iPhone covers for them that I mounted to the walls, and can just snap the iPhones into place to hold them on the wall. I ran a power wire over, and voila!
Nice, works ok, but my head nearly exploded when I started thinking about all the ways these could be extended. Before I start going on about possible future enhancements, let me announce that I have cleaned this original code up, extended it to use the latest Patriot dynamic device discovery, and posted the Swift source to GitHub.
All the source code is on GitHub. Download and compile it to your old iPhone device.
The app is pretty simple at this point. When it launches, it will connect to your particle.io account, and look to see which of your Photon devices are running the Patriot IoT library. It will then read exposed variables from those devices to build a list of the activities (commands) that are supported. This will be displayed in a collection view where they will indicate the on/off state of each, in addition to allowing you to tap them to toggle them on or off.
It's pretty cool to tell Alexa to turn on an activity, and see the light bulb image light up on the iOS app. It's also convenient to have a touch pad interface to turn on lights when its early in the morning and I don't want to disturb my sleeping wife by using spoken Alexa commands.
So now that we have a system that allows old iPhones to communicate with our IoT system, what are some of the things that we can do to leverage the incredible power of these cheap devices? Here's just a short list of some things that I've come up with so far:
- Utilize BLE to detect the presence of certain other iPhones to monitor my comings and goings. Turn on lights when I get home after dark, etc.
- Put a BLE tag on my car and motorcycle to track when they are at home or away or being stolen. Combined with the above...
- Coordinate with Alexa commands to dim or display the panels.
- Provide other views such as video chat, monitoring outside, etc.
- Mount one of these outside to use as a doorbell with camera and audio intercom.
- Use the back facing camera to perform motion detection, face recognition, etc. This one really has my head spinning. I intend to start looking into OpenCV to see about replacing simple motion and proximity detectors with just the camera mounted on the iPhones.
- Motion detection and GPS: since my home is an RV, these may prove handy for a lot of things.
And the list just goes on and on. So this iOS code is intended as just a starting point. I hope others will get involved and contribute also. Post your comments, make pull requests to the Github repo. There's lots of room for enhancements and innovation here.