# ###############################################################################
# #   @author         :   Mahasri Kalavala
# #   @date           :   11/22/2017
# #   @package        :   Emergency Stuff
# #   @description    :   When $hit hapens, this package gets called!
# #
# #   In case of emergency - turn on the emergency_mode (input boolean)
# #   lights, crazy sounds and alarms repeatedly until someone turns off
# #   input boolean and/or Home Security System is turned OFF.
# #
# #   All automations that alert during emerency situations, will turn on
# #   input boolean emergency_mode and notify using standard notification
# #
# #   My Home TTS/voice notifications will not work when music is being played
# #   The automations will stop MPD media player ( just to makesure), so that
# #   the TTS notifications will be played in case if someone plays music and
# #   forgot to turn if off.
# ###############################################################################

# homeassistant:
#   customize:
#       script.emergency_script:
#         friendly_name: Emergency Script
#         hidden: true
#       script.emergency_script_loop:
#         friendly_name: Emergency Script Loop
#         hidden: true
#       script.emergency_all_lights_switches_on:
#         friendly_name: All Lights & Switches ON
#       script.all_indoor_lights_off:
#         friendly_name: All Indoor Lights OFF

# input_boolean:
#   emergency_mode:
#     name: Emergency Mode
#     initial: 'off'

# ###############################################################################
# #                _                        _   _
# #     /\        | |                      | | (_)
# #    /  \  _   _| |_ ___  _ __ ___   __ _| |_ _  ___  _ __  ___
# #   / /\ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \/ __|
# #  / ____ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | \__ \
# # /_/    \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_|___/
# #
# ###############################################################################

# automation:

# ###############################################################################
# # When emergency mode is OFF, Keep the lights ON
# ###############################################################################
#   - alias: Emergency Mode Disabled
#     initial_state: true
#     trigger:
#       platform: state
#       entity_id: input_boolean.emergency_mode
#       from: 'on'
#       to: 'off'
#     action:
#       - delay: '00:00:05'
#       - service: script.voice_notify
#         data_template:
#           message: "Attention! Emergency mode is now deactivated!"
#       - service: script.notify_me
#         data_template:
#           message: "Emergency mode is now deactivated!"

# # Water Leak detected - initiate the emergency process
# ###############################################################################
#   - alias: Water Leak Detected
#     initial_state: true
#     trigger:
#       - platform: state
#         entity_id: sensor.aeotec_water_sensor_flood
#         from: '0'
#         to: '2'
#     action:
#       - service: input_boolean.turn_on
#         entity_id: input_boolean.emergency_mode
#       - service: script.emergency_all_lights_switches_on
#       - service: script.notify_me
#         data_template:
#           message: "EMERGENCY! Water Leak Detected in the Basement!"
#       - service: script.emergency_script
#         data:
#           volume_level: 25
#           alarm_code: 2
#           message: "ALERT! Water Leak Detected in the Basement!"

# # # Carbon Monoxide Detected in the house
# # ###############################################################################
# #   - alias: CO Detected
# #     initial_state: true
# #     trigger:
# #       - platform: state
# #         entity_id: sensor.audio_detector_carbon_monoxide
# #         from: '0'
# #     condition:
# #       - condition: template
# #         value_template: "{{ trigger.to_state.state != '0' }}"
# #     action:
# #       - service: script.voice_notify
# #         data_template:
# #           message: "Attention!: CARBON MONOXIDE DETECTED! GET THE HELL OUT OF THE HOUSE!"
# #       - service: script.notify_me
# #         data_template:
# #           message: "Attention!: CARBON MONOXIDE DETECTED!. GET THE HELL OUT OF THE HOUSE!"
# #       - service: input_boolean.turn_on
# #         entity_id: input_boolean.emergency_mode
# #       - service: media_player.media_stop
# #         entity_id: media_player.mpd
# #       - service: script.emergency_script
# #         data:
# #           volume_level: 99
# #           alarm_code: 2
# #           message: "Attention! Cabon Monoxide detected. Leave the house immediately!"

# # # Smoke Detected in the house
# # ###############################################################################
# #   - alias: Smoke Detected
# #     initial_state: true
# #     trigger:
# #       - platform: state
# #         entity_id: sensor.audio_detector_smoke
# #         from: '0'
# #     condition:
# #       - condition: template
# #         value_template: "{{ trigger.to_state.state != '0' }}"
# #     action:
# #       - service: script.voice_notify
# #         data_template:
# #           message: "Attention!: SMOKE DETECTED! CALL 911!"
# #       - service: script.notify_me
# #         data_template:
# #           message: "Attention!: SMOKE DETECTED!. CALL 911!"
# #       - service: input_boolean.turn_on
# #         entity_id: input_boolean.emergency_mode
# #       - service: media_player.media_stop
# #         entity_id: media_player.mpd
# #       - service: script.emergency_script
# #         data:
# #           volume_level: 99
# #           alarm_code: 2
# #           message: "Smoke Detected. Please get out of the home and call 911 immediately!"

# # Disable Emergency Mode upon Disabling Home Security System
# ###############################################################################
#   - alias: Disable Emergency Mode Upon Disabling Home Security
#     initial_state: true
#     trigger:
#       platform: state
#       entity_id: alarm_control_panel.simplisafe
#       to: 'disarmed'
#     condition:
#       - condition: template
#         value_template: '{{ states.input_boolean.emergency_mode.state == "on" }}'
#     action:
#       - service: input_boolean.turn_off
#         entity_id: input_boolean.emergency_mode

#   - alias: Home Security Away Motion Deteted Inside
#     initial_state: true
#     trigger:
#       platform: state
#       entity_id:
#         - binary_sensor.back_door_sensor_sensor
#         - binary_sensor.aeotec_zw120_door_window_sensor_gen5_sensor
#         - binary_sensor.basement_door_sensor_sensor
#         - binary_sensor.garage_door_sensor_sensor
#         - binary_sensor.front_room_multi_sensor_sensor
#         - binary_sensor.tv_multi_sensor_sensor
#         - binary_sensor.kitchen_motion_sensor_sensor
#         - binary_sensor.stairs_motion_sensor_sensor
#         - binary_sensor.upstairs_multi_sensor_sensor
#         - binary_sensor.two_car_garage_door_tilt_sensor_sensor
#         - binary_sensor.single_car_garage_door_tilt_sensor_sensor
#         - binary_sensor.motion_sensor_158d0001a662fe
#         - binary_sensor.motion_sensor_158d0001a25041
#         - binary_sensor.motion_sensor_158d00016db6d2
#         - binary_sensor.motion_sensor_158d00016c2d0e
#       from: 'off'
#       to: 'on'
#     condition:
#       - condition: template
#         value_template: "{{ trigger.from_state }}"
#       - condition: template
#         value_template: >
#           {% set state = states.alarm_control_panel.simplisafe.state %}
#           {% if state != "" and state != "unknown" and state == "armed_away" %}
#             true
#           {% else %}
#             false
#           {% endif %}
#       - condition: template
#         value_template: >
#           {% set suresh = states.device_tracker.suresh_suresh.state %}
#           {% set mallika = states.device_tracker.mallika_mallika.state %}
#           {% set srinika = states.device_tracker.srinika_srinika.state %}
#           {% set hasika = states.device_tracker.hasika_hasika.state %}
#           {% if suresh != "home" and mallika != "home" and srinika != "home" and hasika != "home" %}
#             True
#           {% else %}
#             False
#           {% endif %}
#     action:
#       - service: input_boolean.turn_on
#         entity_id: input_boolean.emergency_mode
#       - service: script.emergency_all_lights_switches_on
#       - service: script.notify_me
#         data_template:
#           message: "MOTION DETECTED '{{ trigger.to_state.attributes.friendly_name | upper }}',
#                     BUT NO ONE IS HOME. CALL FOR EMERGENCY!"
#       - service: notify.ios_devices
#         data_template:
#           title: >
#             {{ trigger.to_state.attributes.friendly_name }}
#           message: >
#             Attention: "MOTION DETECTED '{{ trigger.to_state.attributes.friendly_name | upper }}',
#                         BUT NO ONE IS HOME. CALL FOR EMERGENCY!"
#       - service: script.emergency_script
#         data:
#           volume_level: 99
#           alarm_code: 1
#           message: "Police are on the way!...Police are on the way!...Police are on the way!...Police are on the way!...Police are on the way!"

# script:

# # Main Emergency Script
# ###############################################################################
#   emergency_script:
#     sequence:
#       - condition: template
#         value_template: '{{ states.input_boolean.emergency_mode.state | lower == "on" }}'
#       - service: script.voice_notify
#         data_template:
#           message: '{{ message }}'
#           greeting: 'no'
#       - service: xiaomi_aqara.play_ringtone
#         data_template:
#           ringtone_id: '{{ alarm_code }}'
#           ringtone_vol: '{{ volume_level }}'
#       - delay: '00:00:01'
#       - service: script.emergency_script_loop
#         data_template:
#           message: '{{ message }}'
#           alarm_code: '{{ alarm_code }}'
#           volume_level: '{{ volume_level }}'

# # This script checks for the emergency_mode input_boolean and continue to
# # stay in emergency mode based on the input_boolean value
# ###############################################################################
#   emergency_script_loop:
#     sequence:
#       - condition: template
#         value_template: '{{ states.input_boolean.emergency_mode.state == "on" }}'
#       - delay: '00:00:02'
#       - service: script.emergency_script
#         data_template:
#           message: '{{ message }}'
#           alarm_code: '{{ alarm_code }}'
#           volume_level: '{{ volume_level }}'

# # Turns ALL lights & Switches ON (Lights in RED where possible)
# ###############################################################################
#   emergency_all_lights_switches_on:
#     sequence:
#       - service: script.xiaomi_red
#       - service: script.ifttt_leeo_color_change
#         data_template:
#           value1: "#FF0000"
#       - service: light.turn_on
#         entity_id: light.family_room
#         data:
#           transition: 0
#           brightness: 255
#           rgb_color: [255,0,0]
#       - service: light.turn_on
#         entity_id: light.master_bedroom
#         data:
#           transition: 0
#           brightness: 255
#           rgb_color: [255,0,0]
#       - service: switch.turn_on
#         entity_id:
#           - switch.basement_left
#           - switch.basement_right
#           - switch.garage
#           - switch.guest_bedroom
#           - switch.prayer_room
#           - switch.kids_bed_accent
#           - switch.kids_bedroom
#           - switch.office_room
#           - switch.smart_outlet_1
#           - switch.kitchen
#           - switch.zwave_smart_switch_switch
#           - switch.rf_switch_five
#           - switch.rf_switch_four
#           - switch.rf_switch_one
#           - switch.rf_switch_three
#           - switch.rf_switch_two
#           - switch.wemobackyardlightswitch
#           - switch.frontyard_light
#           - switch.downstairs_bathroom_fragrance_outlet
#           - switch.downstairs_fragrance
#           - switch.upstairs_fragrance
#           - switch.kitchen_siren_switch
#           - switch.kitchen_siren_switch_2
#           - switch.kitchen_siren_switch_3
#           - switch.kitchen_siren_switch_4
#           - switch.kitchen_siren_switch_5
#           - switch.wemoswitch1