###############################################################################
#   @author         :   Mahasri Kalavala
#   @date           :   09/20/2018
#   @package        :   xiaomi_magic_cubes
#   @description    :   Xiaomi Aqara Magic Cube Automations
###############################################################################

###############################################################################
#                      XIAOMI AQARA MAGIC CUBE AUTOMATIONS                     #
#       http://patorjk.com/software/taag/#p=display&h=2&v=2&f=Big&t=Test       #
################################################################################

automation:
  ################################################################################
  #  ______              _ _         _____
  # |  ____|            (_) |       |  __ \
  # | |__ __ _ _ __ ___  _| |_   _  | |__) |___   ___  _ __ ___
  # |  __/ _` | '_ ` _ \| | | | | | |  _  // _ \ / _ \| '_ ` _ \
  # | | | (_| | | | | | | | | |_| | | | \ \ (_) | (_) | | | | | |
  # |_|  \__,_|_| |_| |_|_|_|\__, | |_|  \_\___/ \___/|_| |_| |_|
  #                           __/ |
  #                          |___/
  ################################################################################

  # Flip 90: Toggle Family Room Lights
  - alias: Family Room Cube Event flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d0002794cd6
        action_type: flip90
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service_template: light.toggle
        entity_id: light.hue_color_lamp_1, light.hue_color_lamp_2, light.hue_color_lamp_3

  # Flip 180: Lights ON Family Room Lights FULL brightness
  - alias: Family Room Cube Event flip180
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d0002794cd6
        action_type: flip180
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        entity_id: light.hue_color_lamp_1, light.hue_color_lamp_2, light.hue_color_lamp_3
        data:
          rgb_color: [255, 251, 245]
          brightness: 254
          color_temp: 162

  # Move: Toggle Kitchen Light
  - alias: Family Room Cube Event Move
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d0002794cd6
        action_type: move
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.toggle
        entity_id: switch.kitchen_switch

  # Double Tap:  Turn OFF Downstairs Lights
  - alias: Family Room Cube Event Tap Twice
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d0002794cd6
        action_type: tap_twice
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        data_template:
          entity_id: light.hue_color_lamp_1, light.hue_color_lamp_2, light.hue_color_lamp_3
          rgb_color:
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"

  # Shake: Toggle Do Not Disturb Mode
  - alias: Family Room Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d0002794cd6
        action_type: shake_air
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.toggle_do_not_disturb

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

  # Flip 90: Toggle Front Room Lights
  - alias: Front Room Cube Event flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027c0276
        action_type: flip90
    action:
      - service_template: switch.toggle
        entity_id: switch.front_room

  # Move: Toggle Office Room Light
  - alias: Front Room Cube Event Move
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027c0276
        action_type: move
    action:
      - service: switch.toggle
        entity_id: switch.office_room
      - service: switch.toggle
        entity_id: switch.left

  # Shake: Toggle Do Not Disturb Mode
  - alias: Front Room Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027c0276
        action_type: shake_air
    action:
      - service: script.toggle_do_not_disturb

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

  # Flip 90: Toggle Srinika's Room Lights
  - alias: Srinika Room Cube Event flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027cf60d
        action_type: flip90
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service_template: switch.toggle
        entity_id: switch.srinika_bedroom

  # Shake: Toggle Do Not Disturb Mode
  - alias: Srinika Room Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027cf60d
        action_type: shake_air
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.toggle_do_not_disturb

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

  # Flip 90: Toggle Hasika's Room Lights
  - alias: Hasika Room Cube Event flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027ce15c
        action_type: flip90
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service_template: switch.toggle
        entity_id: switch.hasika_bedroom

  # Shake: Toggle Do Not Disturb Mode
  - alias: Hasika Room Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d00027ce15c
        action_type: shake_air
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.toggle_do_not_disturb

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

  # Flip 90: Toggle Study Room Lights
  - alias: Study Room Cube Event Flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000276e3e8
        action_type: flip90
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: switch.toggle
        entity_id: switch.study_room

  # Shake: Toggle Do Not Disturb Mode
  - alias: Study Room Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000276e3e8
        action_type: shake_air
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.toggle_do_not_disturb

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

  # Flip 90: All Lights OFF (upstairs and downstairs)
  - alias: Master Bedroom Cube Event Flip90
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000278eb6a
        action_type: flip90
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: homeassistant.turn_off
        data:
          entity_id: group.downstairs_lights
      - service: homeassistant.turn_off
        data:
          entity_id: group.upstairs_lights

  # Flip 180: Toggle Lights
  - alias: Master Bedroom Cube Event Flip180
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000278eb6a
        action_type: flip180
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.toggle
        entity_id: light.master_bedroom_1
      - service: light.toggle
        entity_id: light.master_bedroom_2

  # Move: Turn ON Master Bedroom Lights
  - alias: Master Bedroom Cube Event Move
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000278eb6a
        action_type: move
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        entity_id: light.master_bedroom_1
      - service: light.turn_on
        entity_id: light.master_bedroom_2

  # Double Tap:  Turn OFF Downstairs Lights
  - alias: Master Bedroom Cube Event Tap Twice
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000278eb6a
        action_type: tap_twice
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: light.turn_on
        data_template:
          entity_id: light.master_bedroom_1
          rgb_color:
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"
      - service: light.turn_on
        data_template:
          entity_id: light.master_bedroom_2
          rgb_color:
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"
            - "{{ range(0,255) |random }}"

  # Shake: Toggle Do Not Disturb Mode
  - alias: Master Bedroom Cube Event Shake
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.cube_action
      event_data:
        entity_id: binary_sensor.cube_158d000278eb6a
        action_type: shake_air
    condition:
      - condition: state
        entity_id: input_boolean.light_automations
        state: "on"
    action:
      - service: script.toggle_do_not_disturb

  ################################################################################
  #   _____                   _          _ _
  #  |  __ \                 | |        | | |
  #  | |  | | ___   ___  _ __| |__   ___| | |
  #  | |  | |/ _ \ / _ \| '__| '_ \ / _ \ | |
  #  | |__| | (_) | (_) | |  | |_) |  __/ | |
  #  |_____/ \___/ \___/|_|  |_.__/ \___|_|_|
  #
  ################################################################################

  ################################################################################
  # Doorbell Automations -
  #     When we are home, play the door bell
  #     When we are not home, play dog sounds
  ################################################################################
  - alias: Doorbell Single Press
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.click
      event_data:
        entity_id: binary_sensor.wall_switch_158d00045622d9
        click_type: "single"
    action:
      - service_template: >
          {% if states('input_boolean.home_mode_away') == 'off' %}
            script.play_ringtone
          {% else %}
            script.play_dog_sounds
          {% endif %}
      - service: script.doorbell_camera_pics

  - alias: Doorbell Double Press
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.click
      event_data:
        entity_id: binary_sensor.wall_switch_158d00045622d9
        click_type: "double"
    action:
      - service_template: >
          {% if states('input_boolean.home_mode_away') == 'off' %}
            script.play_ringtone
          {% else %}
            script.play_dog_sounds
          {% endif %}
      - service: script.doorbell_camera_pics

  - alias: Doorbell Long Press
    initial_state: true
    trigger:
      platform: event
      event_type: xiaomi_aqara.click
      event_data:
        entity_id: binary_sensor.wall_switch_158d00045622d9
        click_type: "long"
    action:
      - service_template: >
          {% if states('input_boolean.home_mode_away') == 'off' %}
            script.play_fav_song
          {% else %}
            script.play_dog_sounds
          {% endif %}
      - service: script.doorbell_camera_pics

################################################################################
# Script for sending camera snapshots when doorbell is pressed
################################################################################
script:

  doorbell_camera_pics:
    sequence:
      - service: script.notify_family
        data:
          message: "ALERT! Someone is at the front door!"
          notify_options:
            - telegram
            - voice
            - tv
            - led
      - service: camera.snapshot
        data_template:
          entity_id: "camera.frontdoor_camera"
          filename:
            "{{ '/config/www/downloads/camera/frontdoor/frontdoor_' ~
            (state_attr('script.doorbell_camera_pics', 'last_triggered') ~ '').replace('-','_')
            .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg' }}"
      - service: camera.snapshot
        data_template:
          entity_id: "camera.driveway_camera"
          filename:
            "{{ '/config/www/downloads/camera/driveway/driveway_' ~
            (state_attr('script.doorbell_camera_pics', 'last_triggered') ~ '').replace('-','_')
            .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg' }}"
      - service: notify.telegram
        data_template:
          title: "Door Bell"
          message: "Someone rang door bell!"
          data:
            photo:
              - file: "{{ '/config/www/downloads/camera/frontdoor/frontdoor_' ~
                       (state_attr('script.doorbell_camera_pics', 'last_triggered') ~ '').replace('-','_')
                       .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg' }}"
                caption: "Someone rang door bell!"
              - file: "{{ '/config/www/downloads/camera/driveway/driveway_' ~
                (state_attr('script.doorbell_camera_pics', 'last_triggered') ~ '').replace('-','_')
                .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg' }}"
                caption: "Someone rang door bell!"
      - service: script.notify_family
        data_template:
          message: Someone rang door bell!
          url: "{{ '/config/www/downloads/camera/frontdoor/frontdoor_' ~
                       (state_attr('script.doorbell_camera_pics', 'last_triggered') ~ '').replace('-','_')
                       .replace(' ', '_').replace(':','_').replace('.','_').replace('+','_') ~ '.jpg' }}"
          notify_options:
            - tv
            - led
