$neelabh

neelabhbuilds

Home Automation Systems

I approach my home as a system to be optimized. These automations aren't about novelty—they're about removing friction and creating invisible convenience.

01

The Vacuum Protocol

The Problem

The only thing worse than a loud vacuum is a loud vacuum that runs while you're trying to relax.

My system isn't just a timer. It's state-aware. It notifies us when it starts, but more importantly, it listens. If I come home mid-clean, it detects my presence and pauses instantly. When I leave again, it picks up exactly where it left off. Finally, it updates the house database to mark specific rooms as "Clean" so it doesn't over-clean tomorrow.

The Automation

automations.yaml
trigger: state(group.family, "not_home")
condition: last_run > 24h
action:
- service: vacuum.start
entity_id: vacuum.roborock_s7
- service: notify.phones
message: "Cleaning started..."
HARDWARE:Roborock S7Home AssistantGPS Presence

Live LIDAR Map

STATUS: CLEANING
COVERAGE: 0%

State-aware mapping with interrupt detection

1.1

Selective Room Targeting

The Feature

Sometimes I don't need the whole house cleaned. I just need the Kitchen and Hallway done after cooking. All of this is orchestrated natively in Home Assistant, using Jinja templating to map dashboard toggles dynamically to the vacuum's segment IDs.

Jinja Template Logic

scripts.yaml
variables:
targets: {{ expand('group.room_toggles')
| selectattr('state', 'eq', 'on') }}
sequence:
- action: roborock.vacuum_clean_segment
data:
segments: {{ targets
| map(attribute='attributes.segment_id')
| list }}

Dashboard UI

Selective room cleaning demo
SELECTIVE TARGETING

Room selection interface for targeted cleaning

02

The Goodnight Protocol

The Problem

A smart home shouldn't be abrupt. When I put my phone to sleep, the house shouldn't just go black instantly—that's jarring. I built a "Hysteresis Buffer"—a 10-minute grace period to settle in before the house locks down. Time to grab water, use the bathroom, whatever. Then: full security mode.

The Automation

automations.yaml
trigger: state(input_boolean.sleep_mode, "on")
action:
- delay: "00:10:00"# hysteresis buffer
- service: light.turn_off
entity_id: group.all_lights
- service: media_player.turn_off
- service: light.turn_on
entity_id: light.patio
brightness_pct: 20
- service: alarm_control_panel.arm_home
HARDWARE:iPhone FocusLutron CasetaAqara Sensors

Shutdown Timeline

SHUTDOWN_TIMELINE.viz
0m2m4m6m8m10m
Phone Sleep
Buffer Zone
Lockdown
LIGHTS100%
SECURITY0%
BUFFER: 0m remaining

Interactive visualization of the 10-minute buffer sequence