mysmarthome/packages/recycle_trash.yaml

390 lines
14 KiB
YAML
Raw Normal View History

2019-04-17 22:46:06 +00:00
###############################################################################
# @author : Mahasri Kalavala
# @date : 04/15/2017
# @package : Trash & Recycle
# @description : Trash & Recycle Pickup Scheduler and Reminder
###############################################################################
homeassistant:
customize:
sensor.trash_day:
friendly_name: Is it Trash Day today?
icon: mdi:delete-variant
sensor.recycle_day:
friendly_name: Is it Recycle Day today?
icon: mdi:recycle
sensor.trash_pickup_day:
friendly_name: Trash Pickup Day
icon: mdi:calendar-today
hidden: true
sensor.recycle_pickup_day:
friendly_name: Recycle Pickup Day
icon: mdi:calendar-today
hidden: true
sensor.recycle_pickup_week:
friendly_name: Recycle Pickup Week
icon: mdi:calendar-today
hidden: true
sensor.current_week:
friendly_name: Current Week is
icon: mdi:calendar-question
group.trash_schedule:
friendly_name: Trash Schedule
icon: mdi:delete-variant
group.recycle_schedule:
friendly_name: Trash Schedule
icon: mdi:recycle
###############################################################################
# UI Elements
###############################################################################
input_select:
trash_pickup_day:
name: Current Trash Pickup Day (Evey Week)
options:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- Sunday
- unknown
icon: mdi:delete-variant
recycle_pickup_day:
name: Current Recycle Pickup Day (Every Other Week)
options:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- Sunday
- unknown
icon: mdi:recycle
recycle_pickup_week:
name: Select Recycle Pickup Week based on Current Week above
options:
- Even Weeks
- Odd Weeks
- unknown
icon: mdi:recycle
###############################################################################
# Sensor Definitions
###############################################################################
sensor:
- platform: time_date
display_options:
- time
- date
- date_time
- time_date
- time_utc
- platform: mqtt
state_topic: "/home/trashpickupday"
name: "Trash Pickup Day"
value_template: "{{ value }}"
qos: 1
- platform: mqtt
state_topic: "/home/recyclepickupday"
name: "Recycle Pickup Day"
value_template: "{{ value }}"
qos: 1
- platform: mqtt
state_topic: "/home/recyclepickupweek"
name: "Recycle Pickup Week"
value_template: "{{ value }}"
qos: 1
###############################################################################
# Sensor to hold info about current week is an odd week or an even week of the year
###############################################################################
- platform: template
sensors:
current_week:
value_template: >-
{% set year = states.sensor.date_time.state.split(',')[0].split('-')[0] %}
{% set month = states.sensor.date_time.state.split(',')[0].split('-')[1] %}
{% set date = states.sensor.date_time.state.split(',')[0].split('-')[2] %}
{% set today = strptime(year ~ '-' ~ month ~ '-' ~ date , '%Y-%m-%d') %}
{%- if (as_timestamp(today) | timestamp_custom('%U', true) | int ) % 2 == 0 -%}
Even Week (Week# {{ as_timestamp(today) | timestamp_custom('%U', true) }})
{%- else -%}
Odd Week (Week# {{ as_timestamp(today) | timestamp_custom('%U', true) }})
{%- endif -%}
###############################################################################
# Trash - Pickup schedule is EVERY week.
# Set the day to a day before the actual day leaving time for reminders
###############################################################################
- platform: template
sensors:
trash_day:
value_template: >-
{% set year = states.sensor.date_time.state.split(',')[0].split('-')[0] %}
{% set month = states.sensor.date_time.state.split(',')[0].split('-')[1] %}
{% set date = states.sensor.date_time.state.split(',')[0].split('-')[2] %}
{% set today = strptime(year ~ '-' ~ month ~ '-' ~ date , '%Y-%m-%d') %}
{%- set pickupDay = states.sensor.trash_pickup_day.state | lower -%}
{%- if as_timestamp(today)| timestamp_custom('%A', true) | lower == pickupDay -%}
yes
{%- else -%}
no
{%- endif -%}
###############################################################################
# Recycle - Pickup schedule is every other week.
# Set the day to a day before the actual day leaving time for reminders
###############################################################################
- platform: template
sensors:
recycle_day:
value_template: >-
{% set year = states.sensor.date_time.state.split(',')[0].split('-')[0] %}
{% set month = states.sensor.date_time.state.split(',')[0].split('-')[1] %}
{% set date = states.sensor.date_time.state.split(',')[0].split('-')[2] %}
{% set today = strptime(year ~ '-' ~ month ~ '-' ~ date , '%Y-%m-%d') %}
{%- set pickupDay = states.sensor.recycle_pickup_day.state | lower -%}
{% if states.input_select.recycle_pickup_week.state | lower == "even weeks" %}
{%- set evenWeekPickup = "true" %}
{% else %}
{%- set evenWeekPickup = "false" %}
{% endif %}
{%- macro day_of_week(timestamp) -%}
{{ as_timestamp(timestamp)| timestamp_custom('%A', true) | lower }}
{%- endmacro %}
{%- macro week_number_of_year() -%}
{{ as_timestamp(today) | timestamp_custom('%U', true) | int }}
{%- endmacro %}
{%- macro is_it_this_week() -%}
{%- if as_timestamp(today) | timestamp_custom('%U', true) | int % 2 == 0 -%}
{%- if evenWeekPickup == "true" -%}
true
{%- else -%}
false
{%- endif -%}
{%- else -%}
{%- if evenWeekPickup == "true" -%}
false
{%- else -%}
true
{%- endif -%}
{%- endif -%}
{%- endmacro -%}
{%- macro is_it_today() -%}
{%- if is_it_this_week() == "true" -%}
{%- if day_of_week(today) | lower == pickupDay -%}
yes
{%- else -%}
no
{%- endif -%}
{%- else -%}
no
{%- endif -%}
{%- endmacro -%}
{{- is_it_today() -}}
###############################################################################
# _ _ _
# /\ | | | | (_)
# / \ _ _| |_ ___ _ __ ___ __ _| |_ _ ___ _ __ ___
# / /\ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \/ __|
# / ____ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | \__ \
# /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_|___/
#
###############################################################################
automation:
###############################################################################
# The schedule can be changed via UI. The updated schedules are saved in MQTT
# The input_selects don't maintain state automatically - hence this code
# These automations are hidden - no interaction with user is required.
# Save & Restore Functionality
###############################################################################
- alias: Trash Pickup Day Changed
initial_state: true
trigger:
platform: state
entity_id: input_select.trash_pickup_day
action:
- service: mqtt.publish
data_template:
topic: "/home/trashpickupday"
retain: true
payload: '{{ states.input_select.trash_pickup_day.state }}'
- alias: Recycle Pickup Day Changed
initial_state: true
trigger:
platform: state
entity_id: input_select.recycle_pickup_day
action:
- service: mqtt.publish
data_template:
topic: "/home/recyclepickupday"
retain: true
payload: '{{ states.input_select.recycle_pickup_day.state }}'
- alias: Recycle Pickup Week Changed
initial_state: true
trigger:
platform: state
entity_id: input_select.recycle_pickup_week
action:
- service: mqtt.publish
data_template:
topic: "/home/recyclepickupweek"
retain: true
payload: '{{ states.input_select.recycle_pickup_week.state }}'
- alias: Restore Trash Recycle Settings on Startup
initial_state: true
trigger:
platform: homeassistant
event: start
action:
- delay:
minutes: 1
- service: input_select.select_option
data_template:
entity_id: input_select.trash_pickup_day
option: "{{states.sensor.trash_pickup_day.state}}"
- service: input_select.select_option
data_template:
entity_id: input_select.recycle_pickup_day
option: "{{states.sensor.recycle_pickup_day.state}}"
- service: input_select.select_option
data_template:
entity_id: input_select.recycle_pickup_week
option: "{{states.sensor.recycle_pickup_week.state}}"
###############################################################################
# Reminder code - Reminds 5 times every hour starting 4 PM
# Conditions: Only notifies when someone is at home
###############################################################################
- alias: Trash and Recycle Pickup Reminder
initial_state: true
trigger:
- platform: time
at: '16:00:00'
- platform: time
at: '17:00:00'
- platform: time
at: '18:00:00'
- platform: time
at: '19:00:00'
- platform: time
at: '20:00:00'
- platform: time
at: '21:00:00'
condition:
condition: and
conditions:
- condition: template
value_template: '{{ states.input_boolean.trash_reminders.state == "on" }}'
- condition: or
conditions:
- condition: state
entity_id: sensor.trash_day
state: 'yes'
- condition: state
entity_id: sensor.recycle_day
state: 'yes'
action:
- service: notify.ios_suresh
data_template:
title: >
{% if states.sensor.trash_day.state == "yes" and states.sensor.recycle_day.state == "yes" %}
Trash and Recycle Pickup Tomorrow!
{% elif states.sensor.trash_day.state == "yes" %}
Trash Pickup Tomorrow!
{% elif states.sensor.recycle_day.state == "yes" %}
Recycle Pickup Tomorrow!
{% endif %}
message: >
{% if states.sensor.trash_day.state == "yes" and states.sensor.recycle_day.state == "yes" %}
Please leave Trash AND Recycle bins out tonight!
{% elif states.sensor.trash_day.state == "yes" %}
Please leave Trash bin outside tonight!
{% elif states.sensor.recycle_day.state == "yes" %}
Please leave Recycle bin outside tonight!
{% endif %}
data:
push:
badge: 0
category: "trash_recycle"
- service: script.notify_me
data_template:
message: >
{% if states.sensor.trash_day.state == "yes" and states.sensor.recycle_day.state == "yes" %}
Tomorrow is the Trash AND Recycle Pickup day!
{% elif states.sensor.trash_day.state == "yes" %}
Attention!: Tomorrow is the Trash Pickup day. Please don't forget to put the Trash bin outside tonight!
{% elif states.sensor.recycle_day.state == "yes" %}
Attention!: Tomorrow is the Recycle Pickup day. Please don't forget to put the recycle bin outside tonight!
{% endif %}
- service: script.voice_notify
data_template:
message: >
{% if states.sensor.trash_day.state == "yes" and states.sensor.recycle_day.state == "yes" %}
Attention!: Tomorrow is the Trash and Recycle Pickup day.
Please don't forget to leave Trash bin and recycle bin outside tonight!
{% elif states.sensor.trash_day.state == "yes" %}
Attention!: Tomorrow is the Trash Pickup day. Please don't forget to put the Trash bin outside tonight!
{% elif states.sensor.recycle_day.state == "yes" %}
Attention!: Tomorrow is the Recycle Pickup day. Please don't forget to put the recycle bin outside tonight!
{% endif %}
- alias: Trash and Recycle Bin Left Outside Already
initial_state: true
trigger:
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TRASH_LEFT
action:
- service: notify.ios_suresh
data:
message: "Great job, Thank you!"
- service: input_boolean.turn_off
entity_id: input_boolean.trash_reminders
- alias: Remind later
initial_state: true
trigger:
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TRASH_REMIND_LATER
action:
- service: notify.ios_suresh
data:
message: "Will remind you again in an hour!"
- service: input_boolean.turn_on
entity_id: input_boolean.trash_reminders
- alias: Reset Trash Reminders
initial_state: true
trigger:
- platform: time
at: '09:00:00'
action:
- service: input_boolean.turn_on
entity_id: input_boolean.trash_reminders
- service: input_select.select_option
data_template:
entity_id: input_select.trash_pickup_day
option: "{{states.sensor.trash_pickup_day.state}}"
- service: input_select.select_option
data_template:
entity_id: input_select.recycle_pickup_day
option: "{{states.sensor.recycle_pickup_day.state}}"
- service: input_select.select_option
data_template:
entity_id: input_select.recycle_pickup_week
option: "{{states.sensor.recycle_pickup_week.state}}"