Refine speech weather and presence context

master
Carlo Costanzo 3 weeks ago
parent 2a2c423cb4
commit 0a70f4fd5e

@ -33,7 +33,7 @@ Speech-first automations: contextual announcements, stats briefings, guest mode
### Tips ### Tips
- Pairs with `script/speech_engine.yaml` and `templates/speech/briefing.yaml` for reusable phrasing. - Pairs with `script/speech_engine.yaml` and `templates/speech/briefing.yaml` for reusable phrasing.
- Keep announcements natural and action-first; the LLM prompt should avoid previous-message repetition and include weather only when requested or safety-relevant. - Keep announcements natural and action-first; the LLM prompt should avoid previous-message repetition and include weather when requested, safety-relevant, or still useful before late-day context takes over.
- Briefing context includes quiet-by-default Tesla, energy, water, comfort, and vacuum checks so routine announcements stay useful without repeating normal status. - Briefing context includes quiet-by-default Tesla, energy, water, comfort, and vacuum checks so routine announcements stay useful without repeating normal status.
**All of my configuration files are tested against the most stable version of home-assistant.** **All of my configuration files are tested against the most stable version of home-assistant.**

@ -7,12 +7,12 @@
# Generates macro prompts for weather, reminders, and AI-driven speech routines. # Generates macro prompts for weather, reminders, and AI-driven speech routines.
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Weather, responsibilities, holidays, air quality, and fact prompts parsed by speech_processing/speech_engine. # Weather, responsibilities, holidays, air quality, and fact prompts parsed by speech_processing/speech_engine.
# Notes: Dorm zones are away from Bear Stone; only person state `home` # Notes: Justin Dorm is away from Bear Stone; only person state `home`
# means someone is physically home at this house. # means someone is physically home at this house.
# Notes: Previous broadcast text is stale context only; current sensor data # Notes: Previous broadcast text is stale context only; current sensor data
# stays authoritative for entry point and action wording. # stays authoritative for entry point and action wording.
# Notes: Weather context is gated by call_outside_weather or safety thresholds # Notes: Weather context is included during the useful daytime window, when
# so narrow alerts stay action-first. # requested, or when safety thresholds make it relevant.
# Notes: Household context macros stay quiet unless current state adds action # Notes: Household context macros stay quiet unless current state adds action
# or abnormal status worth announcing. # or abnormal status worth announcing.
###################################################################### ######################################################################
@ -298,6 +298,7 @@
{% set place_state = states(place_sensor_id) if place_sensor_id in states else 'unknown' %} {% set place_state = states(place_sensor_id) if place_sensor_id in states else 'unknown' %}
{% set location_label = place_state if place_state not in ['unknown','unavailable','','none'] else person_state %} {% set location_label = place_state if place_state not in ['unknown','unavailable','','none'] else person_state %}
{% set location_label = 'Away' if location_label in ['unknown','unavailable','','none'] else location_label %} {% set location_label = 'Away' if location_label in ['unknown','unavailable','','none'] else location_label %}
{% set location_label = 'Away' if name == 'Paige' and 'Dorm' in location_label else location_label %}
{% set at_bear_stone = person_state == 'home' %} {% set at_bear_stone = person_state == 'home' %}
{% set at_dorm = 'Dorm' in location_label %} {% set at_dorm = 'Dorm' in location_label %}
{% set last_changed = as_timestamp(person.last_changed) %} {% set last_changed = as_timestamp(person.last_changed) %}
@ -312,6 +313,8 @@
{{ name }}: at Bear Stone home{% if seconds >= 60 %} for {{ duration }}{% endif %} {{ name }}: at Bear Stone home{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% elif at_dorm %} {% elif at_dorm %}
{{ name }}: away at {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %} {{ name }}: away at {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% elif location_label == 'Away' %}
{{ name }}: away{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% else %} {% else %}
{{ name }}: away at {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %} {{ name }}: away at {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% endif %} {% endif %}
@ -348,6 +351,8 @@
{% set call_window_check_flag = call_window_check | default(0) | int(0) %} {% set call_window_check_flag = call_window_check | default(0) | int(0) %}
{% set call_garbage_day_flag = call_garbage_day | default(0) | int(0) %} {% set call_garbage_day_flag = call_garbage_day | default(0) | int(0) %}
{% set no_fridge_flag = no_fridge | default(0) | int(0) %} {% set no_fridge_flag = no_fridge | default(0) | int(0) %}
{% set sunset_ts = as_timestamp(state_attr('sun.sun', 'next_setting'), 0) %}
{% set daytime_weather_context = is_state('sun.sun', 'above_horizon') and sunset_ts > 0 and as_timestamp(now()) < (sunset_ts - 7200) %}
{% set lightning_close = states('sensor.blitzortung_lightning_counter') | int(0) > 0 and (states('sensor.blitzortung_lightning_distance') | float(9999) / 1.69) <= 10 %} {% set lightning_close = states('sensor.blitzortung_lightning_counter') | int(0) > 0 and (states('sensor.blitzortung_lightning_distance') | float(9999) / 1.69) <= 10 %}
{% set weather_safety_context = ( {% set weather_safety_context = (
states('sensor.nws_alerts') | int(0) > 0 states('sensor.nws_alerts') | int(0) > 0
@ -358,7 +363,7 @@
[Current date time: {{ month }} {{ day }}, {{ year }} {{ time }}] [Current date time: {{ month }} {{ day }}, {{ year }} {{ time }}]
[Presence rule: Bear Stone home means a resident's person state is exactly `home`. [Presence rule: Bear Stone home means a resident's person state is exactly `home`.
Justin Dorm and Paige Dorm are away-from-Bear-Stone locations, not home for this house. Justin Dorm is an away-from-Bear-Stone location, not home for this house.
Do not welcome or address residents at dorm zones as being home here.] Do not welcome or address residents at dorm zones as being home here.]
[LLM speech contract: [LLM speech contract:
@ -415,7 +420,7 @@
{{ inside_weather() }} {{ inside_weather() }}
{% endif %} {% endif %}
{% if call_outside_weather_flag == 1 or weather_safety_context %} {% if call_outside_weather_flag == 1 or daytime_weather_context or weather_safety_context %}
{{ outside_weather() }} {{ outside_weather() }}
{% endif %} {% endif %}

Loading…
Cancel
Save

Powered by TurnKey Linux.