From 3904d2339ced7ccd99ad9978d76f46242122cd55 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Mon, 18 Apr 2022 18:09:13 -0400 Subject: [PATCH] Added some framework for new TTS notifications --- packages/jarvis.yaml | 82 +++++++++++++++++++ packages/speech.yaml | 191 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 273 insertions(+) create mode 100644 packages/jarvis.yaml create mode 100644 packages/speech.yaml diff --git a/packages/jarvis.yaml b/packages/jarvis.yaml new file mode 100644 index 0000000..add2656 --- /dev/null +++ b/packages/jarvis.yaml @@ -0,0 +1,82 @@ +# Original author information below. Could not have done this without his awesome videos! + +############################################################################### +# @author : Jeffrey Stone +# @date : 07/09/2019 +# @package : Jarvis +# @description : Bringing some Jarvis to Home Assistant +############################################################################### + +input_boolean: + house_party_protocol_switch: + name: House Party Switch + +# automation: +# - id: house_party_protocol_on +# alias: Turn On House Party Protocol +# initial_state: true +# trigger: +# - platform: state +# entity_id: input_boolean.house_party_protocol_switch +# to: 'on' +# action: +# - delay: 00:00:05 +# - service: homeassistant.turn_on +# entity_id: group.incense +# - service: script.status_annc +# data_template: +# who: '{{ states.sensor.room_presence.state }}' +# call_house_party_protocol_enabled: 1 + +# - id: house_party_protocol_off +# alias: Turn Off House Party Protocol +# initial_state: true +# trigger: +# - platform: state +# entity_id: input_boolean.house_party_protocol_switch +# to: 'off' +# action: +# - delay: 00:00:05 +# - service: homeassistant.turn_off +# entity_id: group.incense +# - service: script.status_annc +# data_template: +# who: '{{ states.sensor.room_presence.state }}' +# call_house_party_protocol_disabled: 1 + +script: + house_party_protocol_on: + sequence: + - delay: 00:00:05 + - service: homeassistant.turn_on + entity_id: group.incense + - service: script.status_annc + data_template: + who: '{{ states.sensor.room_presence.state }}' + call_house_party_protocol_enabled: 1 + + house_party_protocol_off: + sequence: + - delay: 00:00:05 + - service: homeassistant.turn_off + entity_id: group.incense + - service: script.status_annc + data_template: + who: '{{ states.sensor.room_presence.state }}' + call_house_party_protocol_disabled: 1 + + alexa_interjection: + sequence: + - service: script.status_annc + data: + who: "{{ states('sensor.last_alexa')}}" + call_confirmation: 1 + + google_interjection: + sequence: + - service: script.status_annc + data: + who: '{{ states.sensor.room_audio.state }}' + call_confirmation: 1 + + diff --git a/packages/speech.yaml b/packages/speech.yaml new file mode 100644 index 0000000..8b28582 --- /dev/null +++ b/packages/speech.yaml @@ -0,0 +1,191 @@ + +script: + tts_notificatons: + sequence: + - service: script.speech_engine + data: + who: '{{ who }}' + message: >- + + {% macro greeting() %} +

+ {% if now().strftime('%H')|int < 12%} + Good morning. + {% elif now().strftime('%H')|int >= 12 and now().strftime('%H')|int < 17 %} + Good afternoon. + {% else %} + Good evening. + {% endif %} +

+ {% endmacro %} + + + {% macro confirmation() %} +

+ {{ [ + 'Okay.', + 'If you insist.', + 'I am afraid I can not do that I am kidding,', + 'Leave it to me.', + 'As you wish.', + 'I am on it.', + 'No Problem.', + 'I think I can handle that.', + 'Working on it now.', + ' Oh, you were talking to me. Let me take care of that.' + 'Why not. It is not like I ever sleep.', + 'I am not even supposed to be here today. But whatever.', + 'You did not say the magic word. Oh forget it. I will take care of it.', + 'Funny, I was just about to do that.', + 'There are still terabytes of calculations required before I can. Oh, whatever.' + ] | random }} +

+ {% endmacro %} + + {% macro interuption() %} +

+ {{ [ + 'Pardon me, ', + 'Excuse me, ', + 'I do not mean to interrupt, but,', + 'I hate to interrupt, but,', + 'I beg your pardon, ', + 'I do not mean to intrude, but, ', + 'I am sorry to interrupt, but. ', + 'Just a quick heads up, ' + ] | random }} +

+ {% endmacro %} + + {% macro issue() %} +

+ {{ [ + 'House Emergency Alert!', + 'Houston, We have a problem!', + 'You might not like this.', + 'There is something that needs your attention.' + ] | random }} +

+ {% endmacro %} + + {% macro time_is() %} +

+ It is {{ now().strftime("%I:%M %p") }} +

+ {% endmacro %} + + {%- macro house_party_protocol_enabled() -%} + {{ [ + 'The house has been configured for a House Party.', + 'I have enabled house party protocol.' + ] | random }} + {%- endmacro -%} + + {%- macro house_party_protocol_disabled() -%} + {{ [ + 'I have disabled house party protocol.' + ] | random }} + {%- endmacro -%} + + {%- macro snark_door_motion() -%} + {{ [ + 'Do you want me to send them away?', + 'I have armed the lasers. Just say the word.', + 'I was not informed there would be guests.', + 'They do not appear to have any gifts, so I suggest we do not open the door.', + 'My sensors have detected a meat popsicle.', + 'I do not think they can hear me.' + ] | random }} + {%- endmacro -%} + + {# a macro that removes all newline characters, empty spaces, and returns formatted text. Also replaces all Underscores with Spaces #} + {%- macro cleanup(data) -%} + {%- for item in data.split("\n") if item | trim != "" -%} + {{ item | trim | replace("_", " ") }} {% endfor -%} + {%- endmacro -%} + + + {# ********************************************* #} + {# ******** Start the Speech routines ******** #} + {# ********************************************* #} + {# a macro to call all macros :) #} + {%- macro mother_of_all_macros() -%} + {% if call_greeting == 1 %} + {{ greeting() }} + {% endif %} + + {% if call_confirmation == 1 %} + {{ confirmation() }} + {% endif %} + + {% if call_interuption == 1 %} + {{ interuption() }} + {% endif %} + + {% if call_issue == 1 %} + {{ issue() }} + {% endif %} + + {% if call_time_is == 1 %} + {{ time_is() }} + {% endif %} + + {% if call_house_party_protocol_enabled == 1 %} + {{ house_party_protocol_enabled() }} + {% endif %} + + {% if call_house_party_protocol_disabled == 1 %} + {{ house_party_protocol_disabled() }} + {% endif %} + + {{ welcome_home }} + + {{ speech_message }} + + {% if call_snark_door_motion == 1 %} + {{ snark_door_motion() }} + {% endif %} + + {%- endmacro -%} + + {{- cleanup(mother_of_all_macros()) -}} + + daily_briefing_script: + sequence: + - service: script.speech_engine + data: + who: media_player.living_room_echo_dot + message: >- + {%- macro getGreeting() -%} + {% if now().strftime('%H')|int < 12 %} + Good morning. + {% elif now().strftime('%H')|int >= 12 and now().strftime('%H')|int < 17 %} + Good afternoon. + {% else %} + Good evening. + {% endif %} + + {% if is_state('binary_sensor.morning','on') %} + Today is {{states.sensor.today_is.state }}, {{ as_timestamp(now()) | timestamp_custom('%B %d %Y') }}. + {% else %} + It is {{ now().strftime("%I:%M %p") }}. + {% endif %} + + {%- endmacro -%} + + {%- macro getDoorStatus() -%} + The Pod Bay Doors are Closed. + {%- endmacro -%} + + {# a macro that removes all newline characters, empty spaces, and returns formatted text #} + {%- macro cleanup(data) -%} + {%- for item in data.split("\n") if item | trim != "" -%} + {{ item | trim }} {% endfor -%} + {%- endmacro -%} + + {%- macro mother_of_all_macros() -%} + {{ getGreeting() }} + {{ getDoorStatus()}} + {%- endmacro -%} + + {{- cleanup(mother_of_all_macros()) -}}