This is my digital dashboard that I just made
- it sits on the wall right next to my desk and is just “always there”. I’ve got
the local time, world time, well, I mean go by US west coast time, Joel should be aspleep,
but he’s probably not. I’ve got the weather, my upcoming video plan and to-do on here and
in the last two weeks that I’ve been using it, it has already made my work so much more
efficient because it totally keeps me on track. You can use this setup for everything, though.
As a family planner, a digital picture frame or even, with a much smaller screen, as a
desktop clock with your next tasks coming up. And all this is is a TV and a Raspberry
Pi, so let me show you how I built this one, how I set everything up to work smoothly from
the Pi and as energy efficiently as possible and what I would do different next time. So let’s go through what parts I used. First,
the screen. This is a 43”, 4K LED TV from JVC. It’s really amazing how cheap TVs have
become just in the last two years - and the price difference between 1080p and 4K models
has also shrunk to almost zero, so getting the higher-resolution model was a no-brainer
as it makes especially smaller text so much more readable, which means I can actually
make use of the large screen size and put more stuff on it. Of course, you can also
use an old computer screen or any other spare display, but make sure it has decent viewing
angles, especially if you plan on mounting it in portrait, and also keep an eye on power
draw. I picked this exact model because it’s a
good bit more energy efficient than others - and since it’ll be on for 10 hours a day,
that does make a difference in the long run. Now, for what’s controlling this, obviously,
it’s a Raspberry Pi - 4. The older Pis would have probably been fast enough, but don’t
support 4K output over HDMI. Yes, there are a few hacks that may allow you to get 4K from
them, but I wanted to eliminate as many potential hiccups as possible - this should be a zero-hassle
and -maintenance setup for me and was already enough work. I may still try an older Pi in
the future, though. So for the software that’s driving all this.
There are two, maybe three ready-to-go solutions for this. The first one, and maybe the most
obvious one, is MagicMirror². That’s a Raspberry-Pi-native software that’s made
to sit behind a semi-transparent, mirrored piece of glass and shine its information through
that mirror, creating that “mirror, mirror on the wall” illusion. MagicMirror² is
free and open-source and has a ton of plugins and expansions. But. First, the interface
is optimized to just be black and white, since it’s made to shine through a mirror, and
getting anything to look nice without that mirror is going to take some effort. And,
the more severe issue for me, the way you set up MagicMirror² is by editing JSON files
over remote desktop or through an SSH terminal. I don’t have those sort of masochistic tendencies,
so that didn’t particularly excite me. But I tried anyways, and after digging through
the tons of different calendar plugins and finding the one that seems to be the go-to
powerful option, I just gave up when I saw the 50-page-long documentation on how to write
the JSON that would display a shared calendar. Like, this shouldn’t be so hard. For me,
that’s not fun to set up, and changing anything in the future would mean re-learning the entire
thing again. It also kind of explains that when MagPi,
the official Raspberry Pi Magazine, covered MagicMirror², they spent five pages explaining
how to build the build the wooden frame, and only one page on software. It would probably
scare a lot of people away if they covered it more realistically - which is the other
way around. One page on the frame, five pages on how to edit JSON files.
The next alternative is DAKboard, and that’s the one that I’m actually using right now.
It’s not an open-source software, it is a paid software-as-a-service, which I’m
usually not a fan of, but there is a somewhat limited free version available. This project
is not sponsored by them, I don’t even have an affiliate link for DAKboard, but there
are affiliate links to all the hardware and tools I’m using down in the video description.
So, the one massive advantage that DAKboard has is that it’s entirely browser-based.
Both the configuration and the dashboard itself happen entirely in a browser window, which
means you can use any kind of hardware for the screen setup as long as it can display
a website; and you can change and update what’s shown on the screen from any other computer
without remote-desktop’ing into the Raspberry Pi or going through a console.
It took me all of ten minutes to get DAKBoard running, and then a bit longer to figure out
what I actually wanted to have on here, where, how large, etc.
There is one more software that I found, and that’s Mirr-OS by glancr, which I believe
is somewhat open-source. It’s made by a guy from Berlin, but it seemed a bit too focused
on living behind a mirror again, which means very simplified graphics, and the list of
integrations and features is also still quite short. With each of these solutions, there are still
a few things that I did to the Raspberry Pi OS to make it work for this application, but
I’ll get to those towards the end of the video. But now that I knew that the software
worked and did what I wanted it to, it was time to mount everything to the wall and to
build a bezel for the screen to make it look a bit less like a failed home cinema setup. I started by installing the wall mount for
the TV itself. This is a standard, off-the-shelf unit, I tried to get one that was reasonably
thin since I didn’t want the frame to stick out too far from the wall; the TV is thick
enough as-is. Most wall mounts let you mount the TV in normal landscape orientation or
in portrait, but if you have one that is particularly flimsy, the TV may tilt forward a bit too
much for comfort. Mounts with a taller base like this one tend to be sturdier, and the
bezel I’m still adding will help hold it in place, too.
In case you’re wondering, no this is not a studwall, this is not drywall, in fact,
this is a two-flue, brick chimney that I’m mounting this to. Usually, you should never
drill into a chimney, as that could allow for flue gases to escape or create a fire
hazard, but in my case, one flue has never been used and will never be used, and already
carries the cables for my solar panels from the roof into the basement where the inverters
live, and this other flue is now double, or actually triple-lined with polymer pipe ever
since we upgraded to a condensing gas heater. That means, in my case, this can be treated
like a solid bearing wall. With the bonus feature of being able to run wires in the
empty flu. So now that the TV was mounted, I could get
started on making the wood bezel. I picked up a few pine boards as they were cheap and
had a nice, lively texture that would break up the sterile look of the dashboard. I started
by joining two boards for the facia and got to cutting out the bezel area. Sure, there
are more material-efficient ways of making a bezel like this, for example by joining
segments with miter cuts, but I wanted the grain to run in all the same direction in the front.
I routed out a large lip or pocket for the TV to sit further towards the front - it only
needed to be this big on one side, but the spacing from the edge of the visible screen
to the rear box-section of the wooden frame needs to be the same on all edges.
I then added a bunch of chamfers on all sides of the bezel, for looks, but also to make
that second facia on top of the TV’s original bezel look as thin as possible.
Now, just because I’m using a bunch of tools here doesn’t mean that you can’t make
a frame like this if you don’t have all of them. I’m not using any of these tools
particularly effectively, so all you need if you’re a bit creative is some sort of
a saw, sandpaper and wood glue. You can also get different raw materials that need less
work to get them into shape to make your life even easier, like thin plywood for that front
facia. For the back portion of the bezel, I printed
a bunch of grills to cover up some cutouts for ventilation - both the screen and the
Pi do need some airflow, but passive convection should be enough.
The back itself is a simple butt-joined rectangle, I added a few brad nails for strength and
so that I could keep on working right away. The back frame then simply gets glued to the
bezel, and after that, I was ready for a quick round of sanding and the first coat of varnish.
I looked into using a stain first, but since I wanted an almost black color, using colored
varnish ended up being a simpler, more consistent and cheaper option. After a second coat of
paint, the frame was done and ready to be mounted. Aaaaand.. I screwed up. Yeah, uh, remember
how I like to measure from the 10cm mark on a measuring tape so that I don’t need to
deal with the wiggly end? Well, turns out if you forget to subtract those 10cm from
your measurement, you don’t actually get the correct dimension.
I already thought the aspect ratio looked a bit off to be 16:9, but the dimensions on
my sketches checked out. Ah well, at least it was easy enough to fix. I had thought about
just tossing this frame and 3D printing one instead on that huge Raptor 2.0 printer, but
figured I could reuse the wooden bezel and just cut a chunk out of the top and bottom,
glue it back together, sand it down and give it a fresh coat of paint. So that’s what
I did, and yeah, you can still see where it got joined back together if you know what
you’re looking for, but if you don’t, you can’t really tell. So for mounting the frame, I used pieces of
what you’d call 1x2 in the US, commonly known as Dachlatten here, and to align the
frame to the screen, I used some double-sided tape to temporarily stick down the slat, then
unscrewed the frame and anchored it down in that position. Worked really well! And of
course, you can always fine-tune the position with a hammer. Next, I needed power, and remember
how I said this was a chimney? Well, that makes it easy! I fished up a wire through
the flute and then had a licensed electrician hook up the connections. I first thought I’d
need to add an extension to this frame on the bottom to hide the wiring, but it turns
out there was enough space behind the screen to hide a full powerstrip and USB supply,
and for the Raspberry Pi 4, well, I just taped that to the back of the TV, there’s no need
to choke it even more with putting a printed case around it, after all, it is already enclosed
by the frame and all. And no, for what this PI is doing, it definitely does not need a
fan or heatsink. So back on goes the bezel, these two vent grills on the bottom and top
also hide the screws that mount the bezel to the wall, just to make it a bit prettier.
I mean, it’s not like anyone is ever going to see it, but still. So how did I set up the Raspberry Pi? It all
starts with the standard Raspbian setup, since I use the Pi4, it’s the newest one they
offered as of today (which is August 2019). I did all the regular things that the setup
assistant walks you through, that is WiFi and changing the password, but after that,
it was mostly making the Pi work smoothly in this use case. Reading off all the commands
I used is not super fun for a video, so I’ll link the article on toms3d.org in the description
where I have all the steps listed in full detail. So here’s the short version:
First, I needed a way to access the PI without attaching a keyboard to it. For that, I enabled
SSH and VNC remote access with the raspbi-config tool.
Then, I needed a way to automatically show the DAKboard interface on boot. For that,
I added a startup command to the LXDE desktop environment that would launch Chromium in
full screen. And that works really nicely. But there’s still the issue that this screen
is rotated. Normally, you can easily configure the entire HDMI output to be rotated with
the boot config, but with a 4K screen, the entire image would get shifted off screen
so that most of it is black and you’re only seeing a small slit of the image. Not great.
So instead I tried a few Chrome plugins that would rotate just the website. And there are
a bunch of prank plugins, but “page rotate” did exactly what I needed. However, you need
to click it every time, which doesn’t work here, so I looked at what it did to the page
and replicated it. Essentially, it’s creating an iframe, which is a virtual browser window
within the real browser window and it’s rotating that in its entirety. Works beautifully. Next, there were two small annoyances to fix,
and those were that the screen would go blank after 15 minutes, that’s a simple fix in
the desktop environment’s config, and the next one was that there’s a mouse cursor
on screen, which we definitely don’t need, and that’s fixed by installing unclutter
and adding it to autostart. Lastly, I wanted to schedule the TV turning
on and off because, well, what’s the point of having it on during the night. So I set
up HDMI-CEC, which lets the Pi control the TV over HDMI and turn it on and off when needed.
Make sure you’ve got the PI plugged into an HDMI port that supports CEC for that to
work. For the scheduling, I used cron, the oldskool linux scheduler, so now the screen
turns on at 8 AM and turns off at 6PM. Nice ten-hour work day, perfect. And lastly, to save a bit more energy, I turned
down the screen to minimum brightness, it’s still very readable at that setting and probably
reduces power consumption by two thirds or so. That’s also one of the reasons why I
didn’t add a mirror in front, as I’d have to crank the brightness just to make it through
the mirror and then to compete with the glare on top of that. So this is good. Now, for the actual DAKboard layout, you can
go with the free pre-defined ones, but I wanted to try creating a custom one. Now, what you
put in here is up to you, but here’s what I have on it. Up top, it just felt right to
have the local date and time, and then next to it, I have some world times for US west
coast, LA, east coast, New York City, Hong Kong, and Sydney, so these just always give
me an idea of what time it is for the people that I’m talking to on Twitter or via email.
Next up, weather, and then a calendar of the next 90 days. Right now, I’m only having
it display my video schedule, but usually, I also have my work calendar on here with
events and deadlines, I just hid that for the video because that doesn’t really need
to be public. I really enjoy having 90 days in advance here, that gives me a chance to
for example order stuff from Aliexpress for an upcoming build and the stuff actually getting
here in time. Now, down here, for now I’ve put a todo
list, but I’ll probably still change that around. If you have ideas of what might fit
in here, let me know in the comments! One of the features that DAKboard is only
unlocking for paid users is the option to use custom CSS to change how all this stuff
looks. But you can also add that feature with a Chrome plugin that just applies the looks
right in the browser. What I added here was a consistent spacing in these calendar cells,
by default they shrink and grow based on how much information each row has, then I changed
some of the font sizes and added a blurry shadow under all the text and icons to make
it a bit more readable. And that’s it! There are still a few things that I may add
or change in the future, and that’s for example power button on the side that lets
me cleanly shut down the Pi, because if you just jank power or switch off the mains fuse,
you do that too often and at some point it’s just not going to boot up anymore. For now,
I’ve got a copy of the SD card, so if that ever happens, I’ll be back up and running
fairly quickly. It could also make sense to actually underclock
the Pi4, but since all that’s doing is limiting the maximum clock and this one is idle most
of the time anyways, I don’t think it’s going to make much of a difference for heat
and power draw. But what I will try is getting an older Pi
to output 4K - that way, I can use this Pi4 for more demanding tasks and permanently deploy
a Pi1 for the dashboard. And if I were to build this again, I would
probably skip the entire TV wall mount and just use the TV’s bezel to tape it to the
wooden frame. There’s more than enough contact area there, and knowing how well VHB tape
sticks, I’d have zero doubts that it would hold up over time. That would make aligning
the frame to the screen much easier and it would also make for a slimmer build that doesn’t
stick out as far from the wall. I’d also drill a small hole for the infrared receiver
in the TV to make the remote a bit less awkward to use.
Like I mentioned, I’ll have the software guide linked in the description below, also
down there you can find the list of parts and tools that I used if you’re looking
into making one yourself, and if so, let me know in the comments what you’re thinking
about using it for! And as always, if you found this video helpful,
interesting, entertaining, leave a like, get subscribed, and if you’re up for it, join
in on Patreon or through YouTube memberships to support the channel. Thank you all so much,
thanks for watching, and I’ll see you in the next one.
Sweet. I want to make one of these for my wife - she’s always updating the family calendar and having it hanging in plain sight would be really cool.
Was hoping this wasn't another DakBoard build, but alas...
[removed]
Incredible work and video. It’s a shame that the Pi has to run a product that is billed annually though.
Fantastic build, this entire smart mirror/dash thing has always interested me, might need to actually build one...
Thanks for posting! Really nice video, i have all the parts for my magic mirror but zero python skills. DAKboard or mirrOS gives me hope i’ll one say have my verry own magic mirror
Just to get this right: You bought a full-blown television, added a Raspberry Pi and mounted a wooden frame around it – that quite frankly doesn't fit the rest of your interior at all – only to have a ridiculously large and power-hungry display for what looks like a nearly empty calendar?
Really attentive and liked the project .I think I should also have to build one for my daily schedule updation.