homeassistant:
  customize:
    package.door_sensors:
sensor:
  - platform: template
    sensors:
      single_car_garage_door_sensor_status:
        friendly_name: Single Car Garage Door Sensor Status
        value_template: >-
          {% if states('binary_sensor.door_window_sensor_158d0004248d5b') == 'on' %}
            Open
          {% elif states('binary_sensor.door_window_sensor_158d0004248d5b') == 'off' %}
            Closed
          {% else %}
            Unknown
          {% endif %}
        icon_template: >-
          {% set door_status = states('binary_sensor.door_window_sensor_158d0004248d5b') %}
          {% if door_status == 'unknown' %}
            mdi:alert-circle
          {% else %}
            {% if door_status == 'on' %}
              mdi:garage-open
            {% else %}
              mdi:garage
            {% endif %}
          {% endif %}

  - platform: template
    sensors:
      two_car_garage_door_sensor_status:
        value_template: >-
          {% if states('binary_sensor.door_window_sensor_158d0004231f7b') == 'on' %}
            Open
          {% elif states('binary_sensor.door_window_sensor_158d0004231f7b') == 'off' %}
            Closed
          {% else %}
            Unknown
          {% endif %}
        friendly_name: Double Car Garage Door Sensor Status
        icon_template: >-
          {% set door_status = states('binary_sensor.door_window_sensor_158d0004231f7b') %}
          {% if door_status == 'unknown' %}
            mdi:alert-circle
          {% else %}
            {% if door_status == 'on' %}
              mdi:garage-open
            {% else %}
              mdi:garage
            {% endif %}
          {% endif %}

binary_sensor:
  - platform: mqtt
    state_topic: "/garage/motion"
    name: "Garage Motion"
    device_class: motion
    payload_on: "on"
    payload_off: "off"
    value_template: "{{ value }}"

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

automation:
  - alias: Garage Motion Reset
    initial_state: true
    trigger:
      - platform: state
        entity_id: binary_sensor.garage_motion
        to: "on"
        from: "off"
    action:
      - delay: "00:00:30"
      - service: mqtt.publish
        data:
          topic: "/garage/motion"
          payload: "off"
          retain: false

  - alias: Turn Garage Lights On When Motion Detected or Door Opened
    initial_state: true
    trigger:
      - platform: state
        entity_id: binary_sensor.motion_sensor_158d000272bf48
        to: "on"
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.turn_on
        entity_id: switch.garage

  ################################################################################
  # Notifies when either of the garage door is opened or closed
  ###############################################################################
  - alias: Notify Garage Door Status
    initial_state: true
    trigger:
      platform: state
      entity_id:
        - binary_sensor.door_window_sensor_158d0004248d5b # Single car garage
        - binary_sensor.door_window_sensor_158d0004231f7b # 2 Car Garage
    condition:
      - condition: template
        value_template: "{{ trigger.from_state.state not in ['unavailable', 'unknown'] }}"
      - condition: template
        value_template: "{{ trigger.to_state.state not in ['unavailable', 'unknown'] }}"
      - condition: template
        value_template: "{{ states('input_boolean.garage_door_notifications') == 'on' }}"
    action:
      - service: switch.turn_on
        entity_id: switch.garage
      - service: camera.snapshot
        data:
          entity_id: "camera.garage"
          filename: "{{ '/config/www/downloads/camera/garage/garage_' ~
            ((state_attr('automation.notify_garage_door_status', 'last_triggered') |string).replace('-','_')
            .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg') }}"
      - delay: "00:00:05"
      - service: script.notify_family
        data_template:
          title: "Garage Door Status"
          message: >
            {% set doors = "" %}
            {% if states('binary_sensor.door_window_sensor_158d0004231f7b') == "on"  and
                  states('binary_sensor.door_window_sensor_158d0004248d5b') == "on" %}
              {% set doors = "Attention! Both Garage Doors are OPEN" %}
            {% elif states('binary_sensor.door_window_sensor_158d0004231f7b') == "off"  and
                    states('binary_sensor.door_window_sensor_158d0004248d5b') == "off" %}
              {% set doors = "Both Garage Doors are now CLOSED" %}
            {% else %}
              {% if trigger.from_state.state != trigger.to_state.state and trigger.to_state.state | lower == "on" %}
                {% set doors = "Attention! Your {{ trigger.to_state.attributes.friendly_name }} is now OPENED!" %}
              {% elif trigger.from_state.state != trigger.to_state.state and trigger.to_state.state | lower == "off" %}
                {% set doors = "Your {{ trigger.to_state.attributes.friendly_name }} is now CLOSED!" %}
              {% endif %}
            {% endif %}
            {{ doors }}
          url: !secret garage_camera_snapshot_url
          path: >
            "{{ '/config/www/downloads/camera/garage/garage_' ~
              ((state_attr('automation.notify_garage_door_status', 'last_triggered') |string).replace('-','_')
              .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg') }}"
          notify_options:
            - tv
            - led
      - service: notify.telegram
        data_template:
          title: "Camera Images"
          message: "Check the garage photo below:"
          data:
            photo:
              - url: !secret garage_camera_snapshot_url
                caption: "Garage"
      - service: switch.turn_off
        entity_id: switch.garage

  ###############################################################################
  # Notify Entry Door Status
  ###############################################################################
  - alias: Notify Entry Door Status
    initial_state: true
    trigger:
      platform: state
      entity_id:
        - binary_sensor.door_window_sensor_158d000424a6d6 # Front Door
        - binary_sensor.door_window_sensor_158d00040ad8fc # Back Door
        - binary_sensor.door_window_sensor_158d0004880f30 # Garage Entry Door
    condition:
      - condition: template
        value_template: "{{ trigger.from_state.state not in ['unavailable', 'unknown']  }}"
      - condition: template
        value_template: "{{ trigger.from_state.state != trigger.to_state.state }}"
    action:
      - service: script.notify_family
        data:
          message: >
            {% if trigger.to_state.state | lower == "on" %}
              Your {{ trigger.to_state.attributes.friendly_name.replace('Sensor', '') }} is OPEN,
              {% if states('alarm_control_panel.home') == 'armed_home' or
                    states('alarm_control_panel.home') == 'armed_away' %}
              But your home security system is ON.
              {% endif %}
            {% elif trigger.to_state.state | lower == "off" %}
              Your {{ trigger.to_state.attributes.friendly_name.replace('Sensor', '') }} is CLOSED!
            {% endif %}
          notify_options:
            # - telegram
            - tv
            - led

  ###############################################################################
  # Light automations when doors are opened
  ###############################################################################

  - alias: When Front Door Opens Turn Front Room Lights ON
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d000424a6d6
      to: "on"
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.frontdoor_cam
      - condition: template
        value_template: "{{ states('sun.sun') == 'below_horizon' }}"
      - service: switch.turn_on
        entity_id: switch.front_room

  - alias: When Back Door Opens Turn Kitchen Lights ON
    initial_state: true
    trigger:
      - platform: state
        entity_id: binary_sensor.door_window_sensor_158d00040ad8fc
        to: "on"
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service_template: "script.{{ ['patio_cam', 'playarea_cam'] | random }}"
      - condition: template
        value_template: "{{ states('sun.sun') == 'below_horizon' }}"
      - service: switch.turn_on
        entity_id: switch.kitchen_switch

  ################################################################################
  #  When I open the garage door
  #     if it is dark outside, OR
  #     both the garage doors are closed
  #       ==> turn the Garage lights ON, and start timer!
  ################################################################################
  - alias: Garage Lights On When Door is Opened
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d0004880f30
      to: "on"
    condition:
      condition: or
      conditions:
        - condition: template
          value_template: '{{states.sun.sun.state == "below_horizon"}}'
        - condition: and
          conditions:
            - condition: template
              value_template: "{{ states('binary_sensor.door_window_sensor_158d0004248d5b') == 'off' }}"
            - condition: template
              value_template: "{{ states('binary_sensor.door_window_sensor_158d0004231f7b') == 'off' }}"
        - condition: state
          entity_id: input_boolean.light_automations
          state: "on"
    action:
      - service: switch.turn_on
        entity_id: switch.garage
      - service: timer.start
        entity_id: timer.timer_garage

  ###############################################################################
  # MASTER BATHROOM AUTOMATIONS
  ###############################################################################
  #
  # Only turn ON lights at 25% at night
  #
  - alias: Master Bathroom Door Opened After Dark
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d000424718f
      to: "on"
    condition:
      - condition: template
        value_template: '{{states("sun.sun") == "below_horizon"}}'
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        entity_id: light.master_bathroom_lights
        data:
          brightness: 64 # 25% of brightness
          transition: 5

  - alias: Master Bathroom Door Opened During The Day
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d000424718f
      to: "on"
    condition:
      - condition: template
        value_template: '{{states("sun.sun") == "above_horizon"}}'
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        entity_id: light.master_bathroom_lights
        data:
          brightness: 254 # 100% of brightness
          transition: 5

  - alias: Master Bathroom Toilet Door Opened
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d00044e5cb3
      to: "on"
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.turn_on
        entity_id: switch.master_bathroom_toilet_light

  - alias: Turn off Master Bathroom Toilet if the door is open for too long
    initial_state: true
    trigger:
      - platform: state
        entity_id: binary_sensor.door_window_sensor_158d00044e5cb3
        to: "on"
        for:
          minutes: 3
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.turn_off
        data:
          entity_id: switch.master_bathroom_toilet_light

  ###############################################################################
  # GUEST BATHROOM AUTOMATIONS
  ###############################################################################

  - alias: Guest Bathroom Door Opened
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d00045ab168
      to: "on"
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.turn_on
        entity_id: switch.guest_bathroom_lights