I have long been interested in building myself a smart mirror, especially given my proficiency with the Raspberry Pi and my proclivity to use it whenever possible. There are a lot of premade solutions out there, up to and including a full-fledged OS that can be tweaked to your liking, and there are tons of examples and tutorials as well.
But I not only wanted a solution that was specific to my situation, I also wanted to build it myself, from scratch. Plus, I wanted to add functionality to it – make it more than just a dumb display. A “magic mirror”, if you will.
After more hours than I want to admit, here is the (probably not) final product. It’s running a Pi 3B+, connected to a 24″ monitor that has been converted to a touch screen thanks to an IR frame that mounts to the face of the monitor. Everything is mounted inside a wooden frame that I built myself, sort of going for the industrial/steampunk vibe.
The main screen is nothing special, really: time and date at the bottom right, and current temperature and 3-day forecast along the side. What’s different about it, however, is the two icons at the top. If you tap the compass icon at the top right, it brings up the Google maps window showing the drive to Los Angeles, with the traffic layer enabled. It can be scrolled and zoomed as well, in the event you’re interested in the traffic for another area.
In addition, tapping the house icon at the top left brings up the interactive floor plan you see in the last picture. The power icons control plugs and lights, accessible via API, placed throughout the house. (To do: query the state of the device and change the color of the icon accordingly.) The scroll icons correspond to WiFi-enabled ESP32-connected sensors. Tapping them brings up a small alert box that shows the current state of everything currently being measured by that particular device. As I gradually add more sensors and lights/plugs, I can simply add them to the floor plan, so it’s completely modular and extensible.
So that’s my entry into the smart mirror space. It’s not much, but I think it’s a good start. I’m planning to put all of the code, as well as documentation and instructions, into a public github repo at some point. I may even start experimenting with makefiles and see if I can create an actual installable solution, so anybody that’s interested doesn’t have to worry about dependencies and configuration and whatnot.