From e7b0287847d59b27b63d790b87c1b6c6ae9d5fa8 Mon Sep 17 00:00:00 2001 From: ryan Date: Sat, 2 Aug 2025 21:15:46 -0700 Subject: [PATCH] Simplify HA dev config to work with core-only Nix package - Remove frontend dependencies that aren't in Nix package - Use minimal config with just HTTP, API, and MQTT - Prepare for either Docker alternative or core-only testing --- dev-config/.HA_VERSION | 1 + .../homeassistant/motion_light.yaml | 58 +++++++++++++ .../homeassistant/notify_leaving_zone.yaml | 50 +++++++++++ .../confirmable_notification.yaml | 86 +++++++++++++++++++ dev-config/configuration.yaml | 37 +++----- 5 files changed, 205 insertions(+), 27 deletions(-) create mode 100644 dev-config/.HA_VERSION create mode 100644 dev-config/blueprints/automation/homeassistant/motion_light.yaml create mode 100644 dev-config/blueprints/automation/homeassistant/notify_leaving_zone.yaml create mode 100644 dev-config/blueprints/script/homeassistant/confirmable_notification.yaml diff --git a/dev-config/.HA_VERSION b/dev-config/.HA_VERSION new file mode 100644 index 0000000..434122a --- /dev/null +++ b/dev-config/.HA_VERSION @@ -0,0 +1 @@ +2025.7.4 \ No newline at end of file diff --git a/dev-config/blueprints/automation/homeassistant/motion_light.yaml b/dev-config/blueprints/automation/homeassistant/motion_light.yaml new file mode 100644 index 0000000..1190070 --- /dev/null +++ b/dev-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/dev-config/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/dev-config/blueprints/automation/homeassistant/notify_leaving_zone.yaml new file mode 100644 index 0000000..e072aad --- /dev/null +++ b/dev-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/dev-config/blueprints/script/homeassistant/confirmable_notification.yaml b/dev-config/blueprints/script/homeassistant/confirmable_notification.yaml new file mode 100644 index 0000000..0106a4e --- /dev/null +++ b/dev-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/dev-config/configuration.yaml b/dev-config/configuration.yaml index f7d6348..a60be7c 100644 --- a/dev-config/configuration.yaml +++ b/dev-config/configuration.yaml @@ -7,41 +7,24 @@ homeassistant: elevation: 0 unit_system: metric time_zone: UTC - -# Enable configuration UI -config: -# Enable frontend -frontend: - themes: !include_dir_merge_named themes +# Basic required components only +http: + server_host: 0.0.0.0 + server_port: 8123 # Enable API api: -# Enable system health -system_health: - -# Enable mobile app support -mobile_app: - -# MQTT Configuration (connect to existing mqtt.home broker) -mqtt: - broker: mqtt.home - port: 1883 - discovery: true - discovery_prefix: homeassistant - # Enable logging logger: default: info logs: custom_components.systant: debug - homeassistant.components.mqtt: debug -# Enable recorder with in-memory database for development -recorder: - db_url: "sqlite:///:memory:" - purge_keep_days: 1 - -# Enable default integrations -default_config: \ No newline at end of file +# MQTT Configuration (for our integration testing) +mqtt: + - broker: mqtt.home + port: 1883 + discovery: true + discovery_prefix: homeassistant \ No newline at end of file