Seattle has a pretty awesome approach to data availability and transparency through data.Seattle.gov. The city has thousands of data sets available (from in-car police video records to land zoning to real-time emergency feeds) and Socrata, a Seattle-based company, has worked with the city (and many other cities) to allow developers to engage this data however they like. I spent some time playing around with some of the data sets and decided it’d be nice to know when police and fire events occurred near my apartment.
I setup a script to pull the fire and police calls for events occurring within 500 meters of my apartment and started storing them into a local database (Socrata makes it so simple – amazing work by that team). While reading it from the API, I check the proximity of the event to my address and also the type of event (burglary, suspicious person, traffic stop, etc) and trigger emails for the ones I really want to know about (such as a near by rape, burglary, shooting, vehicle theft, etc). I decided to store all events, even traffic stops, just because. I may find a use for it later – who knows…
After I’ve scrubbed through and sent any notifications for events I care about, I display the data in a simple table in my existing home dashboard and highlight red any rows for events which are within certain square area of my apartment.
To add a nice visual, I also plot the most recent events on a map using the Google Maps API. Police events are noted with blue pins, fire events are noted with red pins:
Clicking the pins will give us some details about the event:
All told, it was a pretty simple project which helped me gain some experience with the Google Maps API and also poke around with some of the data the city provides. I’m sure I’ll be doing a bit more of that in the future. These two projects have been integrated back into my home automation dashboard so I can continue to build on them in the future.
Category: Touchscreen Dashboard
Data Visualization and Demo
As mentioned previously, my goal wasn’t to just create a home controller/dashboard but to also collect as much data as possible while doing so. So tonight, I started playing around with a few different visualizations of the data I’ve collected thus far. It took a few hours but I’m satisfied with the current state.
I’m doing simple dumps of the most recent music played by my Amazon Echo; most recent programming watched via DirecTv; visualizing the daily average, minimum, and maximum temperature and humidity levels in my apartment; visualizing by hour of day the average, min, and max temperature for the current month vs the previous month; breaking down the amount of time I spend at home by day of week (and telling on myself that I like to leave work early on Fridays :)); and visualizing my TV watching habits by hour of day and day of week.
I recorded a video of this all and also included the DirecTv control demo at the end.
Expanding the Home Dashboard
In the previous post, I outlined the Home Dashboard touchscreen for controlling lights, temperature/humidity, displaying Amazon Echo information, displaying who’s home (via bluetooth sniffing), and displaying what was being watched on DirecTv. As this dashboard is intended to be a sudo remote control for my home, I thought it made sense to be able to actually control the TV with it.
After a bit of tweaking and some UI work, the end result is a super-quick (HTTP response is ~30 milliseconds which feels nearly as quick as the standard DirecTv remote) interaction between device and DirecTv receiver.
From my home dashboard/touchscreen controller, I can select the title that’s currently playing to launch the remove control (pictured above). You’ll notice that the touchscreen controller can do everything the standard remote can do, including guide browsing, DVR browsing, etc.
Home Dashboard using a Raspberry Pi
After creating a desktop home automation dashboard and, later, a live stream “digital picture frame”, I got the idea to combine the two into an always-on control panel that condenses everything I care about into a single kiosk which can sit on my end table or nightstand.
What it does
It’s essentially a condensed UI of the desktop version linked above which uses the same databases and processes.
- Current indoor temperature and humidity (via DHT11 sensor)
- If my Amazon Echo is playing music, it’ll display the artist, song, and album
- If I’m watching TV, it’ll show the title, channel, and image/movie poster
- Display unique icons for each person in the house (by sniffing for their phone’s bluetooth signal)
- It’ll show the status of my lights (on/off) and update if that status changes (using the Wink API)
- Through touch screen, allow me to control my lights in near real-time.
Materials Used
- A Pi3
- Pi display
- A case
- Indirectly, I also engage my Wink Hub, Amazon Echo, and DirecTv receiver.
How it works
Much of this (temperature, humidty, DirecTv and Wink control) is covered in “The Foundation” post. Specific to collecting information from the Amazon Echo, I use IfTTT and the Maker channel. Each time my Echo plays a song, I POST to a script similar to the one below which stores the song in a MySQL database. I can then query that, determine if the song is still playing, and publish it to the UI.
<?php $conn = mysqli_connect(<credentials>); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } $song=$_REQUEST['song']; $artist=$_REQUEST['artist']; $album=$_REQUEST['album']; $timestamp=$_REQUEST['timestamp']; $sql = "INSERT INTO echo_history (artist, song, album, timestamp) VALUES ('$artist', '$song', '$album', '$timestamp')"; if (mysqli_query($conn, $sql)) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?>
My Maker recipe looks something like this: IF then to URL