###############################################################################
#   @author         :   Jeffrey Stone 
#   @date           :   06/12/2020
#   @package        :   Appliances
#   @description    :   Package for handling Smart Applicances and or automation to make dumb appliances seem smart.  
###############################################################################

sensor:
  # MQTT Sensor for DishWasher Status.  
  - platform: mqtt
    name: "DishWasher Status"
    state_topic: "house/dishwasher/status"
  # MQTT Sensor for Washing Machine Status. 
  - platform: mqtt
    name: "Washer Status"
    state_topic: "house/washer/status"

automation:

  - id: washer_running
    alias: Washer Running
    trigger:
    - above: 5
      entity_id: sensor.washer_power_2
      platform: numeric_state
    condition:
      condition: or
      conditions:
      - condition: state
        entity_id: sensor.washer_status
        state: idle
      - condition: state
        entity_id: sensor.washer_status
        state: complete
    action:
    - service: script.washer_running
    # Since the washer has run lets consume a detergent tablet
    - service: shell_command.grocy_consume_item
      data:
        server_ip: !secret grocy_ip
        grocy_key: !secret grocy_api_key
        product_id: 6
        amount: 1
    initial_state: true

  - id: washer_complete
    alias: Washer Complete
    trigger:
    - below: 3
      entity_id: sensor.washer_power_2
      platform: numeric_state
    condition:
    - condition: state
      entity_id: sensor.washer_status
      state: running
    action:
    - service: script.washer_complete
    initial_state: true

  - id: washer_emptied
    initial_state: true
    alias: Washer Emptied
    trigger:
    - platform: state
      entity_id: binary_sensor.washer_door
      from: 'off'
      to: 'on'
    action:
    - service: script.washer_idle
    - service: script.turn_off
      entity_id: script.washer_finished_notification_audible

  - id: washer_notification
    initial_state: true
    alias: Washer Notification
    trigger:
    - platform: state
      entity_id: sensor.washer_status
      from: running
      to: complete
    - platform: event
      event_type: event_washer_complete_notification
    action:
    - service: script.turn_on
      entity_id: script.washer_finished_notification_audible
  
  
  - id: dishwasher_idle
    initial_state: true
    alias: Dishwasher Idle
    trigger:
    - platform: state
      entity_id: device_tracker.dishwasher
      to: 'not_home'
    action:
    - service: script.dishwasher_idle
  
  # When dishwasher connects to network assume it is running cycle. Auto consume detergent in Grocy
  - id: dishwasher_running
    initial_state: true
    alias: Dishwasher Running
    trigger:
    - platform: state
      entity_id: device_tracker.dishwasher
      to: 'home'
    action:
    - service: script.dishwasher_running
    - service: shell_command.grocy_consume_item
      data:
        server_ip: !secret grocy_ip
        grocy_key: !secret grocy_api_key
        product_id: 7
        amount: 1

script:

  appliances_on:
    sequence:
    - service: switch.turn_on
      data:
        entity_id: switch.box_fans
  
  appliances_off:
    sequence:
    - data:
        entity_id: switch.incense
      service: switch.turn_off
    - data:
        entity_id: switch.artemis
      service: switch.turn_off

  washer_finished_notification_audible:
    sequence:
    - delay:
        minutes: 15
    - service: script.washer_audible
    - delay:
        minutes: 30
    - event: event_washer_complete_notification
      event_data:
        name: Washer Complete Notification
        message: Washer has completed it's cycle

  washer_audible:
    sequence:
    - condition: state
      entity_id: sensor.family_status
      state: Home
    - condition: state
      entity_id: sensor.washer_status
      state: complete
    - service: script.speech_engine
      data_template:
        who: '{{ states.sensor.room_audio.state }}'
        message: >
          <p>
            {{ [
            'Just a reminder. Washing machine needs to be emptied.',
            'I am sure you have more inportant things to do, but do not forget to empty the washer.',
            'Looks like the washing machine has completed it is cycle. You know what to do,,I hope.',
            'Do not forget to move the clothes to the dryer.',
            'Someone forgot to move the clothes to the dryer. I am not going to name any names. But there is a camera in there. ',
            'Do you like when your clothes smell like mildew? Because that is what is happening,,Right now. '
            ] | random }}
          </p>
    

  washer_idle:
    sequence:
    - service: mqtt.publish
      data:
        topic: house/washer/status
        payload: idle
        retain: true
  washer_running:
    sequence:
    - service: mqtt.publish
      data:
        topic: house/washer/status
        payload: running
        retain: true
  washer_complete:
    sequence:
    - service: mqtt.publish
      data:
        topic: house/washer/status
        payload: complete
        retain: true
  dishwasher_idle:
    sequence:
    - service: mqtt.publish
      data:
        topic: house/dishwasher/status
        payload: idle
        retain: true
  dishwasher_running:
    sequence:
    - service: mqtt.publish
      data:
        topic: house/dishwasher/status
        payload: running
        retain: true