From 3e1fd60853f7de25656c26c58733ac9518652e0e Mon Sep 17 00:00:00 2001 From: Alex Szumko Date: Tue, 25 Nov 2025 23:33:38 -0500 Subject: [PATCH] Homeassistant intial build --- ha/.gitignore | 45 ++++++++++ ha/config/.HA_VERSION | 1 + ha/config/.ha_run.lock | 1 + ha/config/automations.yaml | 1 + .../homeassistant/motion_light.yaml | 58 +++++++++++++ .../homeassistant/notify_leaving_zone.yaml | 50 +++++++++++ .../confirmable_notification.yaml | 86 +++++++++++++++++++ ha/config/configuration.yaml | 11 +++ ha/config/home-assistant.log.1 | 0 ha/config/home-assistant.log.fault | 0 ha/config/scenes.yaml | 0 ha/config/scripts.yaml | 0 ha/docker-compose.yml | 21 +++++ 13 files changed, 274 insertions(+) create mode 100644 ha/.gitignore create mode 100644 ha/config/.HA_VERSION create mode 100644 ha/config/.ha_run.lock create mode 100644 ha/config/automations.yaml create mode 100644 ha/config/blueprints/automation/homeassistant/motion_light.yaml create mode 100644 ha/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml create mode 100644 ha/config/blueprints/script/homeassistant/confirmable_notification.yaml create mode 100644 ha/config/configuration.yaml create mode 100644 ha/config/home-assistant.log.1 create mode 100644 ha/config/home-assistant.log.fault create mode 100644 ha/config/scenes.yaml create mode 100644 ha/config/scripts.yaml create mode 100644 ha/docker-compose.yml diff --git a/ha/.gitignore b/ha/.gitignore new file mode 100644 index 0000000..5735536 --- /dev/null +++ b/ha/.gitignore @@ -0,0 +1,45 @@ +# Home Assistant configuration +*.env + +# Ignore system generated logs +*.log + +# Ignore database files +home-assistant_v2.db +home-assistant_v2.db-shm +home-assistant_v2.db-wal + +# Ignore backups +*.tar +*.gz +*.zip + +# Ignore temporary files +*.bak +*.swp +*.swx + +# Ignore secrets file, which might contain sensitive data +secrets.yaml + +# Ignore home assistant's internal folder for migrations and cache +__pycache__/ +.mypy_cache/ +node_modules/ +.venv/ + +# Ignore Home Assistant Core logs +homeassistant.log + +# Ignore the `deps` folder (dependencies that might be installed) +deps/ + +# Ignore the `.storage` folder, which contains Home Assistant's internal state data +.storage/ + +# Ignore `config` folder backups if using automated snapshots +*.tar +*.gz + +# Ignore any other personal preferences or configurations (like custom components) +custom_components/ diff --git a/ha/config/.HA_VERSION b/ha/config/.HA_VERSION new file mode 100644 index 0000000..16c9f62 --- /dev/null +++ b/ha/config/.HA_VERSION @@ -0,0 +1 @@ +2025.11.3 \ No newline at end of file diff --git a/ha/config/.ha_run.lock b/ha/config/.ha_run.lock new file mode 100644 index 0000000..7b8502e --- /dev/null +++ b/ha/config/.ha_run.lock @@ -0,0 +1 @@ +{"pid": 67, "version": 1, "ha_version": "2025.11.3", "start_ts": 1764131226.222641} \ No newline at end of file diff --git a/ha/config/automations.yaml b/ha/config/automations.yaml new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/ha/config/automations.yaml @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/ha/config/blueprints/automation/homeassistant/motion_light.yaml b/ha/config/blueprints/automation/homeassistant/motion_light.yaml new file mode 100644 index 0000000..1190070 --- /dev/null +++ b/ha/config/blueprints/automation/homeassistant/motion_light.yaml @@ -0,0 +1,58 @@ +blueprint: + name: Motion-activated Light + description: Turn on a light when motion is detected. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml + author: Home Assistant + input: + motion_entity: + name: Motion Sensor + selector: + entity: + filter: + - device_class: occupancy + domain: binary_sensor + - device_class: motion + domain: binary_sensor + light_target: + name: Light + selector: + target: + entity: + domain: light + no_motion_wait: + name: Wait time + description: Time to leave the light on after last motion is detected. + default: 120 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + +# If motion is detected within the delay, +# we restart the script. +mode: restart +max_exceeded: silent + +triggers: + trigger: state + entity_id: !input motion_entity + from: "off" + to: "on" + +actions: + - alias: "Turn on the light" + action: light.turn_on + target: !input light_target + - alias: "Wait until there is no motion from device" + wait_for_trigger: + trigger: state + entity_id: !input motion_entity + from: "on" + to: "off" + - alias: "Wait the number of seconds that has been set" + delay: !input no_motion_wait + - alias: "Turn off the light" + action: light.turn_off + target: !input light_target diff --git a/ha/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/ha/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml new file mode 100644 index 0000000..e072aad --- /dev/null +++ b/ha/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml @@ -0,0 +1,50 @@ +blueprint: + name: Zone Notification + description: Send a notification to a device when a person leaves a specific zone. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml + author: Home Assistant + input: + person_entity: + name: Person + selector: + entity: + filter: + domain: person + zone_entity: + name: Zone + selector: + entity: + filter: + domain: zone + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + filter: + integration: mobile_app + +triggers: + trigger: state + entity_id: !input person_entity + +variables: + zone_entity: !input zone_entity + # This is the state of the person when it's in this zone. + zone_state: "{{ states[zone_entity].name }}" + person_entity: !input person_entity + person_name: "{{ states[person_entity].name }}" + +conditions: + condition: template + # The first case handles leaving the Home zone which has a special state when zoning called 'home'. + # The second case handles leaving all other zones. + value_template: "{{ zone_entity == 'zone.home' and trigger.from_state.state == 'home' and trigger.to_state.state != 'home' or trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}" + +actions: + - alias: "Notify that a person has left the zone" + domain: mobile_app + type: notify + device_id: !input notify_device + message: "{{ person_name }} has left {{ zone_state }}" diff --git a/ha/config/blueprints/script/homeassistant/confirmable_notification.yaml b/ha/config/blueprints/script/homeassistant/confirmable_notification.yaml new file mode 100644 index 0000000..0106a4e --- /dev/null +++ b/ha/config/blueprints/script/homeassistant/confirmable_notification.yaml @@ -0,0 +1,86 @@ +blueprint: + name: Confirmable Notification + description: >- + A script that sends an actionable notification with a confirmation before + running the specified action. + domain: script + source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml + author: Home Assistant + input: + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + filter: + integration: mobile_app + title: + name: "Title" + description: "The title of the button shown in the notification." + default: "" + selector: + text: + message: + name: "Message" + description: "The message body" + selector: + text: + confirm_text: + name: "Confirmation Text" + description: "Text to show on the confirmation button" + default: "Confirm" + selector: + text: + confirm_action: + name: "Confirmation Action" + description: "Action to run when notification is confirmed" + default: [] + selector: + action: + dismiss_text: + name: "Dismiss Text" + description: "Text to show on the dismiss button" + default: "Dismiss" + selector: + text: + dismiss_action: + name: "Dismiss Action" + description: "Action to run when notification is dismissed" + default: [] + selector: + action: + +mode: restart + +sequence: + - alias: "Set up variables" + variables: + action_confirm: "{{ 'CONFIRM_' ~ context.id }}" + action_dismiss: "{{ 'DISMISS_' ~ context.id }}" + - alias: "Send notification" + domain: mobile_app + type: notify + device_id: !input notify_device + title: !input title + message: !input message + data: + actions: + - action: "{{ action_confirm }}" + title: !input confirm_text + - action: "{{ action_dismiss }}" + title: !input dismiss_text + - alias: "Awaiting response" + wait_for_trigger: + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_confirm }}" + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_dismiss }}" + - choose: + - conditions: "{{ wait.trigger.event.data.action == action_confirm }}" + sequence: !input confirm_action + - conditions: "{{ wait.trigger.event.data.action == action_dismiss }}" + sequence: !input dismiss_action diff --git a/ha/config/configuration.yaml b/ha/config/configuration.yaml new file mode 100644 index 0000000..2bf923b --- /dev/null +++ b/ha/config/configuration.yaml @@ -0,0 +1,11 @@ + +# Loads default set of integrations. Do not remove. +default_config: + +# Load frontend themes from the themes folder +frontend: + themes: !include_dir_merge_named themes + +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml diff --git a/ha/config/home-assistant.log.1 b/ha/config/home-assistant.log.1 new file mode 100644 index 0000000..e69de29 diff --git a/ha/config/home-assistant.log.fault b/ha/config/home-assistant.log.fault new file mode 100644 index 0000000..e69de29 diff --git a/ha/config/scenes.yaml b/ha/config/scenes.yaml new file mode 100644 index 0000000..e69de29 diff --git a/ha/config/scripts.yaml b/ha/config/scripts.yaml new file mode 100644 index 0000000..e69de29 diff --git a/ha/docker-compose.yml b/ha/docker-compose.yml new file mode 100644 index 0000000..c06550e --- /dev/null +++ b/ha/docker-compose.yml @@ -0,0 +1,21 @@ +services: + homeassistant: + container_name: homeassistant + image: "ghcr.io/home-assistant/home-assistant:stable" + volumes: + - ./config:/config + - /etc/localtime:/etc/localtime:ro + - /run/dbus:/run/dbus:ro + restart: unless-stopped + privileged: false + ports: + - '8123:8123' + networks: + - 'default' + - 'homelab' + environment: + TZ: America/Detroit + +networks: + homelab: + external: true