HomeServer Projects

HS3: 2020 update

Well. 2019. Long year, in which I had a little time for my personal projects, unfortunately. One of my new year, new me things is to turn that around and spend more time on the thing I enjoy the most, including coding, of course.

The main con of having too little time is that you make shortcuts, which lead to the technical debt. That was something I had to deal with. HS3 was therefore almost rewritten, which in the retrospective was a good thing – taught me, that you cannot rush everything, especially the software design. Now, with that knowledge stuck in my brain, I present to you 2020’s version of the Home Server project.

The main screen

The simplified main interface of the HS3

The main screen did not change that much. I’ve made it more readable, removing elements which were not that interesting to the user – like network or storage details. The application menu was removed, replaced with a global one on the left side of the screen.

Today’s date, a few details about the day, the weather, and the completely new feature – the commute time. Users can set up the home and work addresses in the user’s individual settings. The app will then display commute time using Google Maps’ Directions API. This is a paid API, but Google offers you $200 monthly credit – which seems to be more than sufficient for the home use.

You can also see there’s quite a few new apps.

The file manager

The file manager. Oh boy. The things I did for it to work nicely…

So, the interface has changed, of course. It now uses the entire screen, and will display image previews, if the file happens to be one. Drag&drop is still there, looks nicer, does not take the entire screen and will go away, if you decide not to upload anything.

The app buttons are now situated on the top bar, which saves a lot of space on the screen. Also the top bar is sticky, so scrolling the page will keep the buttons visible. It’s a handy thing, especially since the directory listings can go on and on.

Other thing that FM now has is new file handlers. That… was painful. Some of the file types just do not play nicely. If you thought dealing with user’s input is a mess, try to process some user files.

Just kidding. Don’t.


Ah, the weather. This is the part of the system I have the most fun with. It’s always a juggle between whether to display live, the current data or the forecast.

This time around I did a mix of all – the header displays the current data – which is the last reading from the openweathermap API, cached for an hour. Then the Current conditions section displays the live data from the sensors – kudos to my friend’s service –

The Today section takes the data from the forecast endpoint of the OWM. Here you get the values for the day, the hourly forecast and the loved by everyone charts.

And there’s the Next days, which show you a forecast summary for the incoming days. Click on any one of them will open a page for that day, which looks exactly like the starting one (well, maybe except the header).

There’s also the Sensors app, which shows the live sensor data, plus couple of other bits, like the CPU temperature. I’ve added this when the HS3 was still running on an old laptop, which tended to overheat when heavy loaded. I’ve kept it, because it looks fancy.


The camera’s live view

The cameras have not changed much. The preview takes now much more space on the screen, so it’s easier to see any details. Other than that I’ve added some fancy JavaScript to make sure the transmission will reconnect if the connection was lost.


The movies module can scan your movies folder and display the details for the files. It uses Simkl API to identify movies based on filename and omdb api to get the details on the specific movie.

If the movie files are supported, you can play it directly in the browser, if not, you can select to transcode it. That will add the file to the queue and transcode it to the .webp file.

I find it a great way to keep my DVDs backed up.

The TV

As of now I call it a failed experiment. Does not work and I am annoyed enough to not touch it for the next couple of months.

In principle, all the TV module should do is to play the TV channel from the internet stream. Unfortunately, during the development I found out, that most of this type of streams are using codecs not supported by the browsers.

What I have tried so far is transcoding the stream live, in the browser, using JS. There’s some nice libraries to do just that, yet none I’ve found seemed to do the job.

The idea was to be able to play the TV when abroad, or just lazy enough not to get up from the computer and put the TV on. I might pick it up in the future.


This is just a basic notepad app. I’ve made it because I don’t want to pay for yet another subscription for the app to take notes.

I mean, I do still take notes on paper. It’s just more convenient to save stuff like links electronically, though. And other stuff.

The app saves the notes automatically. Every time you make a change, the note will get saved in a couple of seconds. Making another change before that will stop the countdown and wait for you to finish. This way I’m not hitting the server with a request every time the user presses a key.

There’s also a Wiki app, but it is just like notepad. Instead of the editor, you write everything in Markdown and have a search. I find it nice to put some info which will not change in the future and I want to keep it.



The recipes module got a nice redesign. It now has a featured recipe function, which takes a random recipe every half an hour. The rest of them is listed below as cards.

The recipe view has changed a bit. The picture is now cropped, so it takes less of the screen.

I plan to make another, complete overhaul of that module. I have some ideas I would like to try, but I’m not sure yet which ones will I use.


The downloads have come a long, long way. I’ve tried to make it myself, I’ve tried using APIs and stuff. And I’ve given up. That is until I’ve learned about Aria2 WebUI.

So, basically I was looking for a way to remotely download files. As in – I’m in the office or on the road and want to download a big file. I want to copy and paste the URL and forget about it. The file should be there, on the HS3’s network drive, when I come back home.

And Aria2 does just that. You install the service, configure it a bit, and voilà – it has an API. Then I’ve integrated WebUI into the HS3’s interface. I mean, at this point I could use the API myself, and I just might in the future. But as of now, I’m just lazy. And it does the job.

The torrents is now redundant, since Aria can download torrents. I might remove that in the future.


The network app got a few new features. First of all, the interface is a bit more readable. Second thing is the Wake up option – this allows you to send the magic packet to the selected device and use Wake On LAN – power on the device, if it supports that feature. Personally it helps me, if I need to remotely access my PC.

If the device is configured, you can add the address to the device’s web panel. The HS3 will automatically put the IP address of the device in the web panel’s address.

The search on this page is what I like to call a live search. Basically it will filter the devices in the user’s browser using JavaScript. Saves time doing the requests to the server. That would probably not be the best option for large networks, but somehow doubt the Home Server will ever be used in the corporate environment.

The addition to the Network module is People. What it basically does is a check whether the device assigned to specific person is connected to the HS3’s network. If so, marks that person as currently at home. Works great with smartphones 🙂


Ha, back to the roots. A long, long while ago, when the HS was running on a Raspberry Pi and was a print server, I’ve had a basic web UI to remotely print documents. It is now back!

I mean, this days I just have a network printer (who doesn’t), but it feels nice to be able to print something at home from any place with internet access.

Come to think of it, a lot of this features are there, because I want to do something when I am not really at home…

The hardware

The last bit, but kinda, the most important. I’ve changed the platform which I was using to run the HS3 on. Please welcome Wyse Z90D7.

I’ve got an aftermarket unit for cheap and modded it a bit – upgraded the RAM, installed bigger SSD, soldered in the connection for the second drive and connected 1 TB 2.5″ SATA drive, which I mounted to the case. I had to be careful, as there is not much space inside.

Why Z90D7? Well, it has a dual core CPU, 1 Gbps network, 2x USB 3.0 ports (and four USB 2.0). But the best thing about it is the fact, that the unit only draws 23 watts of power. That’s much less than an average laptop! So, low energy consumption and fast network speed. Exactly what I was looking for.

Now, after half a year on this hardware, I can say that I’m happy with it. I was worried about the lack of active cooling, but the heatsink seems to be handling it all quite well.


This new year I already have some new ideas that I would like to apply to the HS3. I would like to make it more mobile-friendly than it already is, like, make the interface to be mainly used on the mobile devices. I would also like to integrate some smart home solutions. I’ve got some sketches which I plan to try, but not all of them might work. I am however looking forward to continue this project.

In other words – see you next time!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.