mysmarthome/packages/birthday.yaml

239 lines
9.5 KiB
YAML

###############################################################################
# @author : Mahasri Kalavala
# @date : 04/28/2017
# @package : Birthday
# @description : Birthday reminders, greetings/wishes - all good stuff!
#
# THREE IMPORTANT THINGS YOU NEED:
# 1. Copy birtday_wishes.yaml file from templates folder to your templates folder
# 2. Copy this file to Packages folder & add following to configuration.yaml
# packages: !include_dir_named packages
# 3. Add the following to your secrets.yaml file, change name and date
# name_birthday: "MM-DD". See below for example:
#
# srinika_birthday: "04-01"
# hasika_birthday: "07-25"
# mallika_birthday: "12-31"
#
# Update: I added mqtt code to refresh the sensor values dynamically.
# The sensor values update on hourly basis.
#
# PLEASE NOTE THAT THIS PACKAGE USES "DATE" SENSOR. IF YOU SEE THE BIRTHDAY
# VALUES AS "NOT SET", YOU NEED TO ADD THE FOLLOWING TO YOUR CONFIGURATION FILE
#
# sensor:
# - platform: time_date
# display_options:
# - 'time'
# - 'date'
# - 'date_time'
# - 'time_date'
#
###############################################################################
homeassistant:
customize:
################################################
## Node Anchors
################################################
package.node_anchors:
customize: &customize
package: 'birthday'
hidden: &hidden
<<: *customize
hidden: true
input_label.srinika_birthday:
<<: *hidden
input_label.hasika_birthday:
<<: *hidden
input_label.mallika_birthday:
<<: *hidden
input_label:
srinika_birthday:
value: !secret srinika_birthday
hasika_birthday:
value: !secret hasika_birthday
mallika_birthday:
value: !secret mallika_birthday
srinika_birthday_days2go:
icon: mdi:cake-variant
name: Srinika's Birthday
hasika_birthday_days2go:
icon: mdi:cake-variant
name: Hasika's Birthday
mallika_birthday_days2go:
icon: mdi:cake-variant
name: Mallika's Birthday
###############################################################################
# _ _ _
# /\ | | | | (_)
# / \ _ _| |_ ___ _ __ ___ __ _| |_ _ ___ _ __ ___
# / /\ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \/ __|
# / ____ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | \__ \
# /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_|___/
#
###############################################################################
automation:
###############################################################################
# Build the excitement
###############################################################################
- alias: Birthday Countdown 30 Days
initial_state: true
trigger:
platform: state
entity_id:
- input_label.srinika_birthday_days2go
- input_label.hasika_birthday_days2go
- input_label.mallika_birthday_days2go
condition:
- condition: state
entity_id: group.all_devices
state: 'home'
- condition: template
value_template: "{{ trigger.to_state.state | int > 0 and trigger.to_state.state | int < 30 }}"
action:
- service: script.notify_me
data_template:
message: "{{ trigger.entity_id.split('.')[1].split('_')[0] | title }}'s Birthday is only {{ trigger.to_state.state }} days to go!"
###############################################################################
# Celebrate Birthday!!!
###############################################################################
- alias: Today is the Birthday
initial_state: true
trigger:
platform: state
entity_id:
- input_label.srinika_birthday_days2go
- input_label.hasika_birthday_days2go
- input_label.mallika_birthday_days2go
condition:
- condition: state
entity_id: group.all_devices
state: 'home'
- condition: template
value_template: "{{ trigger.to_state.state | int == 0 }}"
action:
- service: script.notify_me
data_template:
message: "Hurray! Today is {{ trigger.entity_id.split('.')[1].split('_')[0] | title }}'s Birthday!"
###############################################################################
# Announce Happy Birthday message every hour starting 7 am until 9 PM
###############################################################################
- alias: Random Birthday Wishes
initial_state: true
trigger:
platform: time_pattern
hours: '/1'
minutes: 3
seconds: 00
condition:
condition: and
conditions:
- condition: state
entity_id: group.all_devices
state: 'home'
- condition: time
after: '07:00:00'
before: '21:00:00'
- condition: or
conditions:
- condition: template
value_template: "{{ states.input_label.srinika_birthday_days2go.state | int == 0 }}"
- condition: template
value_template: "{{ states.input_label.hasika_birthday_days2go.state | int == 0 }}"
- condition: template
value_template: "{{ states.input_label.mallika_birthday_days2go.state | int == 0 }}"
action:
- service: script.voice_notify
data_template:
message: !include ../templates/birthday_wishes.yaml
- delay:
minutes: 1
- service: script.voice_notify
data_template:
message: "Alexa, Sing Happy Birthday Song."
greeting: 'no'
- alias: Update Birthdays
initial_state: true
trigger:
- platform: time_pattern
minutes: '/5'
seconds: 00
- platform: homeassistant
event: start
condition:
- condition: template
value_template: "{{ states.input_label.srinika_birthday.state.split('-') | length > 0 }}"
- condition: template
value_template: "{{ states.input_label.hasika_birthday.state.split('-') | length > 0 }}"
- condition: template
value_template: "{{ states.input_label.mallika_birthday.state.split('-') | length > 0 }}"
action:
- service: input_label.set_value
data_template:
entity_id: input_label.srinika_birthday_days2go
value: >
{% set year = states.sensor.date.state.split('-')[0] %}
{% set month = states.sensor.date.state.split('-')[1] %}
{% set date = states.sensor.date.state.split('-')[2] %}
{% if states('input_label.srinika_birthday') != "unknown" %}
{%- set bDayMonth = states.input_label.srinika_birthday.state.split('-')[0] -%}
{%- set bDayDate = states.input_label.srinika_birthday.state.split('-')[1] -%}
{%- set numOfDays = ((as_timestamp(strptime(year ~ '-' ~ bDayMonth ~ '-' ~ bDayDate , '%Y-%m-%d')) | timestamp_custom('%j', true) | int ) - (as_timestamp(strptime(year ~ '-' ~ month~ '-' ~ date , '%Y-%m-%d')) | timestamp_custom('%j', true) | int)) -%}
{%- if numOfDays < 0 -%}
{{ numOfDays + 365 }}
{%- else -%}
{{ numOfDays }}
{%- endif -%}
{% else %}
-
{% endif %}
- service: input_label.set_value
data_template:
entity_id: input_label.hasika_birthday_days2go
value: >
{% set year = states.sensor.date.state.split('-')[0] %}
{% set month = states.sensor.date.state.split('-')[1] %}
{% set date = states.sensor.date.state.split('-')[2] %}
{% if states('input_label.hasika_birthday') != "unknown" %}
{%- set bDayMonth = states.input_label.hasika_birthday.state.split('-')[0] -%}
{%- set bDayDate = states.input_label.hasika_birthday.state.split('-')[1] -%}
{%- set numOfDays = ((as_timestamp(strptime(year ~ '-' ~ bDayMonth ~ '-' ~ bDayDate , '%Y-%m-%d')) | timestamp_custom('%j', true) | int ) - (as_timestamp(strptime(year ~ '-' ~ month~ '-' ~ date , '%Y-%m-%d')) | timestamp_custom('%j', true) | int)) -%}
{%- if numOfDays < 0 -%}
{{ numOfDays + 365 }}
{%- else -%}
{{ numOfDays }}
{%- endif -%}
{% else %}
-
{% endif %}
- service: input_label.set_value
data_template:
entity_id: input_label.mallika_birthday_days2go
value: >
{% set year = states.sensor.date.state.split('-')[0] %}
{% set month = states.sensor.date.state.split('-')[1] %}
{% set date = states.sensor.date.state.split('-')[2] %}
{% if states('input_label.mallika_birthday') != "unknown" %}
{%- set bDayMonth = states.input_label.mallika_birthday.state.split('-')[0] -%}
{%- set bDayDate = states.input_label.mallika_birthday.state.split('-')[1] -%}
{%- set numOfDays = ((as_timestamp(strptime(year ~ '-' ~ bDayMonth ~ '-' ~ bDayDate , '%Y-%m-%d')) | timestamp_custom('%j', true) | int ) - (as_timestamp(strptime(year ~ '-' ~ month~ '-' ~ date , '%Y-%m-%d')) | timestamp_custom('%j', true) | int)) -%}
{%- if numOfDays < 0 -%}
{{ numOfDays + 365 }}
{%- else -%}
{{ numOfDays }}
{%- endif -%}
{% else %}
-
{% endif %}