I know python...I don't know all of the config variables for the yaml language they encourage you to write
Additionally there are multiple apis you can use to interface other than the front end at https://home-assistant.io/developers/api/
Also the HA front end just calls those backend apis, so if you "emulated" those you could use it as a drop in for some other backend (in theory)
One of them is hooked up to a button on a humidifier in my house. I pulled it apart, and just solidered it to one of the buttons and just have the esp8266 respond to some lan rest commands. Using Hass I hook that up to the nest's indoor humidity sensor and it auto turns on when needed. Then I grabbed a small load sensor and hooked it up to the ESP8266 to every hour or so send the load value back to Hass for the water tank in the humidifier.
So now I also get notifications when I need to fill the water reservoir!
Most of them are little things though. One is solidered to the light in my oven that shows if it's on or not, and it can notify us if we leave the oven on, another uses a very hacky (literally 2 paperclips!) Short sensor to say when I open a drawer next to my desk. If I haven't opened it by 9:30 and work is on my calendar, it will notify my phone reminding me to take my medicine!
Once you have the major components setup in something like Hass, and you've worked through the headache of setting up the esp8266s, it becomes really quick, and there are so many uses for them.
My next idea is to put a load sensor in the center post of my chair and notify me if I've been sitting for too long (and maybe of the sensor is accurate enough, maybe weigh me every day? I'm like 90% sire it won't be though...)
It's by far one of the most well-managed community-driven open source projects i've ever used.
All of the "components" are just small-ish python programs that contain mostly "glue" code, and they are required to use 3rd party libraries to actually implement the real work. This spreads the workload out across many repos in terms of breaking changes and help, and makes it much easier to contribute back to (you aren't contributing to a massive monolithic repo, you are contributing to a small 200 line python library with 20 stars on github, much less pressure!).
Because of this architecture layout, anything that has a python library that can be consitered part of "home automation" most likely has it implemented already. In my setup alone I have:
* chromecasts
* 2 different smart TV brands
* many zwave switches (run through a vera, not using zwave directly)
* many zwave door/window sensors
* multiple ip cameras
* a wifi thermostat
* a few IR controllers for "dumb" IR devices
* phone/device tracking (which keeps all the data stored locally)
* usps/ups/fedex package tracking and delivery notifications
* network speed monitoring
* have-i-been-pwned monitoring and notifications
* weather
* a 3d printer's completion percentage
* a google home
* an amazon echo
* ups runtime monitoring
* multiple esp8266 based sensors and switches for various hacked together things
* and more that i'm probably forgetting
And all of it is processed locally (when possible), stored locally (in a postgresql database), secured via TLS, available on any browser anywhere, and on a server I maintain and manage (with the help of some automations I created in hass itself). And speaking of automations, it's python, so they are basically unlimited. I have an automation that will notify me on my phone if it will start raining at my phone's current location before I can get home, and only while on my motorcycle.
It's not perfect (it's pre-1.0 software, so there are still semi-frequent breaking changes, and configuration is mostly manual still via yaml files), but it's been a such an amazing experience.
Home Assistant is the reason why I love IoT.