############################################################################### # @author : Jeffrey Stone # @date : 04/11/2020 # @package : Audio # @description : Audio related configuration. # @notes : This package assumes you are running version .115.0 or greater. # ############################################################################### ################################ # Media Player section for any media players you want to define. Most of these are setup via the integrations flow in the UI, # but if not you may need to modify the following section. # For more info on Media Players visit https://www.home-assistant.io/integrations/media_player/ # MODIFY this section as needed or comment it out completely if not needed. # media_player: # - platform: yamaha # host: 192.168.7.152 ################################ # Media extractor is used for playing youtube audio. For more info ->https://www.home-assistant.io/integrations/media_extractor/ # # If you have this enabled in another package or in your configuration.yaml comment out the line below media_extractor: ############################ # input_datetime (https://www.home-assistant.io/integrations/input_datetime/) # # This is simply so we can track last called alexa. input_datetime: last_time_alexa_called: name: Last Time Alexa Called has_date: true has_time: true ################################ # Scripts to handle audio script: ################################ # local_audio is meant to be used to play audio in your media folder. (https://www.home-assistant.io/integrations/media_source/) # # Before using make sure you update as needed. # # To call this using in the action section of your automation: # # - service: script.local_audio # data: # speaker: main # volume: .5 # media: /media/local_audio.mp3 # local_audio: sequence: # Ensure that audible notifications are allowed. Comment out if not needed. - condition: state entity_id: input_boolean.audible_notifications state: 'on' # Ensure the family is home. If you are using a group to track the family, or a person just update as needed. Comment out if not needed. - condition: state entity_id: group.family state: 'home' # Update the media player with the one you want to use - service: media_player.turn_on data: entity_id: > {{ speaker }} # This sets the voume via a parameter when the script is called, and should be a value between .1 and 1.0 - service: media_player.volume_set data: entity_id: > {{ speaker }} volume_level: > {{ volume }} - delay: 00:00:05 # This tells it to play the media and is set when the script is called. - service: media_player.play_media data: entity_id: > {{ speaker }} media_content_type: "music" media_content_id: > {{ media }} ################################ # youtube_audio is meant to be used to play audio from well youtube. # This scrtip requires the media_extractor integration. # # Before using make sure you update as needed. # # To call this using in the action section of your automation: # # - service: script.youtube_audio # data: # speaker: main # volume: .5 # media: https://www.youtube.com/watch?v=pVeX4C9B1Lk # youtube_audio: sequence: # Ensure that audible notifications are allowed. Comment out if not needed. - condition: state entity_id: input_boolean.audible_notifications state: 'on' # Ensure the family is home. If you are using a group to track the family, or a person just update as needed. Comment out if not needed. - condition: state entity_id: group.family state: 'home' # Update the media player with the one you want to use - service: media_player.turn_on data: entity_id: > {{ speaker }} # This sets the voume via a parameter when the script is called, and should be a value between .1 and 1.0 - service: media_player.volume_set data: entity_id: > {{ speaker }} volume_level: > {{ volume }} # This tells it to play the media and is set when the script is called. # media_content_type: video/Youtube - service: media_extractor.play_media data: entity_id: > {{ speaker }} media_content_type: music media_content_id: > {{ media }} automation: - id: e1cb2fdc-0423-11eb-adc1-0242ac120002 alias: Set Room Presence mode: restart trigger: - platform: state entity_id: sensor.room_audio action: - service: input_text.set_value data_template: entity_id: input_text.room_presence value: '{{ states(''sensor.room_audio'') }}' - service: mqtt.publish data: topic: house/presence/current_room payload: '{{ states(''sensor.room_audio'') }}' retain: true - id: e1cb287a-0423-11eb-adc1-0242ac120002 alias: Notification Volume Dim initial_state: true trigger: - platform: state entity_id: input_boolean.audible_notifications to: 'off' action: - service: media_player.volume_set data: entity_id: - media_player.kitchen_display - media_player.kitchen_echo - media_player.upstairs_speaker - media_player.croft_speaker volume_level: .3 - id: e1cb27bc-0423-11eb-adc1-0242ac120002 alias: Notification Volume Normal initial_state: true trigger: - platform: state entity_id: input_boolean.audible_notifications to: 'on' action: - service: media_player.volume_set data: entity_id: - media_player.kitchen_display - media_player.kitchen_echo - media_player.upstairs_speaker - media_player.croft_speaker - media_player.ha_blue - media_player.living_room_echo - media_player.master_bedroom_speaker - media_player.skylars_bedroom_speaker volume_level: .5 - id: e1cb17ea-0423-11eb-adc1-0242ac120002 alias: Set Last Alexa Called Time initial_state: true trigger: - platform: state entity_id: - media_player.living_room_echo - media_player.kitchen_echo - media_player.skylars_echo condition: - condition: template value_template: '{{ trigger.to_state.attributes.last_called_timestamp | float > trigger.from_state.attributes.last_called_timestamp | float }}' # Alexa has been triggered action: - service: input_datetime.set_datetime target: entity_id: input_datetime.last_time_alexa_called data: datetime: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' sensor: - platform: mqtt name: "Room Presence" state_topic: "house/presence/current_room" - platform: template sensors: room_audio: friendly_name: "Room Audio" value_template: >- {%- set last_alexa_called_seconds = (now() - as_local(states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='last_updated') | first)).seconds -%} {%- if last_alexa_called_seconds <= 60 %} {{ states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first }} {% elif expand('group.occupancy') | selectattr('state', 'eq', 'on') | list | count >= 1 %} {% set sensor = expand('group.occupancy') | selectattr('state', 'eq', 'on') | sort(attribute='last_changed') | last %} {% if is_state('input_boolean.audible_notifications', 'off') %} {% if sensor.name == 'Master Bedroom Motion occupancy' %} master_bedroom {% else %} kitchen {%- endif %} {% else %} {% if sensor.name == 'Master Bedroom Motion occupancy' %} master_bedroom {% elif sensor.name in ('Back Door Motion','Kitchen Motion Occupancy' ) %} kitchen {% elif sensor.name in ('Living Room Motion Occupancy' ) %} living_room {% elif sensor.name in ('Skylar Bedroom Motion occupancy' ) %} skylar_bedroom {% else %} main {%- endif %} {%- endif %} {% elif is_state('media_player.theater_tv', 'on') %} theater {% else %} {{ states('sensor.room_presence') }} {% endif %} alexa_audio: friendly_name: "Alexa Audio" value_template: >- {%- if is_state('sensor.last_alexa', 'media_player.living_room_echo') %} living_room {% elif is_state('sensor.last_alexa', 'media_player.kitchen_echo') %} kitchen {% elif is_state('sensor.last_alexa', 'media_player.skylar_s_bedroom') %} skylar_bedroom {% else %} main {%- endif %} last_alexa: value_template: > {{ states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first }}