diff --git a/config/media/haunted_sounds/ChainsRattling.mp3 b/config/media/haunted_sounds/ChainsRattling.mp3 new file mode 100755 index 0000000..502742e Binary files /dev/null and b/config/media/haunted_sounds/ChainsRattling.mp3 differ diff --git a/config/media/haunted_sounds/CreakingDoorSpooky.mp3 b/config/media/haunted_sounds/CreakingDoorSpooky.mp3 new file mode 100755 index 0000000..d087501 Binary files /dev/null and b/config/media/haunted_sounds/CreakingDoorSpooky.mp3 differ diff --git a/config/media/haunted_sounds/EvilLaughCackle.mp3 b/config/media/haunted_sounds/EvilLaughCackle.mp3 new file mode 100755 index 0000000..fe320a0 Binary files /dev/null and b/config/media/haunted_sounds/EvilLaughCackle.mp3 differ diff --git a/config/media/haunted_sounds/Evil_Laugh_2.mp3 b/config/media/haunted_sounds/Evil_Laugh_2.mp3 new file mode 100755 index 0000000..1e66998 Binary files /dev/null and b/config/media/haunted_sounds/Evil_Laugh_2.mp3 differ diff --git a/config/media/haunted_sounds/Evillaugh.mp3 b/config/media/haunted_sounds/Evillaugh.mp3 new file mode 100755 index 0000000..8ff98e8 Binary files /dev/null and b/config/media/haunted_sounds/Evillaugh.mp3 differ diff --git a/config/media/haunted_sounds/Haunted-CatScream.mp3 b/config/media/haunted_sounds/Haunted-CatScream.mp3 new file mode 100755 index 0000000..0c74b2c Binary files /dev/null and b/config/media/haunted_sounds/Haunted-CatScream.mp3 differ diff --git a/config/media/haunted_sounds/Haunted-DragonRoaring.mp3 b/config/media/haunted_sounds/Haunted-DragonRoaring.mp3 new file mode 100755 index 0000000..7421fe5 Binary files /dev/null and b/config/media/haunted_sounds/Haunted-DragonRoaring.mp3 differ diff --git a/config/media/haunted_sounds/Haunted-Heart.mp3 b/config/media/haunted_sounds/Haunted-Heart.mp3 new file mode 100755 index 0000000..53c8ec3 Binary files /dev/null and b/config/media/haunted_sounds/Haunted-Heart.mp3 differ diff --git a/config/media/haunted_sounds/Haunted-ScaryScream.mp3 b/config/media/haunted_sounds/Haunted-ScaryScream.mp3 new file mode 100755 index 0000000..63d0f18 Binary files /dev/null and b/config/media/haunted_sounds/Haunted-ScaryScream.mp3 differ diff --git a/config/media/haunted_sounds/Haunted-TollingBell.mp3 b/config/media/haunted_sounds/Haunted-TollingBell.mp3 new file mode 100755 index 0000000..58b0472 Binary files /dev/null and b/config/media/haunted_sounds/Haunted-TollingBell.mp3 differ diff --git a/config/media/haunted_sounds/Scary.mp3 b/config/media/haunted_sounds/Scary.mp3 new file mode 100755 index 0000000..eccca24 Binary files /dev/null and b/config/media/haunted_sounds/Scary.mp3 differ diff --git a/config/media/haunted_sounds/This_is_Halloween.mp3 b/config/media/haunted_sounds/This_is_Halloween.mp3 new file mode 100755 index 0000000..f837f80 Binary files /dev/null and b/config/media/haunted_sounds/This_is_Halloween.mp3 differ diff --git a/config/media/haunted_sounds/raven.mp3 b/config/media/haunted_sounds/raven.mp3 new file mode 100755 index 0000000..9dc539a Binary files /dev/null and b/config/media/haunted_sounds/raven.mp3 differ diff --git a/config/packages/halloween.yaml b/config/packages/halloween.yaml index 6a627aa..8742693 100755 --- a/config/packages/halloween.yaml +++ b/config/packages/halloween.yaml @@ -50,9 +50,14 @@ input_boolean: input_datetime: halloween_show: name: Halloween Show - has_date: false + has_date: true has_time: true +################################ +# 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: ############################ # Automations (https://www.home-assistant.io/integrations/automation/) @@ -66,66 +71,16 @@ automation: initial_state: true trigger: # When the current time matches input_datetime.halloween_show, light this candle - - platform: template - value_template: "{{ states('sensor.time') == (state_attr('input_datetime.halloween_show', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}" - condition: - # But make sure the day is Halloween. - - condition: template - value_template: > - {%- set event=states.calendar.holidays_in_united_states.attributes.message %} - {%- if event == 'Halloween' and states.calendar.holidays_in_united_states.state == 'on'%} - true - {%- endif -%} - # If all conditions are true, then lets turn this thing on. + - platform: time + at: input_datetime.halloween_show action: - service: input_boolean.turn_on entity_id: input_boolean.this_is_halloween + - delay: '01:00:00' + - service: input_boolean.turn_off + entity_id: input_boolean.this_is_halloween - # This is the show. Breaking this up like this has two benefits: - # 1. You can test the haunted house piece without kicking having to be on Halloween - # 2. It gives you the ability to kill the show if things go horribly wrong... - # - # - id: operation_haunted_house_on - # alias: Operation Haunted House On - # initial_state: true - # # If this_is_halloween switch is turned on then we start the show. - # trigger: - # - platform: state - # entity_id: input_boolean.this_is_halloween - # to: 'on' - # action: - # # First up we play This is Halloween from Nightmare Before Christmas. Change this to what ever audio you want, or comment this one out. - # - service: script.local_audio - # data: - # media: "/media/disney/This_is_Halloween.mp3" - # volume: .5 - # # And turn on the haunted House script. - # - service: script.turn_on - # entity_id: script.haunted_house - - - # # Haunted House Kill Switch. If the this_is_halloween switch is turned off, the stop everything. - # - id: operation_haunted_house_off - # alias: Operation Haunted House Off - # initial_state: true - # trigger: - # - platform: state - # entity_id: input_boolean.this_is_halloween - # to: 'off' - # action: - # # This stops the media player. Besure to change it to match your music player - # - service: media_player.media_stop - # entity_id: media_player.ha_speaker - # # this kills the local_audio script if its running. - # - service: script.turn_off - # entity_id: script.local_audio - # # This kills the youtube audio script if it is running. - # - service: script.turn_off - # entity_id: script.youtube_audio - # # And finally we turn off the haunted house script so no more sounds play. - # - service: script.turn_off - # entity_id: script.haunted_house - id: operation haunted house alias: Operation Haunted House @@ -150,12 +105,6 @@ automation: - condition: trigger id: start sequence: - # First up we play This is Halloween from Nightmare Before Christmas. Change this to what ever audio you want, or comment this one out. - - service: script.local_audio - data: - media: "/media/disney/This_is_Halloween.mp3" - volume: .5 - # And turn on the haunted House script. - service: script.turn_on target: entity_id: script.haunted_house @@ -168,10 +117,9 @@ automation: - service: script.turn_off target: entity_id: script.haunted_house - # This stops the media player. Besure to change it to match your music player - - service: media_player.media_stop + - service: scene.turn_on target: - entity_id: media_player.ha_speaker + entity_id: scene.before_haunting default: [] initial_state: true mode: single @@ -183,91 +131,86 @@ script: # haunted_house: sequence: - # Ensure that haunted sounds are allowed. If it is, proceed. - - condition: state - entity_id: input_boolean.haunted_sounds - state: 'on' - # First off we have a 5 min delay. This is to ensure that "this is Halloween" that played at the start is finished befoore we hear the first sound. - - delay: '00:05:00' - # After the delay, play a random selection from our haunted sounds. - - service: script.haunted_sounds - # Then another delay. This one is a random delay between 2 and 5 minutes. A delay of at least 2 minutes ensures the previous effect is done before the next one. - - delay: '00:0{{ range(2,5) | random | int }}:00' - # After the delay, play a random haunted sounds. This time though, if we have scary sounds on we play one from there, if not, back to haunted sounds. - - service: > - {% if states.input_boolean.scary_sounds.state == 'on' %} - script.more_haunted_sounds - {% else %} - script.haunted_sounds - {% endif %} - # Then we start the same cycle over. And continue for a max of 55 minutes. - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: script.haunted_sounds - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: > - {% if states.input_boolean.scary_sounds.state == 'on' %} - script.more_haunted_sounds - {% else %} - script.haunted_sounds - {% endif %} - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: script.haunted_sounds - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: > - {% if states.input_boolean.scary_sounds.state == 'on' %} - script.more_haunted_sounds - {% else %} - script.haunted_sounds - {% endif %} - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: script.haunted_sounds - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: > - {% if states.input_boolean.scary_sounds.state == 'on' %} - script.more_haunted_sounds - {% else %} - script.haunted_sounds - {% endif %} - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: script.haunted_sounds - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: > - {% if states.input_boolean.scary_sounds.state == 'on' %} - script.more_haunted_sounds - {% else %} - script.haunted_sounds - {% endif %} - - delay: '00:0{{ range(2,5) | random | int }}:00' - - service: script.haunted_sounds - # Then we hit a final delay - - delay: '00:05:00' - # And we turn it off, which activates the kill switch to make sure all is shutdown. - - service: input_boolean.turn_off - entity_id: input_boolean.this_is_halloween - - + - repeat: + while: + - condition: state + entity_id: input_boolean.this_is_halloween + state: 'on' + sequence: + # Take a snap shot of current state + - service: scene.create + data: + scene_id: before_haunting + snapshot_entities: + - light.front_door_lamp + - light.living_room_lamp + - light.living_room_tower_lamp + - light.skylars_dresser_lamp + - light.kitchen_sink + - light.master_bedroom_tower_lamp + - light.jeff_lamp + # Change a random Random Light + - service: light.toggle + data: + entity_id: > + {{['light.front_door_lamp', + 'light.living_room_lamp', + 'light.living_room_tower_lamp', + 'light.skylars_dresser_lamp', + 'light.kitchen_sink', + 'light.master_bedroom_tower_lamp', + 'light.jeff_lamp'] + | random}} + # Start playing a random selection from our haunted sounds. + - service: script.haunted_sounds + # Then another delay. This one is a random delay between 2 and 5 minutes. A delay of at least 2 minutes ensures the previous effect is done before the next one. + - delay: '00:0{{ range(2,5) | random | int }}:00' + # After the delay, change the state of the lights back to what they were + - service: scene.turn_on + target: + entity_id: scene.before_haunting + # play more random haunted sounds. This time though, if we have scary sounds on we play one from there, if not, back to haunted sounds. + - service: > + {% if is_state('input_boolean.scary_sounds', 'on') %} + script.more_haunted_sounds + {% else %} + script.haunted_sounds + {% endif %} + # Then delay again, and when that is done start over. + - delay: '00:0{{ range(2,5) | random | int }}:00' + + # Update this script with your youtube sounds. # Each time this script is called it will play a random sound more_haunted_sounds: sequence: - service: script.youtube_audio # This script is in the audio.yaml in the packages folder. - data_template: + data: + speaker: > + {{ ['media_player.kitchen_display', + 'media_player.upstairs_speaker', + 'media_player.master_bedroom_speaker', + 'media_player.croft_speaker', + 'media_player.ha_speaker', + 'media_player.skylars_bedroom_speaker', + 'media_player.theater' + ] | random }} volume: .5 # I try to ensure each of the following links is 60 seconds or less. media: > {{- [ - "https://www.youtube.com/watch?v=pVeX4C9B1Lk", - "https://www.youtube.com/watch?v=S_hKvncbL9w", - "https://www.youtube.com/watch?v=zB-Y5OswETY", - "https://www.youtube.com/watch?v=x5tmmRZYq4s", - "https://www.youtube.com/watch?v=rxxC7RJ2b_E", - "https://www.youtube.com/watch?v=Zhd8V9cDUsA", - "https://www.youtube.com/watch?v=jmSI-jf6nLo", - "https://www.youtube.com/watch?v=szxC3E7m9dk", - "https://www.youtube.com/watch?v=TaejWf5NIfI", - "https://www.youtube.com/watch?v=orDBUrmK9vU", - "https://www.youtube.com/watch?v=nKltUaCxZPc", - "https://www.youtube.com/watch?v=_A1yK0YU6U0" + "https://www.youtube.com/watch?v=-s04sbIViJQ", + "https://www.youtube.com/watch?v=vF681VBX_oo", + "https://www.youtube.com/watch?v=WQVnOSj8DWI", + "https://www.youtube.com/watch?v=DaOnw_kCcYU", + "https://www.youtube.com/watch?v=E9VFB_0nSbA", + "https://www.youtube.com/watch?v=_A1yK0YU6U0", + "https://www.youtube.com/watch?v=AQ1SE4tLICg", + "https://www.youtube.com/watch?v=SsVj21c9isA", + "https://www.youtube.com/watch?v=nKltUaCxZPc", + "https://www.youtube.com/watch?v=G3JlB47fzV4", + "https://www.youtube.com/watch?v=_24O4vb-KWk", + "https://www.youtube.com/watch?v=oeLcHIpTlHU" ] | random -}} # Update this script with your local sounds. @@ -279,7 +222,16 @@ script: entity_id: input_boolean.haunted_sounds state: 'on' - service: script.local_audio # This script is in the audio.yaml in the packages folder. - data_template: + data: + speaker: > + {{ ['media_player.kitchen_display', + 'media_player.upstairs_speaker', + 'media_player.master_bedroom_speaker', + 'media_player.croft_speaker', + 'media_player.ha_speaker', + 'media_player.skylars_bedroom_speaker', + 'media_player.theater' + ] | random }} volume: .5 # I try to ensure each of the following links is 60 seconds or less. media: > @@ -301,6 +253,97 @@ script: "/media/haunted_sounds/Haunted-TollingBell.mp3", "/media/haunted_sounds/Haunted-Vocals.mp3" ] | random -}} + +################################ + # 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: media_player.ha_speaker + # 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: sensor.family_status + # 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: media_player.ha_speaker + # 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: sensor.family_status + 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. + - service: media_extractor.play_media + data: + entity_id: > + {{ speaker }} + media_content_type: video/youtube + media_content_id: > + {{ media }} # sensor: # # Halloween Countdown Sensor using Wolfram Alpha. See the note at the top for a link to how to set it up