I’ve been using HomeAssistant for quite some time and for new users it can be really overwhelming as the product has a lot of knobs to tweak and settings are plentiful
KISS (“Keep it simple, stupid”)
My recommendation would be to keep things simple. For example at first I set up scenes which would be triggered by automations, but this quickly became difficult to manage as a beginner. As scenes can set multiple lights to a specific color/brightness, mixing that with automations meant I needed more scenes just to get the right brightness I needed. One automation I had was lights in the kitchen that would be on “stand-by”, at a low brightness and when motion is detected they’d lighten up brighter. This ended up being really difficult to manage with multiple scenes and overlapping scenes. That’s where I removed the scenes and let the automations control lights directly. Basically I tried to do too many things at once, in my opinion it’s easier to manage when automations just execute directly what should be happening, from there you can work towards scenes and more complicated setups
Timer helpers instead of delay:
Automations have the option to use delay: to delay a follow-up action, however they have a few downsides like it doesn’t survive a restart, it can’t be cancelled, and is invisible in the UI. However a native timer gives you much more control. One example I have is a fan that turns on in the shower, this turns on when humidity rises, then when humidity drops a timer is started. When the humidity rises again the timer is cancelled. And there’s a trigger on the timer.finished event, which would then turn off the fan. This makes it so showering is automatically detected through humidity and the fan remains on for about half an hour even through humidity has already dropped to a stable lower value.
Booleans / helpers for overrides
Nothing is more annoying than an automation that doesn’t work perfectly. Let’s say you have automated lighting that turns on when you’re in the living room, but every once in a while you’d want to watch a movie and turn down the lights. So you turn down the lights manually, grab some popcorn from the kitchen and your lights are at full brightness again. For cases like this I use helpers (booleans / switches) such as automated_livingroom_lights, now you can easily turn off the automation temporarily and you can control your lights manually
Automations on behavior, not on triggers
I tend to write my automations based on behavior instead of solely on the trigger. This is one thing I ran into a lot, I had like 4 different automations that control a single kitchen light, which means the automations all run separately and would “fight” each other, ex. the motion-off automation turning the lights off while the sunset one had just turned them on. What I typically do now is a single automation that uses a choose block where I can define conditions and transitions based on which trigger was fired. This setup resembles a state machine more than a set of rules. The automation decides which state the light should move to, rather than four automations each having their own opinion.
