I'm using Domoticz running on a Pi.
I have a few zwave devices, so I have a gen 5 zstick connected to the Pi, to control my zwave devices.
I also have openVPN setup on my router. I use openVPN to access domoticz on my android phone from anywhere.
Domiticz is VERY tweakable and customizable, you can do a lot of thinks with it.
So until recently, it was of limited use. I only had a few zwave switches on it, so really just used it to turn on the lights for my dog when we were out, lol.
A little while ago, I found ESP Easy. https://www.letscontrolit.com/wiki/index.php/Main_Page
You program this into a little ESP card (I'm using Wemos Mini D1 cards from the wemos aliexpress store), and then add IO to the ESPs.
I have a garage door sensor/opener on one Wemos. It can close or open either of my garage doors. And I have a LUA script setup to send me and my wife a text if either door is open for more than 10 mins.
I also have a camera setup in my garage, and another one covering the driveway. So if I get an open alert, I can see what's going on through my camera system, then decide if I need to close the door. Camera is on a completely different system, using a PC running Blue Iris software to record and let me view.
I'm using magnetic reed door sensors to detect if the door is closed, and use a relay to open/close. Relay just shorts two wires together to open/close the garage door.
Have a door sensor on the garage freezer too, get an alert if the freezer door is open for more than a couple of mins.
Have another Wemos ESP on my spa. It measures the spa temp, and turns on my pump based on a timer, or from an air activated push button by the spa, or another button by the wemos. Also can turn on the heater. The pump needs a special relay that can handle a 1hp load, heater uses a smaller relay to turn on and off. I rewired some stuff when I did this, found some messed up ground and power wiring so it was a good to fix, but took a while too. Pretty big project, still tweaking my scripts to get them to do what I want.
Going to install a Wemos on my pool too, similar to the spa but the controls will be different because it interfaces to different equipment. This one will also control the backyard sprinklers. Need an IO expander here because this takes a bunch of relays, 7 out of 8 will be used.
I'm also adding a Wemos with a Piezo to detect when the washer and dryer are done. Will send a text to my wife when they are finished.
And yet one more to control the front sprinklers, and detect if my side gate is closed.
The nice think about these ESP cards is they are pretty cheap, and since they have wifi they are easy to put anywere. I am using USB plugs to power them.
For scripting, there is a tool called dzVents that makes it easier to write LUA scripts for domoticz. I know just enough sw to be dangerous, but am slowly getting the scripts working.
Once you have domoticz and one wemos running, reading a switch and setting a relay, its not too hard to add more. Then it's just up to you, and how much you want to do.
Domoticz wiki here http://www.domoticz.com/wiki/Domoticz_Wiki_Manual
You can also inteface domoticz to alexa and echo and I'm sure there are others.
Openhab is another HA software that has a large user base. Openhab didn't work with my old zwave switches, so I switched to Domoticz and have been using that.