#-------------------------------------------
#  ALarm Related Packages
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
#-------------------------------------------
homeassistant:
  customize_glob:
    "device_tracker.nodemcu*":
      icon: mdi:chip


    "binary_sensor.mcu?_gpio*":
      icon: mdi:security-home



  customize:
    binary_sensor.MCU1_GPIO4:
      friendly_name: 'Paige Window'
    binary_sensor.MCU1_GPIO5:
      friendly_name: 'Front Door'
    binary_sensor.MCU1_GPIO10:
      friendly_name: 'Dining Room Windows'
    binary_sensor.MCU1_GPIO12:
      friendly_name: 'Interior Garage Door'
    binary_sensor.MCU1_GPIO13:
      friendly_name: 'Front Den Windows'
    binary_sensor.MCU1_GPIO14:
      friendly_name: 'Office Window'


    binary_sensor.MCU2_GPIO4:
      friendly_name: 'Dinette Windows'
    binary_sensor.MCU2_GPIO5:
      friendly_name: 'Back Door'
    binary_sensor.MCU2_GPIO9:
      friendly_name: 'Master Slider'
    binary_sensor.MCU2_GPIO10:
      friendly_name: 'Master Bathroom Window'
    binary_sensor.MCU2_GPIO12:
      friendly_name: 'Main Slider'
    binary_sensor.MCU2_GPIO13:
      friendly_name: 'Upstairs Bedroom Window'
    binary_sensor.MCU2_GPIO14:
      friendly_name: 'Justin Window'

    binary_sensor.MCU3_GPIO4:
      friendly_name: 'Stacey Bedroom Window'
    binary_sensor.MCU3_GPIO5:
      friendly_name: 'Carlo Bedroom Window'
    binary_sensor.MCU3_GPIO10:
      friendly_name: 'Master Bedroom Window'
    binary_sensor.MCU3_GPIO14:
      friendly_name: 'Upstairs Windows'
    binary_sensor.MCU3_Light:
      friendly_name: 'Panel Door'

    group.entry_points:
      friendly_name: Alarm Entry Points

    group.interior_door:
      friendly_name: Interior doors

#-------------------------------------------
binary_sensor:
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO4/Status"
    name: "MCU1_GPIO4"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO5/Status"
    name: "MCU1_GPIO5"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO10/Status"
    name: "MCU1_GPIO10"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO12/Status"
    name: "MCU1_GPIO12"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO13/Status"
    name: "MCU1_GPIO13"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU1/GPIO14/Status"
    name: "MCU1_GPIO14"
    payload_on: 1
    payload_off: 0
    device_class: opening

  - platform: mqtt
    state_topic: "NodeMCU2/GPIO4/Status"
    name: "MCU2_GPIO4"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO5/Status"
    name: "MCU2_GPIO5"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO9/Status"
    name: "MCU2_GPIO9"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO10/Status"
    name: "MCU2_GPIO10"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO12/Status"
    name: "MCU2_GPIO12"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO13/Status"
    name: "MCU2_GPIO13"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU2/GPIO14/Status"
    name: "MCU2_GPIO14"
    payload_on: 1
    payload_off: 0
    device_class: opening

  - platform: mqtt
    state_topic: "NodeMCU3/GPIO4/Status"
    name: "MCU3_GPIO4"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU3/GPIO5/Status"
    name: "MCU3_GPIO5"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU3/GPIO10/Status"
    name: "MCU3_GPIO10"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU3/GPIO14/Status"
    name: "MCU3_GPIO14"
    payload_on: 1
    payload_off: 0
    device_class: opening
  - platform: mqtt
    state_topic: "NodeMCU3/Light/Status"
    name: "MCU3_Light"
    payload_on: 1
    payload_off: 0
    device_class: opening

# input_boolean:
#   elephant:
#     name: Elephant
#     initial: off
#-------------------------------------------
group:
  entry_points:
    entities:
      - binary_sensor.MCU1_GPIO4
      - binary_sensor.MCU1_GPIO5
      - binary_sensor.MCU1_GPIO10
      - binary_sensor.MCU1_GPIO12
      - binary_sensor.MCU1_GPIO13
      - binary_sensor.MCU1_GPIO14
      - binary_sensor.MCU2_GPIO4
      - binary_sensor.MCU2_GPIO5
      - binary_sensor.MCU2_GPIO9
      - binary_sensor.MCU2_GPIO10
      - binary_sensor.MCU2_GPIO12
      - binary_sensor.MCU2_GPIO13
      - binary_sensor.MCU2_GPIO14
      - binary_sensor.MCU2_GPIO15
      - binary_sensor.MCU3_GPIO4
      - binary_sensor.MCU3_GPIO5
      - binary_sensor.MCU3_GPIO10
      - binary_sensor.MCU3_GPIO14
  # interior_door: - Moved out to Doors Group.
  #   entities:
  #     - binary_sensor.kitchen_door
  #     - binary_sensor.MCU3_Light
#-------------------------------------------#-------------------------------------------
automation:
  - alias: 'Turn off HVAC in window/door is opened'
    id: 417961da-b706-4d5f-b155-e3518d24f0bc
    trigger:
      - platform: state
        entity_id:
          - binary_sensor.MCU1_GPIO4
          - binary_sensor.MCU1_GPIO5
          - binary_sensor.MCU1_GPIO10
          - binary_sensor.MCU1_GPIO12
          - binary_sensor.MCU1_GPIO13
          - binary_sensor.MCU1_GPIO14
          - binary_sensor.MCU2_GPIO4
          - binary_sensor.MCU2_GPIO5
          - binary_sensor.MCU2_GPIO9
          - binary_sensor.MCU2_GPIO10
          - binary_sensor.MCU2_GPIO12
          - binary_sensor.MCU2_GPIO13
          - binary_sensor.MCU2_GPIO14
          - binary_sensor.MCU3_GPIO4
          - binary_sensor.MCU3_GPIO5
          - binary_sensor.MCU3_GPIO10
          - binary_sensor.MCU3_GPIO14
        to: 'on'
        from: 'off'
        for:
          minutes: 5

    condition:
      - condition: template
        value_template: "{{ states('climate.downstairs') != 'off' }}"

    action:
      - service: climate.turn_off
        data:
          entity_id: climate.downstairs
      - service: script.speech_engine
        data:
          value1: >-
            {% set opening = state_attr(trigger.entity_id, "friendly_name")%}
            {%- macro opening_sentence(opening) -%}
            {{ [
            "The " ~ opening +" has been opened for about 5 minutes.  I will shut down the Air Conditioner so you can enjoy the fresh air.",
            "Since the " ~ opening +" is still open, I will turn off the air conditioners until you close it",
            "The " ~ opening +" has been left open, I will turn off the AC to save some money for you.",
            "We cant have the Air Conditioning running AND have " ~ opening +" open so I will turn off the AC.",
            "Since running the AC while " ~ opening +" is open, I will turn off the Air Conditioner.",
            "Once the " ~ opening +" is closed, I will turn the Air Conditioner back on",
            "So we dont waste money, I will turn off the AC until " ~ opening +" has been closed.",
            "The " ~ opening +" is open and we are cooling the outside. I will fix that by turning off the AC for now.",
            "The fresh Air from the " ~ opening +" is great so I will turn off the AC until it is closed again.",
            "When Doors and windows are left open like the  " ~ opening +", I will remember to turn off the AC."
            ] | random }}
            {%- endmacro -%}
            {{opening_sentence(opening)}}
          call_outside_weather: 1
          call_inside_weather: 1
#-------------------------------------------#-------------------------------------------
  - alias: 'Turn HVAC back on when all doors/windows are closed.'
    id: 66833291-c504-4651-aac9-3cdbf98d20ea
    trigger:
      - platform: state
        entity_id:
          - group.entry_points
        to: 'off'
        from: 'on'
        for:
          minutes: 5

    condition:
      - condition: template
        value_template: "{{ states('climate.downstairs') == 'off' }}"

    action:
      - service: climate.set_hvac_mode
        data:
          entity_id: climate.downstairs
          hvac_mode: 'auto'

#-------------------------------------------#-------------------------------------------
  - alias: 'Alarm lights in Living room'
    id: fd0a2b68-ce3c-4f14-849d-8a312a79335e
    trigger:
      - platform: state
        entity_id:
          - group.entry_points
      - platform: state
        entity_id: group.garage_doors

    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: sun.sun
          state: 'below_horizon'
        - condition: state
          entity_id: group.bed
          state: 'off'

#    action:
      # - choose:
      #     - conditions:
      #         - condition: state
      #           entity_id: group.entry_points
      #           state: on
      #
      #       sequence:
      #         - service: script.siren
      #           data:
      #             duration: 60
      # - service: light.turn_on
      #   entity_id: all

    action:
      - choose:
          - conditions: >
              {{ states.group.entry_points.state == 'on' or
                 states.group.garage_doors.state != 'closed' }}
            sequence:
              - service: scene.turn_on
                entity_id: scene.Red_living_Room
        default:
          - service: scene.turn_on
            entity_id: scene.tv_time

  # - service: >-
  #     {% if states.group.entry_points.state == 'on' or states.group.garage_doors.state != 'closed' -%}
  #       light.turn_on
  #       entity_id:
  #         - light.living_room_accents
  #       color_name: 'red'
  #     {% else %}
  #       light.turn_on
  #       entity_id:
  #         - light.living_room_accents
  #       color_name: 'gold'
  #     {% endif %}


#-------------------------------------------#---
  - alias: "Panel Door opened"
    id: 62d10d70-8092-4daa-9dcb-ed2bec6c6194

    trigger:
      - platform: state
        entity_id:
          - binary_sensor.MCU3_Light
        to: 'off'
        from: 'on'

    action:
      - service: script.notify_engine
        data:
          value1: 'Someone has opened up the Alarm Panel Door!'
          who: 'carlo'
          apns_id: 'information'