Project: Making a smart TV with the Raspberry Pi
Part 0: Introduction
When I have a problem, I usually refer to the engineering design process.
I first ask myself what my problem is, I then look into the problem. I come up with a couple solutions to the problem, and I create a couple plans. I make a prototype and test how it works, and course correct as needed.
With that being said, I had a bit of a problem on my hands. Initially an unrelated one to the problem at hand. I've always had pretty awful internet (We're talking like 3mbps down/0.70 up) and I found that with me having a NAS (click the link for my article on how I made my NAS), it was kinda painful to use. It could take a long time to transfer just a couple of files. Since I have all my music (over ten thousand songs at the time of writing) on my NAS, it was kind of important that I can access them. I decided to check out what speeds my ISP offers. It took a bit of digging, but I found them. I asked my Dad what we currently pay for internet, and I found that for what we currently pay for internet. For what we're currently paying (60 dollars a month) it seems like we should be getting something around the lines of 80 mbps.
3 mbps is significantly lower than 80 mbps, right? There's a couple reasons why the internet could've been that slow. The internet was installed around 10-15 years ago, so the hardware or infrastructure could be a bit dated. My modem could be the bottleneck. The ISP was acquired by another company so they might've forgotten to make our speeds not be awful. I don't know, largely irrelevant.
I decided to see what I could do about getting better internet. I decided to create a bundle to see how much it'd cost. Apparently, where I live offers high speed internet. "Up to" 140 mbps. Putting aside the wording, any upgrade was a good one. Looking through the bills, also I noticed that we pay an absurd amount of money just to watch TV. My Dad and I only watch a handful of channels, too. I'm usually in my room doing stuff I do, and my Dad is usually watching sitcoms. In his words, "Most of the time, the TV is watching me". I decided to see how much we'd pay without the TV bundle, and estimating in streaming services so we can still watch the channels we watch occasionally, it was significantly less. I mentioned to my Dad this discrepancy about the internet speed, and I also brought up how much we pay for the TV and how much we could pay. We've talked about cutting the cord, and we just didn't really decide to do it. I didn't care enough to push him, and he didn't really know enough to care. We were both interested now. I told my Dad i'd look into things, and this is where the real meat of this article begins.
Part 1: The Problem
So, we identified the main problem. With my dumb TV soon to be removed, I need to build something can replace that. However, what exactly does that entail? Before doing any research, I asked my Dad what exactly he wanted out of the TV.
He said that he wanted to be able to see a couple channels. Our local news channel, The science channel, Sportsman channel, and TVland. Alright, that's only 4 channels. That's not that bad.
My Dad is probably going to be the one who is mainly using the TV. I'm not too much of a TV guy. My Dad, being from an older generation, isn't that good with technology. With that in mind, I figure that I'll need to figure out a system that will be easy for him to operate.
I figured that we'd also need to keep the monthly cost below what we were paying for earlier, because if we didn't there'd be no real point. Based on the bills I looked at, it seems like the price ceiling we're aiming at is around 180 dollars per month. For this to be viable, I wanted to lower it down to at least the 160-170 range. Saving 240 dollars a year isn't insignificant.
So that's 3 requirements.
1. I need at least those 4 channels
2. The solution has to be easily operable by someone who isn't as technologically literate
3. The solution should be in the 160-170 per month ballpark.
Seems easy enough. Time for the next phase.
Part 2: Research
Now that I knew my constraints, I know where to start.
I first looked into what streaming services offer the channels that I was looking for. I found that our local news was livestreamed for free on a couple sites, so that wasn't a problem. I decided to shift my attention to the other channels.
I decided to look into where I can stream the different channels. After looking into different streaming services, and after doing some research, I decided on using sling TV. The base price is 25 dollars per month, and with the extras we needed, it's going to be about 40 dollars per month. The total plan with our ISP and with sling was going to be 140 dollars per month, so at this point, two constraints were satisfied. I already decided on sling.tv as a replacement for the channels that my Dad wanted, but I needed to look into how my solution was going to run and I needed to make a list of things to buy.
Part 3: Development
I already have a decent amount of experience with Raspberry Pis. They're cheap, compact, and decently powerful for their size and price point. I decided that that was going to be on my list of things to buy. I also needed to buy a power supply and a case for it.
For our plan, we had the option of renting or outright buying a modem from them. I decided to buy a 3rd party modem for the sake of price, and so we don't need to be too reliant on them.
I wanted to get a long HDMI cable that was 4k capable. We might upgrade our TV in the future.
I used this opportunity to talk to my Dad about getting a VPN service so that we could also stay protected. We decided that we're going to go ahead with that.
Okay, cool. We have a list of things that we should get and a solution to live TV. How exactly is this going to work?
I was initially planning on just doing it browser based. However, after some consideration, that might not be the most user friendly in this condition. I use Kodi on my PC to watch TV shows I've downloaded on my NAS. The controls annoy me, but I can install a skin that would be easier to use. I also use my phone to control it when I'm laying down. That's fairly simple too.
So I decided that I was going to use Kodi on this machine and we can look into using our phones to control the Pi. We also want to make sure that it will be 4k capable in the future.
Part 4: Prototyping
A couple days before I did some serious prototyping, I decided to hook up my Linux laptop to my TV to see what the display looked like.
I played a bit of a youtube video and I watched a livestream of our local news channel. It looked crisp and there wasn't any major issues. I knew what to ideally expect in that case.
I later took one of my non-important Pis (I was trying to set up a pihole ad blocker, but it wasn't going nicely. I was able to take this away from that task for a while) and hooked it up to my TV with straight raspbian.
I didn't like how the display wasn't scaling nicely and the resultion refused to work. I also don't like the look of the Raspbian desktop environment.
Because I was lazy, I looked up alternatives. I wanted to be able to use Kodi as you do on Windows. I liked Ubuntu's interface and it wasn't a pain to set up, so I decided to try Ubuntu MATE.
It looked better and the resolution was also better, but it was slow. Unbearably slow.
When I was doing that research, I came across OSMC. It looked like it was more than just Kodi, and I had the ability to do other things. I decided to try it out.
It runs very smoothly, and it looks good. Also, it was probably more user friendly. I downloaded the youtube add-on and watched a few things.
The display was crisp, and even still having awful internet at this point, there was no stuttering. I can definitely recommend this.
Only problem is, the youtube add-on broke. My Dad seemed to be getting annoyed with the lack of TV and the existence of me doing things to the TV he didn't understand, so I decided that that was enough for that day though.
My Dad was happy with the TV, and he felt good about it. At this point, we didn't have sling.tv so we needed to wait a few more days.
Part 6: The real thing
After calling our ISP twice and needing to wait through 2 1-hour long calls, we finally got our internet sorted out and we've been able to remove our TV service. Just so happens that the day we got this sorted out was when I got my stuff i ordered. I was a bit miffed that I ordered the Raspberry pi 3 B+ right before the model 4 was announced, but I figured it wasn't a big deal. It ran smoothly anyway.
After transferring the memory card in, everything went smoothly. There was some stuff broken that I had to fix due to the internal IP changing, but it wasn't that big of a deal.
Part 7: How has it held up?
I started this project in late June/early July, and here I am in late September. Here's how it went and here's my thoughts.
The solution works great for my use case, however there's some instability regarding the plugins. The sling.tv plugin would occasionally break, and I'd just end up reflashing OSMC. Other than that, it's great. It's just like an actual thousand dollar smart TV at a fraction of a fraction of a cost.
Final part: Conclusion
I'm pleased with the results of this project. Would I recommend it to everyone? Well no, not exactly. It's not that it's particularly hard to set up, it's just that the OSMC platform is rather unstable. Plugins are maintained by other users, so the amount of bugs is highly dependent on what plugins you have. If you plan on using more popular platforms like Youtube and Netflix, I recommend checking this out. It's likely you'll find plugins that work good. However, don't come in expecting this to just work immediately. There's some setup and maintenance involved, however, I believe that it's worth the savings.