February 1, 2026 · updated March 15, 2026

Overview of my home assistant setup

I run my smart home on Home Assistant for integrations and state, and I keep most of the decision logic in Node-RED via the Home Assistant integration. Home Assistant gives me a consistent set of entities (sensors, lights, switches, climate, cameras). Node-RED is where I decide what should happen and when, then I call Home Assistant services to apply it.

A few patterns show up everywhere:

  • One shared home/away mode (plus a manual override) drives most behavior.
  • Most flows react to state changes, with a periodic reconciliation tick that re-applies intent in case an event gets missed.
  • I target areas, labels, and groups instead of maintaining brittle lists of entity IDs.
  • Anything that tends to flap (presence, lux, temperature thresholds) gets hysteresis and minimum-duration checks.

Presence and modes

Inputs:

  • A binary “someone is home” sensor.
  • An input_select used as a manual override (examples: Auto, Away, Visitors).

Effective mode logic:

  • Override Away forces away behavior.
  • Override Visitors forces home behavior even if presence is uncertain.
  • Otherwise, presence decides.

Once that effective mode exists, every downstream system can reference it. Lighting, HVAC, power management, housekeeping: they all read the same mode and behave consistently.


HVAC control (thermostat + fan)

My thermostat is a Raspberry Pi running Infinitiveattached to the RS-485 Carrier bus. It’s worked for years. Carrier’s pricing and gatekeeping (they only sell to ’experts’) are insane. Worse, I couldn’t even find a model which had an API and could work locally without internet.

For logic I treat HVAC as a single decision step followed by a guarded apply step.

  1. Compute what the system should be doing right now.
  2. If the current state already matches, do nothing.
  3. If it differs, call services to correct it.

Behaviors:

  • Mode-based setpoints Away uses setback temperatures; home uses comfort targets.

  • Time windows Setpoints shift by time of day (daytime, evening, and a couple of special midday windows).

  • Energy-aware tweaks If local solar/battery metrics show surplus generation or a high battery state, I allow slightly more aggressive comfort targets during specific windows. This is one of those cases where “good enough” beats perfect optimization.

  • Fan control with hysteresis The fan goes high only when a bedroom is hot and the room is occupied (occupancy/motion). It drops back to auto when the temperature falls or the room goes inactive. Hysteresis keeps the fan from bouncing around a threshold.

  • Command rate limiting Thermostat writes are throttled (for example, one command per minute). This avoids bursts of back-to-back setpoint updates when sensors get noisy.


Lighting automation

Lighting is split into practical buckets, mostly based on how I want it to fail.

exterior lighting

Exterior lighting is driven by a single “desired state” decision:

  • It turns on during a sunset-to-night window when conditions match (for example: it’s dark and there is activity downstairs).
  • It turns off outside that window, with a few exceptions (porch-only rules, visitor mode exceptions).
  • Changes only get applied when the desired on/off state flips, which keeps service calls down.

motion-driven interior lighting

For rooms with occupancy or motion sensors:

  • Motion turns lights on only in the right time windows and only when ambient light is low.
  • Shutoff uses a Trigger (extend) pattern:
    • Turn on immediately on motion.
    • Turn off after a timeout if motion does not recur and it is well past bedtime.
    • Extend the timer while motion continues.

ambient-light (lux) automation with hysteresis

For rooms with illuminance sensors:

  • Lux thresholds use a “for X minutes” requirement (example: 5 minutes) so passing clouds do not cause flicker.
  • On/off thresholds use hysteresis (different values for turning on vs turning off) to keep behavior stable near the boundary.
  • Some lights dim or shut off when daylight is already doing the job.

Power and energy management

Power flows are mostly about removing wasted draw without being noticed.

  • Occupancy-based outlet control: Some plugs stay on while a room is occupied and can turn off after inactivity windows. The biggest energy savings is the ‘smart’ TV which uses almost as much power when turned off but still plugged in.

  • Away shutdown: When the home goes to away, groups of switches and lights turn off together.

  • Solar/battery integration: Solar production and battery charge state feed into the HVAC logic in selected time windows.

Thermal Battery

On weekdays between 10 AM and 1:40 PM, if the Powerwall is above 95%, I overshoot the setpoints to bank thermal mass before peak electricity pricing. But I only do this when the outdoor temperature actually justifies it: for heating, only between 40°F and 60°F — below 40 I’d be running aux heat which defeats the purpose, and above 60 there’s no real heating need. For cooling, only between 75°F and 93°F — below 75 the house isn’t gaining enough heat to matter, and above 93 the compressor is working at poor efficiency for a cushion that won’t last. In heat mode the precond target is 5 degrees above my normal home setpoint. In cool mode it’s 3 degrees below. In heat_cool mode it’s a tight 70/72 band.

Between 2 PM and 6 PM (peak electricity price), I look at the last hour of battery history and project a drain rate forward. If the Powerwall is on track to drop below 20% by 6 PM, I calculate a conservation factor and relax the setpoints. If anyone is home, I only apply half the offset. The conservation factor gets written to an HA input_number so I can see it on my dashboard.


Safety and “left on” notifications

When the home transitions to away, I run a quick sanity check:

  • Look at a few power-monitoring sensors (example: oven circuit load, living room load).
  • If a monitored load stays above a threshold, create a persistent notification in Home Assistant.

Housekeeping automations

A couple of routines ride on arrivals and departures:

  • Robot vacuum: Start after the home has been away for a short time. Send it back to the dock when someone returns. I cancelled this and just scheduled the downstairs vacuum to run while we sleep… it’s quiet enough we don’t notice.

  • Override reset: When someone re-enters the home zone, the override can return to Auto, unless Visitors is active on purpose.


Cameras and entity refresh

I also have a small maintenance flow for cameras:

  • A periodic Blink snapshot/refresh routine triggers updates that camera entity stays current. I need to replace this camera with something local.
  • A few motion triggers on my local PoE cameras.