Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
49f9e99439
|
|||
6254fb5953
|
|||
334b7963e8
|
|||
4466b17df1
|
|||
f96056edda
|
|||
652b4e7dff
|
|||
26bcf136e6
|
|||
9e90998a21
|
|||
30c8307272
|
|||
e6b0db142e
|
@ -1 +1 @@
|
||||
2025.3.1
|
||||
2025.3.3
|
@ -321,6 +321,9 @@ influxdb:
|
||||
- sensor.dimmest_room
|
||||
- sensor.warmest_room_temperature
|
||||
- sensor.coldest_room_temperature
|
||||
- sensor.national_tornado_warnings
|
||||
- sensor.national_severe_thunderstorm_warnings
|
||||
- binary_sensor.severe_thunderstorm_warning
|
||||
|
||||
logbook:
|
||||
include:
|
||||
@ -498,3 +501,6 @@ prometheus:
|
||||
- sensor.dimmest_room
|
||||
- sensor.warmest_room_temperature
|
||||
- sensor.coldest_room_temperature
|
||||
- sensor.national_tornado_warnings
|
||||
- sensor.national_severe_thunderstorm_warnings
|
||||
- binary_sensor.severe_thunderstorm_warning
|
||||
|
@ -19,6 +19,17 @@
|
||||
{% if type in ['alerts','full'] %}
|
||||
{% if is_state('input_boolean.tornado_alarm','on') %}
|
||||
We are under a tornado warning. If you are not already in shelter, you should be. Get on it!
|
||||
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
|
||||
A tornado has been confirmed in the area. Please take shelter immediately!
|
||||
{% endif %}
|
||||
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
|
||||
We are under a severe thunderstorm warning.
|
||||
{% if state_attr('binary_sensor.severe_thunderstorm_warning','tornado_possible' == true) %}
|
||||
The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter!
|
||||
{% endif %}
|
||||
{% if state_attr('binary_sensor.severe_thunderstorm_warning','considerable_destructive' == true) %}
|
||||
This storm has the potential to cause considerable damage. Please take shelter and stay safe!
|
||||
{% endif %}
|
||||
{% elif states('sensor.weatheralerts_active_alerts') > '0' and method != 'dashboard' %}
|
||||
Current weather alerts: {{ states('sensor.weather_alert_string') }}.
|
||||
{% endif %}
|
||||
@ -49,6 +60,17 @@
|
||||
{% endif %}
|
||||
{% if is_state('input_boolean.tornado_alarm','on') %}
|
||||
"We are under a tornado warning. If you are not already in shelter, you should be. Get on it! "
|
||||
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
|
||||
"A tornado has been confirmed in the area. Please take shelter immediately! "
|
||||
{% endif %}
|
||||
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
|
||||
"We are under a severe thunderstorm warning. "
|
||||
{% if state_attr('binary_sensor.severe_thunderstorm_warning','tornado_possible' == true) %}
|
||||
"The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter! "
|
||||
{% endif %}
|
||||
{% if state_attr('binary_sensor.severe_thunderstorm_warning','considerable_destructive' == true) %}
|
||||
"This storm has the potential to cause considerable damage. Please take shelter and stay safe! "
|
||||
{% endif %}
|
||||
{% elif is_state('input_boolean.tornado_watch','on') %}
|
||||
{{ [
|
||||
"There is currently a tornado watch active. Please keep an eye on the sky and your local weather reports. ",
|
||||
@ -106,7 +128,8 @@
|
||||
{{ weatherInfo(type,method,time) |
|
||||
replace('clear-night','clear') |
|
||||
replace('partlycloudy','partly cloudy') |
|
||||
replace('snowy-rainy','a mix of rain and snow') }}
|
||||
replace('snowy-rainy','a mix of rain and snow') |
|
||||
replace('lightning-rainy','stormy') }}
|
||||
{% endmacro %}
|
||||
{{ cleanup(data()) }}
|
||||
{% endmacro %}
|
||||
|
@ -2,19 +2,23 @@ template:
|
||||
- binary_sensor:
|
||||
- name: Emma Aircon - Compressor
|
||||
unique_id: 21bcbb62-823c-43ff-8c2c-26e940324ee6
|
||||
state: "{{ is_state('fan.emma_air_conditioner','on') and states('sensor.emma_air_conditioner_power') | int > 150 }}"
|
||||
state: "{{ states('sensor.emma_air_conditioner_power') | int > 150 }}"
|
||||
availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}"
|
||||
device_class: running
|
||||
- name: Emma Aircon - Fan
|
||||
unique_id: 9e3054cf-8f7e-4fef-9da4-5b2f2bc99c9d
|
||||
state: "{{ is_state('fan.emma_air_conditioner','on') and states('sensor.emma_air_conditioner_power') | int > 20 }}"
|
||||
state: "{{ states('sensor.emma_air_conditioner_power') | int > 20 }}"
|
||||
availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}"
|
||||
device_class: running
|
||||
- name: Master Bedroom Aircon - Compressor
|
||||
unique_id: 87051957-1dbc-4d65-b138-e8469728f58f
|
||||
state: "{{ states('climate.master_bedroom_aircon') not in ['off','unknown','unavailable'] and states('sensor.master_bedroom_aircon_power') | int > 150 }}"
|
||||
state: "{{ states('sensor.master_bedroom_aircon_power') | int > 150 }}"
|
||||
availability: "{{ states('climate.master_bedroom_aircon') not in ['unknown','unavailable'] }}"
|
||||
device_class: running
|
||||
- name: Master Bedroom Aircon - Fan
|
||||
unique_id: ae893dd6-129c-4886-a966-a89b958d9f08
|
||||
state: "{{ states('climate.master_bedroom_aircon') not in ['off','unknown','unavailable'] and states('sensor.master_bedroom_aircon_power') | int > 20 }}"
|
||||
state: "{{ states('sensor.master_bedroom_aircon_power') | int > 20 }}"
|
||||
availability: "{{ states('climate.master_bedroom_aircon') not in ['unknown','unavailable'] }}"
|
||||
device_class: running
|
||||
- name: Kallen Fan - Separate Schedule
|
||||
unique_id: 3f243861-6a1f-412f-b9e3-933b54793b08
|
||||
|
527
scripts.yaml
527
scripts.yaml
@ -1663,47 +1663,113 @@ tony_morning_meds:
|
||||
tag: tony-morning-meds
|
||||
alias: Clear previous morning notification
|
||||
action: script.text_notify
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send morning notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: You need to take your morning meds
|
||||
tag: tony-morning-meds
|
||||
actions:
|
||||
- action: TONY_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
- alias: Send notifications, using AI if internet is connected
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.internet
|
||||
state: 'on'
|
||||
then:
|
||||
- alias: Generate reminder, be snarky if it's been several times
|
||||
if:
|
||||
- alias: If reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_morning_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_morning_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- data:
|
||||
who: common_areas
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point he's been reminded multiple times.
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send morning notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
message: Tony, you need to take your morning meds. This is reminder number
|
||||
{{ states('counter.tony_morning_meds_reminder_count') }} for today.
|
||||
alias: Send TTS notification
|
||||
action: script.speech_engine
|
||||
title: Morning Meds
|
||||
message: '{{ response.text }}'
|
||||
tag: tony-morning-meds
|
||||
actions:
|
||||
- action: TONY_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
if:
|
||||
- alias: When reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_morning_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: '{{ response.text }}'
|
||||
alias: Send TTS notification
|
||||
action: script.speech_engine
|
||||
else:
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send morning notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
tag: tony-morning-meds
|
||||
actions:
|
||||
- action: TONY_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
message: You need to take your morning meds
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
if:
|
||||
- alias: When reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_morning_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- alias: Send TTS notification
|
||||
data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: Tony, you need to take your morning meds
|
||||
action: script.speech_engine
|
||||
tony_night_meds:
|
||||
alias: Tony Night Meds
|
||||
icon: mdi:medication
|
||||
@ -1904,47 +1970,113 @@ tony_afternoon_meds:
|
||||
tag: tony-afternoon-meds
|
||||
alias: Clear previous afternoon notification
|
||||
action: script.text_notify
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send afternoon notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Afternoon Meds
|
||||
message: You need to take your afternoon meds
|
||||
tag: tony-afternoon-meds
|
||||
actions:
|
||||
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_AFTERNOON_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
- alias: Send notifications, using AI if internet is connected
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.internet
|
||||
state: 'on'
|
||||
then:
|
||||
- alias: Generate reminder, be snarky if it's been several times
|
||||
if:
|
||||
- alias: When reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- data:
|
||||
who: common_areas
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point he's been reminded multiple times.
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send afternoon notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
message: Tony, you need to take your afternoon meds. This is reminder number
|
||||
{{ states('counter.tony_afternoon_meds_reminder_count') }} for today.
|
||||
alias: Send TTS notification
|
||||
action: script.speech_engine
|
||||
title: Afternoon Meds
|
||||
message: '{{ response.text }}'
|
||||
tag: tony-afternoon-meds
|
||||
actions:
|
||||
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_AFTERNOON_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
if:
|
||||
- alias: When reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: '{{ response.text }}'
|
||||
alias: Send TTS notification
|
||||
action: script.speech_engine
|
||||
else:
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send afternoon notifications via text, and TTS if needed
|
||||
parallel:
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Afternoon Meds
|
||||
tag: tony-afternoon-meds
|
||||
actions:
|
||||
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TONY_AFTERNOON_MEDS_SKIPPED
|
||||
title: Skip
|
||||
message: You need to take your afternoon meds
|
||||
action: script.text_notify
|
||||
- alias: Send TTS if reminders > 2 and Tony is home
|
||||
if:
|
||||
- alias: When reminders > 2 and Tony is home
|
||||
condition: and
|
||||
conditions:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||
above: 2
|
||||
alias: When reminder count > 2
|
||||
- condition: state
|
||||
entity_id: person.tony_stork
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- alias: Send TTS notification
|
||||
data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: Tony, you need to take your afternoon meds
|
||||
action: script.speech_engine
|
||||
tony_ibuprofen:
|
||||
alias: Tony Ibuprofen
|
||||
sequence:
|
||||
@ -2308,56 +2440,37 @@ tony_tylenol:
|
||||
kallen_morning_meds:
|
||||
alias: Kallen Morning Meds
|
||||
sequence:
|
||||
- service: counter.increment
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: counter.kallen_morning_meds_reminder_count
|
||||
alias: Increment morning reminder counter
|
||||
- alias: Clear previous morning notifications
|
||||
parallel:
|
||||
- service: script.text_notify
|
||||
data:
|
||||
type: alert
|
||||
who: parents
|
||||
message: clear_notification
|
||||
tag: kallen-morning-meds-parents
|
||||
alias: Clear for parents
|
||||
- service: script.text_notify
|
||||
data:
|
||||
type: alert
|
||||
who: kallen
|
||||
message: clear_notification
|
||||
tag: kallen-morning-meds-self
|
||||
alias: Clear for Kallen
|
||||
action: counter.increment
|
||||
- alias: Clear previous text notifications
|
||||
data:
|
||||
type: alert
|
||||
who: all
|
||||
message: clear_notification
|
||||
tag: kallen-morning-meds
|
||||
action: script.text_notify
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notifications
|
||||
parallel:
|
||||
- alias: Send to parents
|
||||
service: script.text_notify
|
||||
data:
|
||||
who: parents
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: Kallen needs to take his morning meds
|
||||
tag: kallen-morning-meds-parents
|
||||
actions:
|
||||
- action: KALLEN_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: KALLEN_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
- service: script.text_notify
|
||||
data:
|
||||
who: kallen
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: You need to take your morning meds. Go to mom or dad to confirm.
|
||||
tag: kallen-morning-meds-self
|
||||
alias: Send to Kallen
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: all
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: Kallen needs to take his morning meds
|
||||
tag: kallen-morning-meds
|
||||
actions:
|
||||
- action: KALLEN_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: KALLEN_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
icon: mdi:medication
|
||||
mode: restart
|
||||
kallen_night_meds:
|
||||
@ -2929,75 +3042,163 @@ tina_morning_meds:
|
||||
icon: mdi:medication
|
||||
mode: restart
|
||||
sequence:
|
||||
- service: counter.increment
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: counter.tina_morning_meds_reminder_count
|
||||
alias: Increment morning reminder counter
|
||||
- service: script.text_notify
|
||||
data:
|
||||
action: counter.increment
|
||||
- data:
|
||||
type: alert
|
||||
who: tina
|
||||
message: clear_notification
|
||||
tag: tina-morning-meds
|
||||
alias: Clear previous morning notification
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
service: script.text_notify
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: You need to take your morning meds
|
||||
tag: tina-morning-meds
|
||||
actions:
|
||||
- action: TINA_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
description: ''
|
||||
action: script.text_notify
|
||||
- alias: Send notifications, using AI if internet is connected
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.internet
|
||||
state: 'on'
|
||||
then:
|
||||
- if:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tina_morning_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point she's been reminded multiple times.
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
alias: Generate reminder, be snarky if it's been several times
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: '{{ response.text }}'
|
||||
tag: tina-morning-meds
|
||||
actions:
|
||||
- action: TINA_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
else:
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
tag: tina-morning-meds
|
||||
actions:
|
||||
- action: TINA_MORNING_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_MORNING_MEDS_SKIPPED
|
||||
title: Skip
|
||||
message: You need to take your morning meds
|
||||
action: script.text_notify
|
||||
tina_night_meds:
|
||||
alias: Tina Night Meds
|
||||
icon: mdi:medication
|
||||
mode: restart
|
||||
sequence:
|
||||
- service: counter.increment
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: counter.tina_night_meds_reminder_count
|
||||
alias: Increment night reminder counter
|
||||
- service: script.text_notify
|
||||
data:
|
||||
action: counter.increment
|
||||
- data:
|
||||
type: alert
|
||||
who: tina
|
||||
message: clear_notification
|
||||
tag: tina-night-meds
|
||||
alias: Clear previous night notification
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
service: script.text_notify
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Night Meds
|
||||
message: You need to take your night meds
|
||||
tag: tina-night-meds
|
||||
actions:
|
||||
- action: TINA_NIGHT_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_NIGHT_MEDS_SKIPPED
|
||||
title: Skip
|
||||
description: ''
|
||||
action: script.text_notify
|
||||
- alias: Send notifications, using AI if internet is connected
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.internet
|
||||
state: 'on'
|
||||
then:
|
||||
- if:
|
||||
- condition: numeric_state
|
||||
entity_id: counter.tina_night_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point she's been reminded multiple times.
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
alias: Generate reminder, be snarky if it's been several times
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Night Meds
|
||||
message: '{{ response.text }}'
|
||||
tag: tina-night-meds
|
||||
actions:
|
||||
- action: TINA_NIGHT_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_NIGHT_MEDS_SKIPPED
|
||||
title: Skip
|
||||
action: script.text_notify
|
||||
else:
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
- alias: Send text notification
|
||||
data:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Night Meds
|
||||
tag: tina-night-meds
|
||||
actions:
|
||||
- action: TINA_NIGHT_MEDS_TAKEN
|
||||
title: Taken
|
||||
- action: TINA_NIGHT_MEDS_SKIPPED
|
||||
title: Skip
|
||||
message: You need to take your night meds
|
||||
action: script.text_notify
|
||||
tina_ibuprofen:
|
||||
sequence:
|
||||
- alias: Turn off boolean if this is a notification
|
||||
|
@ -75,28 +75,26 @@
|
||||
|
||||
<p>
|
||||
{% if (states('sensor.climate_devices_installed') | int) > 0 %}
|
||||
{% if is_state('input_boolean.master_bedroom_aircon_installed','on') %}
|
||||
"the master bedroom temperature is {{ states('sensor.master_bedroom_aircon_indoor_temperature') | int }} degrees. "
|
||||
{% if not is_state('climate.master_bedroom_aircon','off') %}
|
||||
{% if is_state('climate.master_bedroom_aircon','cool') %}
|
||||
"and the master bedroom air conditioner is set for cooling to {{ state_attr('climate.master_bedroom_aircon','temperature') }} degrees. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','fan_only') %}
|
||||
"and the master bedroom air conditioner is in fan only mode. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','dry') %}
|
||||
"and the master bedroom air conditioner is moonlighting as a dehumidifier. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','auto') %}
|
||||
"and the master bedroom air conditioner is making its own decisions. Be afraid, be very afraid. "
|
||||
{% else %}
|
||||
"and the master bedroom air conditioner is currently not speaking to me. Was it something I said? "
|
||||
{% endif %}
|
||||
{% if is_state('input_boolean.master_bedroom_aircon_installed','on') %}
|
||||
"the master bedroom temperature is {{ states('sensor.master_bedroom_temperature') | int }} degrees. "
|
||||
{% if not is_state('climate.master_bedroom_aircon','off') %}
|
||||
{% if is_state('climate.master_bedroom_aircon','cool') %}
|
||||
"and the master bedroom air conditioner is set for cooling to {{ state_attr('climate.master_bedroom_aircon','temperature') }} degrees. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','fan_only') %}
|
||||
"and the master bedroom air conditioner is in fan only mode. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','dry') %}
|
||||
"and the master bedroom air conditioner is moonlighting as a dehumidifier. "
|
||||
{% elif is_state('climate.master_bedroom_aircon','auto') %}
|
||||
"and the master bedroom air conditioner is making its own decisions. Be afraid, be very afraid. "
|
||||
{% else %}
|
||||
"and the master bedroom air conditioner is currently not speaking to me. Was it something I said? "
|
||||
{% endif %}
|
||||
{% elif is_state('input_boolean.master_bedroom_aircon_installed','off') %}
|
||||
"There is no air conditioner or temperature sensor installed in the master bedroom. "
|
||||
{% endif %}
|
||||
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') and is_state('fan.emma_air_conditioner','on') %}
|
||||
"Emma's air conditioner is {{ states('fan.emma_air_conditioner') }}. "
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') and is_state('fan.emma_air_conditioner','on') %}
|
||||
"Emma's air conditioner is {{ states('fan.emma_air_conditioner') }}. "
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
Reference in New Issue
Block a user