I wrote my own smart home software
renato.athaydes.com
renato.athaydes.com
It used to be quite fragile but these days it's gotten a lot better. Still a lot of learning to do, someone with no experience in yaml or understanding under lying tech will struggle at first. They are pushing for UI setup for most things now so it's only a matter of time before it's far more accessible.
I update only when there is some feature I absolutely need to have. And even when there is a new feature, give it a month or two to mature before using. I run a specific docker tag with auto-updates disabled. The instance is not internet accessible, so less care needed for security patches. When there is an exciting new feature, I apply that excitement to the busywork necessary for HA updates, and power through.
Furthermore, I use the built-in UI only for administration purposes. Run a custom react app that talks to HA via websocket/rest APIs. Those are pretty stable in my experience. Same with YAML configured automations.
Sounds like a lot of work, but I feel that it's offset by someone else writing the integrations with 3rd party services. When I want to control my new robot vacuum cleaner from my custom dashboard, all I have to provide is the UI. Someone else has figured out how to talk with the vac APIs, how to authenticate requests, and what to do to avoid getting rate-limited by the 3rd party service. I have to deal with only the HA quirks, not every 3rd party service quirk.
I get where you are coming from, but for me updating hasn't given me any issues since about a year or so. Especially if you stick with the .2 or higher releases. Those are really stable.
Personally I haven't had any issues for a while now, prior to that it was the Python upgrade and all the Z-Wave changes that caught me out. That's all stable now though so updates don't stress me out much.
That said, in the last year or two there have been sitting updates that broke things — several were vendors updating their integrations.
There pretty good with announcing any big changes in their blog, here's the latest one: https://www.home-assistant.io/blog/2023/05/03/release-20235
When you consider the lifetime of homes, the hardware, etc it makes more sense for HA to have an LTS branch than almost any other piece of open source software.
I, for one, would really appreciate getting bug fixes, security updates, etc over a span of years for some installations. HA development pace is very impressive but the breaking changes can get old really fast, especially when you consider how much you can come to depend on the (ample) functionality.
When it comes to doing updates I typically allocate at least a few hours (just in case) to work through any breaking changes. I usually update ~monthly and like any rolling release strategy it helps minimize the number of breaking changes you experience at any one time but it's still a somewhat precarious situation.
The fourth or fifth time you have to explain to your spouse that the lights in the living room can't be turned on because the app is updating or the server is down or whatever, you're going to really be feeling the desire to remove all the smart home stuff and go back to kerosene lanterns.
Which is one of the reason that I've slowly begun to phase Hue bulbs out - they work very well for what they do, but they can fail in annoying ways when the Internet is out, requiring you to get additional switches that can talk their protocol even when Siri isn't working, and at that point, why not just use a "smart switch" and dumb bulbs? At least that fails to just be a normal switch.
I think this is just a better idea all round, although possibly not for bulb manufacturers' share prices.
The bulb however need the ability to charge color temperature and brightness depending on what I want, and a smart bulb seems best (though dumb dimming bulbs can to work well enough)
I wish the Hue bulbs worked with a actual smart switch (I have some of the snap on cover ones and they are "ok" but unsatisfying long-term.
https://www.philips-hue.com/en-us/p/hue-tap-dial-switch/0466... is silly, it's battery powered. The old one (Hue Tap) was great, because it used the force of the button press to send the signal needed: https://hueblog.com/2020/07/27/hue-tap-disappears-from-the-m...
So of course it's dead and gone :(
With HomeKit this all also works as long as my local network is up, with no dependency on Apple servers except for off-network access.
My ISP has had several outages, but I haven't run into the issue of "the lights don't work" at all yet. Only thing approaching this is I've automated them to turn on/off when I arrive at and leave home, so when I have people over and step out to run a quick errand all the lights turn off while they're at my place.
But it just doesn’t provide “value” compared to the cost, so I’m not going to rip it out but I won’t maintain it further or expand it.
I moved to Lutron’s Caseta line specifically because they work without internet if something does happen to my network.
I would recommend to take another look at HA if you get the chance. Especially within a VM (or bare metal) it's a really good experience.
I've been using the Docker container for a couple years without incident. Like you, the only integrations that occasionally broke have been custom components.
While I agree that automations and scripts have been very stable, I've never really been a fan of the new automations and scripts UI, though, so I just stick to editing the YAML definitions manually. Great to have that option.
Before I ran HA Supervised [1], but that was a pretty poor experience. It broke every so often because of some sudden software incompatibility because Supervisor was silently updated in the background. And it really broke everything instead of having a grace period and/or sending me a notification.
> I've never really been a fan of the new automations and scripts UI, though, so I just stick to editing the YAML definitions manually.
Same here. Although things seem to improve in the next version with copy-paste support in the Automation Editor [2]. I would love being able to edit my YAML automations though.
Did you also known about a little known feature that you can setup different automation sources? Just like this:
automation: !include automations.yaml
automation foo: !include_dir_merge_list automations/
automation bar: !include_dir_merge_list automations2/
Although not _best practice_ per se, you can have both UI and YAML automations at the same time. This is especially useful when you want to use Blueprints [3].1. https://www.home-assistant.io/installation/linux#install-hom...
2. https://rc.home-assistant.io/blog/2023/05/31/release-20236/#...
3. https://www.home-assistant.io/docs/automation/using_blueprin...
No way.
In that configuration you only need to update the software when it no longer meets your needs. If it's working then there's no need to update it.
It's getting there. But it's not quite there yet. Last I checked the logging still saves every change, it's not easy to set up so that it will only save average/min/max over time to save SD wear.
Creating new integrations is easy but still not quite a five minute job like it is with my extension API(https://github.com/EternityForest/iot_devices).
I don't think their integration API has quite as much of a "Narrow waist" as I would like. It seems like extensions are somewhat tightly coupled(I looked at trying to make an adapter to use HA extensions in standalone scripts but it seemed very hard).
That doesn't exactly seem ideal for avoiding brittleness.
And updates still seem to break stuff on HA occasionally, plus it's a large platform that I just haven't seen many people talk about aside from enthusiasts, who tend to downplay problems with FOSS apps.
But yet, having custom software in one's life is generally IMHO far more of a liability than an asset.
So what I actually do is just use YoLink and Google assistant for everything I possibly can, and use my custom software for video recording and unusual stuff YoLink doesn't do, and I'm pretty happy with that so far.
I'd love to have a one size fits all "If it need automating, use this" platform, and HA seems like it's got the potential.... but just using the YoLink proprietary platform is the lazy, trouble free, super cheap way.
HA, out of the box, also seems to burn up solid state storage due to the absurd amount of logging.
HA looks sexy though, and I think that entices folks. It's nice to have a star-trek style dashboard running on a tablet or whatever. That's not really appealing to me though. I like my automation to have beautiful software, be well tested and reliable, and disappear into the background of my life. Being a SW guy at my day job, I really don't want to play SW engineer on the nights and weekends.
Home Assistant is the big one, biggest community, most integrations, you can pay for their cloud stuff to get easy integrations to the big corps above. They also have a dedicated device they sell you can use to run HA.
Domoticz is a bit of an odd bird, I never figured out what was their value propositon
OpenHAB is the one I'd pick if I had to install a system for someone else than myself. It's not exactly easy to configure (the object/entity structure is a bit weird IMO), but it has a pretty decent amount of integrations and it's rock solid German engineering made with boring old Java.
If you want control, my suggestion is to use HA only for the integrations and do all of the brains somewhere else. Either a self-made program that pokes HA using its API or directly via MQTT or Node RED.
Simple, rock solid functionality. If you want more, write scripts.
I really like the approach.
Don't ever open that C++ code base unless you have a barf bag.
I started making contributions and gave up because I have better things to do with my time then ruin my soul.
I will also note that they stole the MQTT protocol from Home Assistant - so at least they need ideas from elsewhere. (ie openzwave died so domoticz needs to rely on the same NodeJS subsystem infrastructure of HA)
I love the concept of domoticz - lua, but my god the architecture and implementation is a tire fire.
Is that better or worse than a dumpster fire?
https://github.com/domoticz/domoticz/issues?q=crash
segfault, leak and hang are also fun ones. Apparently the massive memory leaks in the python integration has never been fixed. Not surprising, one look at hardware/plugins/Python*.cpp is bad for your health.
I'm still using it. Upgraded from the C5 to the C7 a few months ago. I use almost entirely Z-wave devices, and the HomeKit integration built into Hubitat makes it easy to manage them all like native HomeKit devices.
Managing probably any Z-wave mesh isn't something I'd recommend for a non-techie, but it doesn't generally requires consistent maintenance. And with Hubitat, it's a small standalone box that does OTA updates.
For me it fills a pretty big gray area between mass market consumer ecosystems and Home Assistant.
I'v gone from home assistant to smart things to openhab and its been stable and simple to set & forget.
It's great to setup via the UI, easy to backup and restore as once you actually start to build it into the foundations of your house you start to value the stability of it
I’ve tried developing custom components for HA and it was so bad, there’s no docs at all and Python being untyped language doesn’t help either. Just out of curiousity I’ve googled OpenHab docs to understand if I could achieve similar there and their docs are awesome, full and well written. (and it’s Java so half of the code IntelliJ will write for you)
We package Ignition as a docker image, an installer, or just a simple zip archive you can decompress and launch, so it's easy to self-host or deploy to a cheap cloud tier. The biggest downsides are that there will be a bit of a learning curve to using it (as with any new tool), the documentation being focused on commercial use cases, and similarly, we don't offer first party drivers for common home protocols (zigbee, zwave, etc). But we have pretty good docs, a free online learning platform, and pretty active forums. 3rd parties have written various drivers for home use.
I'd love for more in the home automation/maker space to know about and use it. We don't monetize maker edition in any way, and so don't really promote it, but I'd love to see the home userbase grow (and hopefully by extension, the hacker/maker community who might be able to help contribute to drivers and other resources).
It's an open platform built on the JRE, with a public sdk and example modules (plugins) and related tools available on github.com/inductiveautomation. The software is in use to automate virtually every industry, so it's fairly well tested (at least to the extent that a toolkit can be).
Maker Edition info is available at: https://inductiveautomation.com/ignition/maker-edition
Disclosure : work for inductive automation, but otherwise don't have a financial interest in people using Ignition Maker Edition or anything of that (aside from any side effects that come from broader adoption in general). My selfish interest is in a larger home use community so there are more cool projects to check out, resources to share, open source modules published, etc.
All statements here are my personal views.
(*) Example; ESP32 with HomeSpan
I guess a good trajectory would be to start with Homekit like you did and then have the option of hosting that bridge yourself via Homebridge when you want to expand or go more advanced.
I'll give some examples:
- HA occasionally freezes for a few seconds during automation runs, though system load, IO etc. look fine. No idea what's going on. It should have more than enough resources. Both instances do this (on different hardware).
- After every restart, ZigBee switches only work after the second press (the first message shows up on MQTT, but is apparently ignored). This is especially annoying if we're having guests when HA acts up; also, some switches use double-press for special behavior.
- Sometimes an automation or two just don't trigger until HA is restarted, but everything else works (happens about once every two weeks).
- Outlets and sensors may be gone from the network for a week (e.g. accidentally left unplugged) but will never be shown as stale in HA.
- Most automations I want devolve into huge YAML messes or huge NodeRed graphs, since I seem to need a lot more flexibility than other HA users. I've found it's a lot easier to just write a script for these, but the developer experience of the various scripting plugins leaves a lot to be desired. Also, yet more flaky abstractions.
- Why is it that checking whether a scene is active is so hard? That's just the sort of heavy lifting I expect HA to do for me.
- Every release of HA seems to add new little quirks; apparently, lots of people in the community don't even bother updating regularly?
- It's very hard to know what's going on inside HA; it seems to log every last thing except for what I'm looking for. I usually just look if MQTT sees the right things, then restart HA until the issue I'm having disappears. That this strategy usually works is problematic in itself.
All in all, it feels more like training a cat, not the hands-off appliance-style setup I'd like to have, and it takes up way too much of my limited spare time.
I really like HA for the user-facing part, great app, great web interface, even supports Apple Watch. I'm comfortable with writing code, perhaps a bunch of scripts against MQTT and the HA API would be the way to go for me, or perhaps something like AppDaemon.
I've also tried using Apple Homekit with Homebridge, and while that was rock solid, hands-off and very reliable, it doesn't have the flexibility I want either.
It feels like there isnt an understanding of something like MQTT - I want automations that listen to events, which include data in the payload.
"Subscribe to a topic" and "filter relevant happenings" seems conceptually so easy.
Building a UI to do this, harder. But adding a (bad) widget system of the actions? Hmm.
Its not IFTTT, it should not try to be. Provide visualisation tools to manage what listens and what broadcasts. Have black boxes of logic, just mandate they must respond in a particular way.
Leave the rest to programming. And if non devs are frustrated: help turn them into devs
After setting up a HomeKit Bridge integration, you are given a QR code to connect from the Home app. The code appears in the Notifications tab. I missed the code at first so the Notifications tab was empty and I thought that there should be a button to issue another one? After looking it up online, apparently the way to go is: delete the integration, create it again and be more careful with the Notifications tab.
Then if I want another person in the house to be able to control the lights from their device, I can't show them the code. This makes me wonder whether the HomeKit Bridge supports only one connection or if I just have to screenshot the QR code? It can't be that bad, right?
Other than that, a great piece of software. When I got the smart lights it bummed me out that I couldn't control them with Home and had to use some third-party app to do it so eventually discovering HA significantly improved my experience.
Regarding sharing, I tried it, but it says "A home hub is required to add or remove accessories, scenes or people". I looked it up and apparently you were able to use an iPad as the home hub which you'd share access to, but since a certain version of iPadOS/iOS it can only be either an Apple TV or a Home Pod. I think Apple is focusing on being able to access your home setup anywhere so it requires a device that is supposed to stay at home all the time. Still a shame because it hinders offline-first setups like mine.
I've mostly settled into using HA for basic home automation and backing away from lots of or complex automation. There's a certain amount of time I can spend and anything beyond that feels like a job that isn't adding much marginal value at home.
One small tweak that helped with dead/unavailable devices. I set up a simple daily automation that pings all of the Z-Wave switches throughout my house. Was having lots of problems with one or two occasionally looking dead but the once-per-day ping helps.
The only thing I can to do was a little clicking around when the z-wave implementation switched over to js but the upgrade path ended up being straight forward.
Being a SW guy at my day job, I really don't want to play SW engineer
on the nights and weekends.
That's exactly why I fell out of love with home automation. The commercial stuff isn't better than HA. I don't want to care what brand my zigbee lights are. I don't want to come home and debug Siri or that god awful Hue app. I just want to turn my fucking lights on.Home automation promises Star Trek and delivers the bastard offspring of 2001 and Galaxy Quest.
The only "smart" devices I have are for a room where you want a switch for a lamp but there isn't a switched outlet. Add a smart plug and a physical switch, done. No hub, no scripts, no automation. Its cheaper than buying smart bulbs which usually require some manufacturer's hub/app/nonsense.
I think this is a cool way to relate to technology. Is there a word for technology that people enjoy because it's broken all the time?
I have a good friend who has been in management for twenty years, and he maintains a complicated home network like he was head of IT for a circa-2000 small business. Mail server, printer server, FTP, etc., mostly bare metal with a couple of VMs for things like a Windows domain controller. The most modern thing he has is a media server so he can buy music and movies on physical media.
It takes a moderate amount of tending, and once a year or so, something major breaks and he has to spend a weekend or two tinkering and fixing things, solving a complicated puzzle of software and hardware compatibility. I think it's a therapeutic outlet for him. If you talk to him, he'll give you complicated reasons why the whole thing is extremely practical, but nothing that would justify the dozens of hours per year he puts into it. I've probed for how he feels about it ("I bet it's nice to get hands-on every once in a while, eh?") and from his answers I'm pretty sure he has no awareness of it serving any emotional purpose for him. I bet it drives his wife crazy when she wants to watch a movie and he has to run into his office to tweak some configuration, but from my distance, I think it's pretty cool.
What I can't stand is the subset of people who keep trying to trick the rest of us into using their tinkerware, the "install Linux for your parents in 1999" crowd. When I bought a house seven years ago, I was really excited to set up some home automation, but after a couple of weekends of research I realized it was going to be a full-time hobby. I remember in particular being on Reddit and looking at the comment history of someone who had a pattern of saying "once you get it set up it's relatively pain-free." It was obvious from his history that it had been basically a second job for him for over a year. I decided to live in an unautomated home and invest my energy into other things, and I'm very glad I did. What drives people to lie about things like that to people who won't enjoy it?
Have now made the jump to HA so we will see how long it can go post setup without falling over (and adding some things) but 5 years before the first issue (and so far I have some hue bulbs going on 10 years) is solid enough imho
So it can be done and is not always a lie.
I enjoy automating and doing sysadmin things for fun, but I have a life and young children. I don’t have time to tinker as much.
Home Assistant has come a long way and has been extremely reliable the last few years. I mostly use it for automating camera detections and motion/contact sensors for security.
You can be as hands on or hands off as you want to be.
In general I’ve found if you want to do any sort of automation whether store bought or tinker-level, you’re going to be wasting some time.
Not my favourite discovery and required a whole migration plan. Now I’m seriously reading the above article and thinking after (4?) years it’s time to leave HA.
There's a lot of home devices beyond ZigBee, with a large community supporting them. Beyond ZigBee, we will see Matter devices also cropping up over time.
I do like the idea of being in control of one's automation software. The risk that I've seen though is when one ends up spending more time on building the software than the automation, which can happen when one writes their own integrations from scratch (i.e. not using Z2MQTY, ESPHome, HA, etc).
With that all said, I like HA as the central programmable hub, but have come to dislike the proliferation of ecosystems that require add-ons I'm mostly looking at Sonoff devices that tie you to ewelink and phone home in opaque ways.
I'm personally probably going to go with Matter for store-purchased and DIY devices. I'm already nearly done with our first DIY devices at home. A light strip for the kitchen, that has some sensors for useful automation.
Not rolling my own solution makes it easier for me to build a few devices for friends later.
On the other hand, it's absolutely crap at doing complex automations. The Web UI gives me heartburn any time I need to make it do anything else than simple "if temperature is over 40 on this, do this" things.
The UI does make complex automations _possible_ for non-programmers. But for me, every time I click on the UI or attempt to "program" using the convoluted YAML syntax I keep thinking "this would've been like 5 lines in an actual language...".
Thus: I use Node RED for the more complex stuff paired with an external program I made that connects to the HA Mosquitto server and pokes stuff directly when needed.
An example script:
@state_trigger("security.rear_motion == '1' or security.side_motion == '1'")
@time_active("range(sunset - 20min, sunrise + 20min)")
def motion_light_rear():
"""Turn on rear light for 5 minutes when there is motion and it's dark"""
task.unique("motion_light_rear")
log.info(f"triggered; turning on the light")
if light.outside_rear != "on":
light.turn_on(entity_id="light.outside_rear", brightness=255)
task.sleep(300)
light.turn_off(entity_id="light.outside_rear")
It's what made me ditch node red after going down the same path.The Home Assistant community seems to have the entire gambit of people who can't code at all, the people who never coded professionally and make riduclously complex things like the fabled Excel accountants, to the professional developers doing stuff for fun, but nobody actually shares anything worthwhile outside of awful YAML and youtubes about awful YAML.
But i have a nagging feeling that i should probably use PyScript instead.. If anyone has a more thorough analysis i'm open to hear it..
Auto complete for discovery just refuses to work in PyCharm and VSCode for me. The way PyScript is setup seems to be a strange bespoke system that kind of breaks the import system between files, type safety only sort of works sometimes, and just other quirks where I seem to just have to get used to all of the red underlines if I want to use an IDE as part of my development process.
But it still seems to be best option for allowing me to use any libraries in the ecosystem, gets rid of boilerplate, and the author is actively maintaining it. I didn't really find any other viable options outside of Python that would let me actually code my automations without yaml or a GUI.
I was very excited when I found a Kotlin implementation, KHome, but by the time I found it, it was already a seemingly dead project.
My PyCharm just shows those types as unknown, not as errors. I get auto completion & type checking for all the code I write myself.
It's also important to note that PyScript isn't regular python. Instead it's an interpreted script[1] that is compatible with the Python syntax. This is unfortunate, but enables most of the magic of PyScript which otherwise would not be practical.
[1] https://github.com/custom-components/pyscript/blob/master/cu...
It's just maddening that I can't seem to figure out how to get that one part working. I end up using a mix of the notebook and going through the developer UI, but wish I could figure out that one quirk.
Even if I use a UI for making a modification sometimes, I want to be able to commit a clean diff like:
sensorLightBackdoor:
- timeActive: range(sunset - 20min, sunrise + 20min)
+ timeActive: range(sunset, sunrise)
Or whatever. Which obviously I can do with python, as long as it's stored neatly in config in a .py file, or even if embedded in HA yaml or something?In a `pyscript/*.py` file, so you can open it with a full blown IDE and use all your usual comforts, and commit the results to git.
Personally, I gave in and installed HA in a VM, because it seemed like the least effort way to use HomeKit capable devices without purchasing Apple products, and I was able to connect the HomeKit things, but I can't figure out how to do what I want with them, so I not sure what I got. Ideally, I want to make my 'smart' thermostats a bit smarter ... better coordination between zones, different minimum fan runtime rules than I can get from the thermostat, loosen the setpoints when the tv is on or someone is on the phone, so the hvac noise is less bothersome, etc. But I can't figure out how to get HA to track the fan runtime, so all that complexity is like ugh, I'd be better off doing it myself, except the homekit stuff isn't sensible either.
In my case I wanted to play with sensors and the pico w. A pi with a sprinkling of c#, Nats, and influxdb connects, controls Ikea stuff, and reports all the things.
Micropython on the pico is not my favourite part of the process but it might have been faster for me than just writing in c.
As a result the sum total of smartness in my home is... A little STM32 Blue Pill that reports whether or not the basement door is locked or not. Yay?
Edit: oh and the raspberry pi that measures the moisture in the soil of my beloved Norfolk Island Spruce and tells me over IRC when it needs water.
You can ditch their whole OS, management and orchestration/containerization stack, and just run it as a Python application in a virtualenv (they call it "Home Assistant Core"). I recommend it, it's much better than trying to keep up with their (mediocre, imo) distribution. Even if you don't want to manually setup a virtualenv, you can run it as a single container.
I am still trying to grasp what it would improve to my life
Some examples: 1. I have a smart lock on the front door. Now when friends/family want to visit and I’m not around, I don’t need to hide a key that they then can lose. They just get a code that I can have expire when they leave. 2. I am constantly either too hot or too cold. Being able to change the thermostat from where I am means I don’t have to interrupt whatever I’m doing and walk across the house. 3. Same with lights. I can climb into bed, tell my phone “goodnight”, and it shuts off all lights and locks the door.
Again, nothing that is “necessary”, and sometimes I feel lazy because of it, but it results in fewer interruptions.
The one use case I use that I can’t really replicate without smart home, is being able to remotely toggle power. Smart outlets mean I can hard reset an unresponsive server, camera, or other device.
I mean yeah, once the novelty wears off of having Siri turn off your lights to impress your boomer neighbours, or whatever, there seems to be no real "killer app" for home automation.
However there are a lot of small things I wouldn't mind having:
- The aforementioned "hey your tree is too dry" push notifications on my phone
- No need to get out of bed to check the downstairs deadbolt(s)
- Automatic and/or manually-controlled activation of garden bed hoses with some kind of zigbee solenoid valve or something
A basic smart plug does this for me. I hooked one up to a cheap solenoid that opens a valve when powered up.
It was very inexpensive and had been very reliable. It’s just on a TP-Link Kasa smart plug.
It’s also in HA so that if I forget to turn it off, it turns itself off after 10 mins.
I often find that "prototyping" these types of projects is fairly easy, but making them into a "product" that looks good and will be reliable is much much more difficult.
It was from a local electronics store (Jaycar).
It’s in a dry area so getting wet isn’t an issue for me.
I think I could make it quite tidy and waterproof if I needed too - the lower voltage makes me comfortable with that.
It’s been in use for several years now and has been rock solid.
1. My hallway lights come up at the correct intensity and light temp for the day every time there is motion. They also turn off at different speeds depending on the time of day. (at night, min brightness, yellow light, turn off after 30 seconds - someone is just waddling to the bathroom. in the day, full brightness, 6500K light, turn off after 5 mins)
2. I can control my AC remotely with my phone and it automatically manages itself depending on the price of the electricity (I'm on a hourly market-rate plan). If the price is low, it'll over-cool my house at night and cost for the morning.
3. Voice-controlled profiles for complex setups. Gaming = pull down the curtain on the window that shines on the TV, turn off a few lights that glare on it. Movies = all curtains down, all lights off. Even the one from the bedroom, because it shines to the couch in full darkness.
4. Smart switches that turn off lights that don't have a direct electrical connection.
5. A switch beside the door that turns off all lights and a few appliances in the kitchen that have no business being powered when I'm not at home.
HomeAssistant does the following for me:
+ captures all the weather stuff into one page (internal + external sensors combined with "official" weather reports) + automates the little fan heater to warm up the bedroom pre-bedtime if required (also provides all the controls on a page) + captures the oven temp probes onto a page (means you don't have to walk into the kitchen to check)
I can do all these individually but that'd still be a "smart home", just more faff for me.
Most obviously then use the manufcturer's default setup which is each manufacturer having their own "smart" apps for their gadgets. What's worse is that each of them tend to think that their apps and products should be at the center of the stack, so each manufacturer of window blinds, air cons or routers have their own (terrible) closed version of Home Assistant. But nothing properly integrates everything and you are left with one app to control your AC and another for some lighting and a third for your garage door.
So when I use Home Assistant it's really because I want to use less smart tech. I want very few smart features but I want to use just one app for the smart features I do need, and I want to avoid using an app at all if I can help it. So I don't want to dig up and use 10 apps for gadgets around my house. I have zero interest in voice controlling anything. For example I want the lights to switch off when I leave (arm the alarm). I want anything that would be an alarm (Fridge too warm, smoke detector beeping) to also go off in my pocket. That peace of mind stuff. That's easy with HA.
That said some stuff is really nice, but typically require more than your average "smart home". In my mind I've made a distinction between "smart home" and "convoluted home" devices. A "convoluted home" device would be something like an app controlled light. The simple one-step process of flicking a switch is now a multi-step process of unlocking your phone, finding the app, and turning it off. Sure it has more features like changing the temperature or colour of the light, but it's not "smart".
The "smart" part of a system comes with interactions and logic between systems. An example that I have in my house is that my phone sends the time of the next alarm and an event whenever it is connected or disconnected from a charger. So half an hour before my alarm goes of the lights in the bedroom slowly dim up, waking me up gently. When the alarm rings it will turn on the rest of the lights in my house to full brightness and white light. Then in the evening, at a set time, the lights will start getting warmer, and then dim down helping me get sleepy before bedtime. And then when I connect my phone to my charger at night the lights in the whole house turns of. This is "smart". It means I barely if ever touch light switches any longer, don't have to remember to turn of lights at night, and that my natural day/night cycle works better.
With presence detection based on whether the phone is connected to the WiFi you could also turn lights off completely while I'm gone. With controllable ovens you could extend the system to turn down the heat to save power. The list goes on and on, but the thing which makes it all possible is not so much the "smart"-ness of the individual device, but the combined "smart" of all the interconnected systems.
My first home automation was smart switch for upstairs AC so could turn it on without going into the heat. The main motivator for Home Assistant was turning on porch light from outside. Now, I mostly turn on room lights from remote switch across the room; time saved is small but it adds up. It is also handy to control things with voice.
Home Assistant has enabled some automation and remote control. I have lights scheduled to turn on in evening when away. I have turned off lights from Uber on way to airport. Or turned on AC when house got super hot.
That's actually why I landed on Home Assistant. It's Open Source so I know that if things ever go bad someone will fork it and I won't have invested deeply in a dead-end ecosystem.
Getting started for me felt like the first time I learn a new board game. The rules seem incomprehensible and everything is unfamiliar, but that's the price of trying something new. Eventually the concepts started to click and I saw how things fit together.
I will say that telling my spouse to install an app with a web GUI was much easier than it would have been to get her on IRC to control the house.
I did for the longest time, trying every alternative but I eventually embraced it. The modern docker container OS image runs perfectly fine on an old Raspberry Pi 2B and the modularized container architecture makes it easy to up/down grade parts of the system as needed. Add-Ons (e.g., Z-Wave, Zigbee, TP-Link, etc) are Docker Containers by default so they're easily maintained and upgraded by the core supervisor.
It is a lot of complexity that they have been progressively hiding behind a pleasant UI but it still has some rough edges. The complexity is due to the modular ability to support nearly every smart home feature out there.
False, i ran mine on rpi for 2 years now with many sensors. Zero issues and not even close to maxing out the pi.
> I have a strong aversion to Python due to its horrendous package management history (we use dozens of languages at work, guess which language is the only one that causes build issues all the time?). It’s a nice language, but for things like home automation, having build/dependencies problems is the absolute last thing I need.
Not sound reasoning imo, this is mangable if you know what you're doing. Clearly, HA doesnt have any problems related to this version management.
python -m venv /opt/venvs/hass
source /opt/venvs/hass/bin/activate
pip install homeassistant
boom done.I dunno; if the author is correct about this bit:
> The recommended way to run it is with a fleet of Docker containers (and they even tell you to install their own Linux distro to make sure all the large amounts of software you’ll need is managed more easily).
then, yeah, it's horribly over-engineered.
I tried finding docs to understand how to create a plugin to support a new protocol and didn't really find anything.
I also got turned off by the outright obstinacy of the support forum (example: https://community.home-assistant.io/t/mosquitto-broker-annou...)
Home assistant is not what I have in mind when I think "perfect for the job". It really is over-engineered, with (apparently) great plugin support, but very little in the way of docs.
If you're trying to mass market something (like Home Assistant) to non-technical people, containers are a dealbreaker.
OTOH, if you are selling something to technical people, containers are a feature.
Are you perhaps being sarcastic? Maybe sarcastically pointing out how much of a pain in the rear it is to run Home Assistant?
The type of homeowner who wants home automation isn't going to learn what "NUC" means, what "Docker" means, what "Container" means, what "Systemd" means.
What you said is the equivalent of telling the average car driver "It's not really that hard to replace the timing belt on a Golf 1. I just removed alternator, timing cover, lined up the marks on the camshaft's sprocket and the crank pulley, and slid the new belt on with the square-keyed-adjustment tensioner that it came with. Took me 30m".
I find, as I get older, that I get more critical of complexity. I'm even more critical when it's in a field I am proficient in, because then I can see how much of that is simply complexity for complexities sake.
KISS principle above all, when you look at products from really long term perspective and treat people as replaceable (which they always are and all will eventually leave), absolutely nothing trumps that. Unless of course somebody plays politics and create some cathedral for them to maintain, and only them. Which is behavior that should be recognized early and 'punished' accordingly.
HA is for DIYers, they should know a tiny bit of how systems work. Docker is really simple.
Yeah, that's how we engineers feel - if it ain't my eavorite/elegant language, BYO... Program :)
> overengineered
Yeah, I also ran off of RPI4 for a few years, along with MQTT, Nextcloud (+SQL), photoprism, bitwarden and whatever needed for proxying via nginx. I only migrated to better hardware because I wanted to browse my pictures faster, photoprism solved that even on RPI, but I wanted faster indexing and offline face recognition where RPI turned out to have too little RAM.
On normal load, my RPI would still have room for other containers.
Having HA within a container was a feature - not too much to configure and everything is isolated, so I can still run other services from RPI. And easy upgrades.
Me too, I like nothing about the language. Luckily, almost everything you do in HA besides contributing is not done in Python (by default).
But I love C#, so just in case there are others, I wanted to mention that you can write all kinds of automations in C# as well with NetDaemon [0]. Including full intellisense.
It obviously requires a script to run after you add/remove any in HA, but IMO it really improves the DX.
When I stumbled across an HN article describing a CLI app for the OpenAI API, I thought that is just what I was waiting for. Unfortunately, when I tried it, it didn't work for me. After a debugging session, I found a bug in the openai python package which led to my key not being used if I have ~/.netrc exists. Pretty much a demonstration of the "framework effect". The simplest things, read CLI tools, become buggy in subtle ways because you inherit every bug deep down in the dependency chain. I ended up implementing my own OpenAI API CLI client in just a few lines of shell. Much easier to review, and almost impossible to have subtle hidden bugs.
The author will almost certainly have less of their own maintenance to do since they are not beholdent to updates from dependencies than if they had gone with the more "well-supported" solution.
As long as they document it properly, it could work well for decades. Probably for longer than home assistant will be supported.
I have had a great experience with HA (unlike with OpenHAB which is a Java-based monstrosity with a data schema that is near impossible to figure out).
It's unfortunate that he went and rewrote an entire home management stack just because he dislikes Python.
Even worse, the justification for disliking Python, namely:
> It’s a nice language, but for things like home automation, having build/dependencies problems is the absolute last thing I need.
is absolutely not a problem if you run HA on a tiny dedicated box, because all of that stuff is completely handled (and hidden) by the HA update system.
> The biggest problem with HomeAssistant, however, is its really over-engineered setup for running on mini computers like the Raspberry Pi, which was my goal.
It may feel over-engineered if you look under HA's skirts (the fleet of docker containers thing), but turns out you almost never need to go deep into HA to get it to do things, and when you actually do, HA is actually pretty open and easy to work with. (just ssh to port 22222 if you really need access to the bare metal system).
I would agree that the HA setup is a bit unusual for someone used to just ssh into a linux server: I had the same initial reaction. But turns out it's actually never much of a problem. It's just different.
Also, it may look heavy, but it runs absolutely fine on a small raspi-like computer.
> Is the best solution we can come up with a bunch of Docker containers running on a custom Linux distro?
Why not? It may "feel" big and complicated, but in practice:
- it's very well packaged
- it's very well maintained
- it has support for a *ton* of home automation devices
- it runs out of the box on a tiny and cheap SBC (a raspi) without overloading it
All you have to do is dedicate a raspi to the problem and be done with it, not really a big problem.And if you really want to run it on a Linux server that is used for other things, and the HA architecture irks you the wrong way: just wrap HA in a native qemu VM and run it on your server along your other stuff.
The reason a "legacy" system seems so clunky and over-engineered and hard to modify and has so much corner case handling is: real-world experience and bug-fixes. When you throw that old cow in the tar pit and start developing your shiny new application, you throw all those years of hard-earned experience away with it. By the time your application works as well as the old one, it will be just as ugly.
FWIW, I have been running HA in a qemu VM on a NUC for years, and it is one of the most stable pieces of software I use. It supports every device I can throw at it, and the automations, while clunky, are easy to manage, as long as you keep KISS in mind.
Anyway what is wrong with HA/OpenHAB? It's too "enterprise" or rather too rich and therefore seems heavy to run - VM with at least 2GB of RAM? No, thanks.
What requirements I have for smart home:
- made for tinkering people - preferable approach as in open-hardware initiatives where one electric motor can be used either for water pump engine or spinning table saw, so you can use it with things you already have and you have some indications about how to connect it all together in various cases
- something designed for the cheapest hardware (nowadays rpi comes quite cheap though but it is not truly open and there are availability issues)
- something doing only what is necessary and not cloud-first
- option for build time removal of unused features
- no need for hot loaded plugins
- build based on tools with long term compatibility in mind (again, sorry custom extensions for each new language in the world)
- real time system or at least good separation of control vs deployment/etc
- designed as optional extension to existing world with switch-off mechanism
- no need for vast ecosystem as long as it is based on freely available standards
- nice to have feature is to provide scripting scenarios, can be deployed independently from main control board
- should be cross-platform on native level, so in the end going to C, no heavy vms or interpreters, nice to have runnable on bare metal
- things like reports presentation should be done not in the hardware which has actuators, data should be kept in another piece of hardware e.g. PC
Sure it's fun and it's a great learning experience, but don't try to make it look like a better solution than a popular, proven, tested and maintained one like Home Assistant.
Honestly, if I was building something out again, I would totally optimise the set up for privacy and security rather than convenience of having a spouse connect new devices.
Also: in some cases it really is faster just to make your own rather than learn the Home Assistant Way Of Doing Things.
There was an episode of the Coder Radion podcast a few years back, one of the hosts had moved into an apartment with a few smart home features, it took him forever to reset and reconfigured. He described it as "living in a haunted house".
Ok, we now have "smart" lightbulbs. And even thermostats. Great stuff! I think, it is possible to have "smart" curtains.
But I have simple example: now I'm living in country, when price for electricity changes every hour. I can extract this price programmatically without problems.
Suppose, I want to wash my clothes when electricity is the cheapest, but no longer than 24 hours. No problem, algorithm is simple: calculate average price over, say, week (possible), look at state of washing machine, and if machine is prepared and ready (power-on, standby, program selected, door closed) and price is small enough (or there is a 23 hours passed from washing machine readiness), give machine command to start.
I can imagine (and implement) Very smart algorithm when to start washing.
But it needs washing machine, which can be polled for status and started remotely (but prepared locally, as software doesn't know did you want to wash color, white or black clothes, for example).
Is here any such machine on the market? Nope...
Same with microwaves, dishwashers, stoves, anything.
So much for smart home.
I happen to use Node-RED for automation -- this is the easiest part to replace, it could just as well be Mako, pyscript, AppDaemon, NetDaemon, or plain Python scripts talking to the MQTT server.
What I can't easily replace from HA is the nice UI, both over the web and as an app (same thing really). I guess Mako makes it possible to hack together a web interface, but it's a lot of work for a poor result when compared to what you get with HA (or OpenHab) out of the box.
I would love to find a simpler, MQTT driven "HMI" app for both web and mobile, completely disconnected from the logic behind.
My point is a smart home doesn't have to be complex and can be fun to do yourself.
https://www.zigbee2mqtt.io/guide/configuration/frontend.html
Home assistant can run on a pi and is actually decently lightweight. Just because behind the scenes it uses containers doesn’t make it complex and difficult to maintain.
My home assistant hasn’t needed and babysitting and is my least involved support project. Upgrades are stable and one-click and you can use as little or as much of its functionality as you want without the sacrifice for performance.
It's a great project.
I've been running Home Assistant on a Raspberry Pi 2B for years with no complaints.
It takes about 7 minutes to compile the firmware for a single ESPHome device which is a long time but it's hands off so it has no impact on me.
My experience is that beyond some stack complexity level simple power outage render open source solutions to the point my intervention was required. Additionally this software is full of bugs due to how it is developed.
I had situation when I was on a business trip and one of my hall light went strobe mode :) Turns out there was a bug and race condition was triggered because someone activate PIR sensor the same micosecond previous action was turning light off (NodeRed)
Wife went crazy, called me to turn this madness off :)
Home is smart when users can handle it without you in any daily scenarios. Otherwise it is just our fun/hobby not real solid solution :)
I recently bought a new house, and while a lot of modernization is required, I'll still be excluding all IoT and smart home devices/features, and I've given up on wireless for most things as well, there will be a plethora of ethernet jacks.
Home Assistant was pretty simple to install and connect to devices (I'm currently all Z-Wave), but I didn't really care for its built-in rules. But it provides a REST API to interact with everything connected to it, instead of having to fiddle with configuration files.
So I have one system that makes sure the remote Home Assistant process is running, that provides a simplified API for everything else (mapping simple labels to the Home Assistant Z-Wave identifiers and handling the REST request for me), and a second one for actually controlling it with whatever rules I came up with.
I've found it to be pretty stable overall.
Why does any of it operate on remote cloud API calls when it could operate locally?
Vendor lock-in, and gives them the ability in the future to hold your devices hostage by requiring you to pay a subscription fee.
Various IoT platforms, eg Tyua (which gets rebranded a lot), sell a complete package that is totally cloud oriented. Configure the product behavior online, click order, purchase 10000 controller chips preflashed with firmware implementing said behavior, integrate with devices, slap logo on it, sell.
Also, maybe the developers of these products only know how to write cloud enabled software? (slightly joking)
And people actually like controlling their hardware from out-of-the-home, which makes doing everything locally even more complicated.
When you start trying to present end-users with a graph of whatever metric you want, you run into issues with storage, response time, CPU usage, storage, the web front-end, storage, etc. Then you have issues updating all that.
And if you want to do something like, say, comparing and benchmarking against other users you can't.
Really, only technical people care about this kind of stuff, and they can go ahead and write their own or use HA.
I disagree with this; it's expensive if you need the device to support Python or C# or similar. A $5 esp32 chip has enough storage and RAM to both act as a controller for hundreds of devices, AND run a minimal webserver to provide an interface for the user to automate those devices.
> And people actually like controlling their hardware from out-of-the-home, which makes doing everything locally even more complicated.
I second this: people who want home automation also want the ability to control it from their cellphone anywhere in the world. Unless they are technically proficient enough to setup their own public-facing server that is on 24x7, the customer is almost always going to prefer the device that is connected to a proprietary vendor's cloud.
It’s been pretty amazing tbh
Integration with GoogleHome/Alexa/etc doesn't require cloud, they're running inside your home and can easily hit the device directly (wifi devices) or via the controller (which can "forward" the commands to the devices on the local network or the zigbee/zwave net).
How else your thermostat manufacturer going to implement vendor lock-in? /s
I found it refreshing, but the licensing is just weird — parts of it mention that the web content hosted by the server is also covered by it, and I’m not sure if that is a tenable approach.
Some tasks HA knows is rather complicated to execute in Domoticz, but definitely doable.
There is mosquitto for MQTT and Zigbee2MQTT on the same node, the whole consumption is < 300MB.
It's still kinda nuts how much arcane bureaucracy is needed simply to make two computers in the same room talk to each other, and nobody else. Why can't I just control the brightness of my living room lights as easily as my laptop backlight, without the packets taking a detour through Langley?
Deconz felt a bit bloated/buggy, so I switched to using a cheap USB stick from aliexpress, and using zigbee2mqtt, which turned out to be a pretty good combination.
Unfortunately Apple decided (while I was on a business trip) that Apple TV 3 was no longer good enough as a home hub, so all of my soft switches stopped working...
As a result in a couple of days I wrote a quick MVP replacement in Rust, which has been working very nice for me, and the "user" (significant other) feedback was that it is now much more reliable and responsive.
Putting it here in case anyone finds it useful.
After having tried out various offerings written in Python, PHP, Node and whatnot I'm tired of things that almost work. That is, they work well enough to convince me to try them, but not well enough for making me want to continue running them.
> Is the best solution we can come up with a bunch of Docker containers running on a custom Linux distro?
It's really not that bad when you consider that HassOS has an updater. You don't need to reason about any sort of docker config if you don't want to. A lot of users have no idea what docker is and still get by. It's pretty appliance-like. Additionally, I run hassos in a VM, and that takes away even more of the 'managing a linux distro' aspect.
A few years in I did want the control to manage a docker container myself for frigate. I keep that alongside the hassos VM and no issues. So you can even mix and match if you like.
To me it's a nice combo of 'off the shelf' and maintaining full flexibility.
Unless you don’t care if one day your self written home automation system stops working, and if you don’t happen to be in the mood then it will remain broken for months/forever.
Mako looks like a nifty piece of tech on the other hand. I wish there was some sort of similar application server for JS (deno comes close but Mako looks much more complete)
Some might call it overengineered, but it works great. Flash an SD card with Home Assistant, pop it in and you'll be ready to go with minimal configuration. I've had HA running on an RPi4 for years with very few issues.
Still very tempted to write my own presence detection code though since that’s a little fuzzy and case specific. That would still use HA for the heavy lifting on sensor inputs etc
Athom plugs pre-flashed with tasmota to measure power point usage and switch on and off. Athom bulbs pre-flashed with tasmota.
Homeassistant works great. Toss in wireguard for remote access with smartphones.
It's good fun. It's cheap. It's cloudless. It's better than anything you can buy. Go the DIY! You do tinker a bit, if you hate that aspect of DIY then maybe pass on smarthome stuff. Parts probably paid for themselves in reduced electricity consumption. Once you measure something, behaviour changes etc.
I run Homeassitant on a 12 y.o. laptop that also runs mosquitto, has some usb disks plugged into it, runs samba, pi-hole, owntone, wireguard, timecapsule etc.
Home assistatant works pretty well and easily, imho.
How are you doing it?
That’s equivalent to half a keyboard and an 8x8 pixel screen. I couldn’t agree more with this article.
Well... actually, it's a kinda burglar alarm except it's focus is alerting way ahead of actually getting inside. I added home automation bits (minimal) just so one can elicit a real world response, but I do use it for minimal home automation (Lights, heating control and letting the chickens in and out).
I have yet to announce on on hacker news and so because I still have to write a bunch of documentation. It uses the latest state of the art computer vision triggering, currently yolov7 and I'm about to release support for yolov6. It's multimodel, so you can double check it's result with more than one model, even for specific parts of an image.
The architecture diagam and installation instructions are here:
https://github.com/hcfman/sbts-install
I actually, started writing this in 2008 and most of the current state in terms of the user interface were finished in 2012 but I only released it into open source last year really. In 2019 I add support for yolov3 and have been adding models even since.
It's written in Java and installs in just two commands on nvidia jetsons at the moment (Not in containers). The inference framework is a simple websocket based wrapper around other models so it's easy to add new models and that's written in python.
Well I finish the new release to introduce yolov6 and support for the seeed studios platforms I'll make an announcement on hacker news, note I still have a lot of work to do on documentation.
It has a builtin GUI around a certificate manager, so you can generate, import and use TLS inside your intranet between devices.
It doesn't use a domain specific language, rather just a simple web gui around a state machine. IMHO you can't pretty much do what you need with a state machine and anything that can't be done like this can be handled easily via the generic rest interface and if you need notifications it supports web socket based notifying of events. This make's it easy to add new rules on the fly from your phone if you want.
It make's it easy to add new pages of buttons to control the state from your phone and generates nice video alerts with multi-camera views of the trigger event.
And it's totally undiscovered. You can be the first early adopters! :)
This space is ripe for a well-funded new entrant to step in, create a decent protocol for home automation and make a killing.
The options in this space are awful, with no clear indication of security, competing "standards" that don't cover even the basics of an appliance-like device, and cloud-lockin for almost everything!
Nothing is aimed at the average homeowner (No - writing in Python or Lua is not how people want to automate their home).
Lets talk about the media-level protocols: WiFi in homes is ubiquitious and cheap, things like Zigbee or LoRa raises the cost and the effort for HA, local RF isn't widely supported by devices (with good reason). How does a homeowner know what to go with?
Let's talk about bootstrapping a new device on the HA network: device discovery!
Some devices require an internet connection and the homeowner has to have an account on the cloud (Adafruit IO, various proprietary vendors). Some use a fixed mDNS name (Shelly), some require to download the vendors app (used to set network config, credentials, etc), most simply don't do it at all. I even found one or two that require the owner to browse to a particular local IP, because the device starts off in AP mode.
Okay, lets say you jumped through the hoops (registered an account on a cloud service, gave the device internet access, used its AP to set it up, or it set itself up doing mDNS query for _mqtt._tcp.local, or whatever).
Next problem: authentication of the device on the network. Some devices just don't support it, some support it using AES with pre-shared keys, some support it with basic HTTP auth over TLS, some use mqtt with TLS, some offer mqtt, but in plaintext only, with encryption being over HTTPS (reverses the pub/sub model horrifically), many support x509 certs loaded onto the device (the worst option for an appliance!), some (using CoIoT) have support for DTLS (But need a valid x509 cert) ...
Problems aren't over yet. So, you go with something ... and then find out that your controller is not compatible with one device. Maybe you need a Zigbee bridge because everything else is WiFi. Maybe that device requires x509 cert over WiFi, while everything else is using auth credentials. Maybe it's hardwired to use vendor's cloud and the rest of your network is using Home Assistant. Maybe it's using ESPHome and everything else is using CoIoT.
That's fine, you think, I'll just use Home Assistant, which has integrations for everything on the planet, to "bridge" the different protocols. But now you're stuck with Home Assistant as a controller, which has limited automation facilities.
Honestly, what homeowners want is to buy a device and plug it in, and have a nice interface for devices which allow the homeowner to specify what happens on any event.
That's it. No messing about with Python, Containers, Lua, mDNS sniffers, accounts on public internet clouds, renewing x509 certificates, etc.
Plug it in, use username+password to access the Home Automation network, that's it.
From a technical PoV, I can see a mechanism to get it done this way.
To your point of "stuck with HA as a controller" that's not entirely true, if you're an Apple household, install the HomeKit bridge and expose things to homekit where you can automate to your hearts content.
There's no good graphical programming thing in existence. The A/V or HA people are not the people that are going to invent it.
Home Assistant is fine, and means a less technical customer doesn't deal with and of that nonsense you're talking about. I'm sure there's things you can't do with it and for that you would need to be a programmer but if you just want to say"hey Google I'm taking a shower", and have it set the lights in your bathroom, and turn on the heater, or have it switch the lights to warm at sunset, or an hour before, that's totally possible.