Home Automation and Home Assistant 101
I've been playing with Home Automation for a while now, well over 2 years, and while I did not have a chance to try out as much stuff as, say, Ben from BruH Automation I think I do have some things to share.
Home Assistant? Hass.IO? HassOS? Whats the difference?
This is the question that I get a lot on Reddit and Home Assistant forums. Unfortunately it's documentation fails to explain it explicitly and in one place, and we have a lot of confused people out there. Not to worry, it's actually quite simple. Let me break it down:
- HomeAssistant is a Python program for HomeAutomation. It's the main part of it, the UI, the Core, Components, Integrations, everything. You can just run it as a Python program installed from pip or in a virtual env. This is how it started and how we were all running it back 2-3 years ago. But now there's no point in using this approach to run Hass. And if you don't agree - then this article is just not for you, you know your thing and your reasons :) For most users it's not worth it though.
- Hass.IO was introduced later, and it's basically just a Docker version of HomeAssistant with Portainer-like hypervisor tailored to work with Hass. It adds some new UI options in Home Assistant and allows you to: Install AddOns (More on them later), Update your Hass with one click and some other useful things.
- HassOS was introduced even later (they used ResinOS first and moved to HassOS later). HassOS is a minimal Linux distribution that's just enough to run Docker and everything needed for Hass.IO. It's designed to be easily deployed on an RPi or similar SBC (Single Board Computer) or as a VM. While it's a very nice concept I personally don't recommend it YET especially if you're using Raspberry Pi - it is important to move your database off the SD card and minimize logging. SD Cards don't handle a lot of stress from constant read\writes to it, so RPi can become unstable and worst case - you'll break your SD Card eventually, not matter how good it is. For small installs it may work, but as your Hass install gets bigger with more sensors and data it gets worse. And HassOS does not provide you with tools necessary to adjust all that.
So I hope now you get a clearer image of what Home Assistant, Hass.IO and HassOS are, and how are they related to each other.
Each Addon is just a Docker container that provides you with some additional service. So it's natural to ask yourself - why bother if you can just install them on your own through docker CLI or Portainer? The answer is - each of (or most) Hass.IO addons comes already integrated with Home Assistant. For example NodeRed - you just click Install, and Start and seconds later you can already start automating. With regular Docker install you'd need to then manually integrate NodeRed with Hass. Nginx+LetsEncrypt addon comes with a nice simplified GUI which some people may like. And so on.
So it's just more convenient to install them as addons.
Hass.IO supervisor checks for updates and notifies you whenever Home Assistant update is available. You can then check changelogs and decide to update now or later depending on whether there is any breaking change. If I see breaking changes I usually delay update until I have time to fix it if it breaks.
Alternative is using Watchtower on Docker. But if it's automatic updates - you don't control when it happens, and your home automation can just break at any moment. It's bad. If it's manual - then it's still less convenient than just clicking "Update" button. And you'll likely also need to setup update notifications through Hass manually.
You can create your config and addon backups with one click and restore them as easily.
Installing Home Assistant
There are so many ways to install Home Assistant, it's hard for new people to choose.
- The proposed method is to run it on a Raspberry Pi by burning HassOS image on it. https://www.home-assistant.io/hassio/installation/ . I don't recommend this approach because it's not YET well designed to overcome the SD card stress, and ends up being unstable with a high chance of burning your SD card. So unless it's a small install with a few HUE lights and couple switches - this is not a good way to go, not YET. It's certainly is the easiest way to install it, though.
- I personally suggest using this Alternative: install on a generic Linux host approach, even with Raspberry Pi. You still get almost the same experience as with burning HassOS, but you have more control over the host system, because it's not as minimal as HassOS. You can, for example, move your sqlite database off an SD card to a USB drive and connect them with symlink (a more powerful linux version of a shortcut).
I personally run it as Hass.IO inside a Debian Virtual Machine on Proxmox on a Home Server made out of my old gaming PC. This way I have it separated from the rest of my Home Server stuff. What I love about this setup is that Proxmox and virtualization allow me to schedule full VM image backups on schedule, which are then uploaded to the cloud. If anything breaks, either inside of a single VM due to an update of my error, or even in case PC hardware dies - I can easily restore it all from a backup. If it's hardware - I can just buy\build a new server, install Proxmox on it, and after minimal initial configuration I can restore everything from backups. So instead of setting everything up again and spending a full time week or two on it I'll just spend a few hours, a day tops, to restore it.
Running Hass.IO in it's own VM and running other Docker stuff in another VM gives me the benefit of restoring Home Automation first, so I can then take my time restoring other services. Because Home Automation is something that my family relies on now. So it's a better WAF .