342 lines
11 KiB
YAML
Executable File
342 lines
11 KiB
YAML
Executable File
#-------------------------------------------
|
|
# Garadget Configuration
|
|
# Description: Setup for Garadget garage door opener/sensor
|
|
#
|
|
# Integration: MQTT
|
|
# Hardware: Garadget (https://amzn.to/2jQLpVQ)
|
|
#
|
|
# Features:
|
|
# - Garage door status monitoring
|
|
# - Remote open/close control
|
|
# - Door brightness sensing
|
|
#
|
|
# Documentation:
|
|
# - Integration Guide: https://www.vcloudinfo.com/2019/03/how-to-add-garadget-to-home-assistant.html
|
|
# - Access Token Update: https://www.vcloudinfo.com/2020/05/fixing-garadget-in-home-assistant.html
|
|
#
|
|
# Original Repository: https://github.com/CCOSTAN/Home-AssistantConfig
|
|
# Follow me on https://www.vcloudinfo.com/click-here
|
|
#-------------------------------------------
|
|
|
|
mqtt:
|
|
cover:
|
|
- name: "Large Garage Door"
|
|
device_class: 'garage'
|
|
command_topic: "garadget/GLarge/command"
|
|
state_topic: "garadget/GLarge/status"
|
|
value_template: >-
|
|
{% if value_json.status == 'closed' %}
|
|
closed
|
|
{% else %}
|
|
open
|
|
{% endif %}
|
|
payload_open: "open"
|
|
payload_close: "close"
|
|
payload_stop: "stop"
|
|
|
|
- name: "Small Garage Door"
|
|
device_class: 'garage'
|
|
command_topic: "garadget/GSmall/command"
|
|
state_topic: "garadget/GSmall/status"
|
|
value_template: >-
|
|
{% if value_json.status == 'closed' %}
|
|
closed
|
|
{% else %}
|
|
open
|
|
{% endif %}
|
|
payload_open: "open"
|
|
payload_close: "close"
|
|
payload_stop: "stop"
|
|
|
|
sensor:
|
|
- name: "Large Garage Door Since"
|
|
state_topic: "garadget/GLarge/status"
|
|
value_template: '{{ value_json.time }}'
|
|
|
|
- name: "Large Garage Door Brightness"
|
|
state_topic: "garadget/GLarge/status"
|
|
unit_of_measurement: '%'
|
|
value_template: '{{ value_json.bright }}'
|
|
|
|
- name: "Small Garage Door Since"
|
|
state_topic: "garadget/GSmall/status"
|
|
value_template: '{{ value_json.time }}'
|
|
|
|
- name: "Small Garage Door Brightness"
|
|
state_topic: "garadget/GSmall/status"
|
|
unit_of_measurement: '%'
|
|
value_template: '{{ value_json.bright }}'
|
|
|
|
input_text:
|
|
last_person_home:
|
|
name: Last Person Home
|
|
initial: 'Carlo'
|
|
|
|
group:
|
|
garage_doors: # This group is used to check if doors are open or Closed.
|
|
name: Garage Doors
|
|
entities:
|
|
- cover.large_garage_door
|
|
- cover.small_garage_door
|
|
|
|
######################################################################
|
|
## Send a notification to anyone coming home asking if they want to open the garage door.
|
|
######################################################################
|
|
|
|
automation:
|
|
- alias: 'Garage Helper'
|
|
id: 365adc21-5e96-4e78-9e94-089901a29430
|
|
mode: parallel
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- person.carlo
|
|
- person.stacey
|
|
from: 'not_home'
|
|
to: 'home'
|
|
condition:
|
|
- condition: state
|
|
entity_id: cover.large_garage_door
|
|
state: 'closed'
|
|
action:
|
|
# - variables:
|
|
# person_triggered: "{{ trigger.to_state.entity_id.split('.')[1] }}"
|
|
- service: input_text.set_value
|
|
target:
|
|
entity_id: input_text.last_person_home
|
|
data:
|
|
value: "{{ trigger.to_state.entity_id.split('.')[1] }}"
|
|
- service: script.notify_engine_two_button
|
|
data:
|
|
title: 'Welcome Home!'
|
|
value1: 'Open Large Garage door?'
|
|
title1: 'Yes'
|
|
action1: 'OPEN_LARGE_GARAGE'
|
|
icon1: 'sfsymbols:arrow.up.circle'
|
|
destructive1: 'false'
|
|
title2: 'No'
|
|
action2: 'NO_OPEN_LARGE_GARAGE'
|
|
icon2: 'sfsymbols:house.circle'
|
|
destructive2: 'true'
|
|
who: "{{ states('input_text.last_person_home') }}"
|
|
group: 'Welcome_Home'
|
|
|
|
- alias: 'Open Large Garage Door Action'
|
|
id: 85e02a74-2ecc-4815-95a6-db864a6dffd7
|
|
trigger:
|
|
platform: event
|
|
event_type: mobile_app_notification_action
|
|
event_data:
|
|
action: OPEN_LARGE_GARAGE
|
|
condition:
|
|
- condition: state
|
|
entity_id: cover.large_garage_door
|
|
state: 'closed'
|
|
- condition: state
|
|
entity_id: group.family
|
|
state: 'home'
|
|
action:
|
|
- service: cover.open_cover
|
|
entity_id: cover.large_garage_door
|
|
|
|
- alias: 'Prompt to Open Front Door'
|
|
id: ece2b4a8-af21-41f4-a8fc-480a4d1ddabc
|
|
trigger:
|
|
platform: event
|
|
event_type: mobile_app_notification_action
|
|
event_data:
|
|
action: NO_OPEN_LARGE_GARAGE
|
|
condition:
|
|
- condition: state
|
|
entity_id: group.family
|
|
state: 'home'
|
|
action:
|
|
- service: script.notify_engine_two_button
|
|
data:
|
|
title: 'Unlock Front Door?'
|
|
value1: 'Do you want to unlock the front door instead?'
|
|
title1: 'Yes'
|
|
action1: 'UNLOCK_FRONT_DOOR'
|
|
icon1: 'sfsymbols:unlock'
|
|
destructive1: 'false'
|
|
title2: 'No'
|
|
action2: 'KEEP_FRONT_DOOR_LOCKED'
|
|
icon2: 'sfsymbols:lock'
|
|
destructive2: 'true'
|
|
who: "{{ states('input_text.last_person_home') }}"
|
|
group: 'Welcome_Home'
|
|
|
|
- alias: 'Unlock Front Door Action'
|
|
id: c3106db1-f2c4-4800-b1a3-76d440228600
|
|
trigger:
|
|
platform: event
|
|
event_type: mobile_app_notification_action
|
|
event_data:
|
|
action: UNLOCK_FRONT_DOOR
|
|
action:
|
|
- service: lock.unlock
|
|
entity_id: lock.front_door
|
|
|
|
|
|
######################################################################
|
|
## Garage Status Announcements - Only during normal hours.
|
|
######################################################################
|
|
|
|
- alias: 'Update Garage Get-Status'
|
|
id: 2b9e8359-c189-4399-b415-50107513fe90
|
|
trigger:
|
|
- platform: time_pattern
|
|
minutes: '/1'
|
|
action:
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "garadget/GSmall/command"
|
|
payload: "get-status"
|
|
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "garadget/GLarge/command"
|
|
payload: "get-status"
|
|
|
|
- alias: 'Garage Door State Change'
|
|
id: afec0987-edb1-4341-a524-a00ae4df9fb7
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- cover.large_garage_door
|
|
- cover.small_garage_door
|
|
from: 'open'
|
|
to: 'closed'
|
|
for: '00:02:00'
|
|
|
|
- platform: state
|
|
entity_id:
|
|
- cover.large_garage_door
|
|
- cover.small_garage_door
|
|
from: 'closed'
|
|
to: 'open'
|
|
for: '00:10:00'
|
|
|
|
action:
|
|
- choose:
|
|
- conditions: "{{ is_state('cover.large_garage_door','closed') }}"
|
|
sequence:
|
|
- service: script.speech_engine
|
|
data:
|
|
DoorClosed: "The {{ trigger.entity_id.split('.')[1]|replace('_', ' ') }} is now {{ (trigger.to_state.state)|replace('_', ' ') }}."
|
|
call_garage_check: 1
|
|
- delay: "00:10:00"
|
|
- service: script.garage_lights_off
|
|
|
|
default:
|
|
- service: script.speech_engine
|
|
data:
|
|
DoorClosed: "The {{ trigger.entity_id.split('.')[1]|replace('_', ' ') }} is now {{ (trigger.to_state.state)|replace('_', ' ') }}."
|
|
call_garage_check: 1
|
|
|
|
|
|
###################################
|
|
## Garadget Wind Door Checks - [Garadget](https://amzn.to/2jQLpVQ)
|
|
###################################
|
|
|
|
- alias: 'Wind Speed Garage Door Check'
|
|
id: 2819207a-1716-4552-be34-a8e0f7af004e
|
|
trigger:
|
|
- platform: numeric_state
|
|
entity_id: sensor.pirateweather_wind_speed
|
|
above: 30
|
|
|
|
condition:
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: cover.large_garage_door
|
|
state: 'open'
|
|
- condition: state
|
|
entity_id: cover.small_garage_door
|
|
state: 'open'
|
|
|
|
action:
|
|
- service: input_boolean.turn_on
|
|
entity_id: input_boolean.alert_mode
|
|
|
|
- service: script.notify_engine
|
|
data:
|
|
title: 'Check/Close Garage Doors - High Speed Wind Alert:'
|
|
value1: "Small: {{ states('cover.small_garage_door')}}"
|
|
value2: "Large: {{ states('cover.large_garage_door')}}"
|
|
group: 'information'
|
|
who: 'parents'
|
|
|
|
- service: script.speech_engine
|
|
data:
|
|
value1: >
|
|
"The wind speed is {{ states('sensor.pirateweather_wind_speed')|round}} miles per hour. For safety, please close the garage doors.
|
|
{% if is_state('cover.large_garage_door', 'open') -%}
|
|
The Large Garage Door is open
|
|
{% endif -%}
|
|
{% if is_state('cover.small_garage_door', 'open') -%}
|
|
{% if is_state('cover.large_garage_door', 'open') -%}and
|
|
{%- endif %} The small Garage Door is open.
|
|
{% endif %}"
|
|
|
|
##############################################################################
|
|
|
|
- alias: Is the Garage door Open at night - Checks every 30 minutes or 5 minutes after we drive away.
|
|
id: 4eb3e83e-4484-4102-a4ca-6bacd5b3cbdd
|
|
|
|
trigger:
|
|
- platform: time_pattern
|
|
minutes: '/45'
|
|
- platform: state
|
|
entity_id: group.family
|
|
to: not_home
|
|
for: 00:05:00
|
|
- platform: state
|
|
entity_id: input_boolean.tv_time
|
|
to: 'on'
|
|
from: 'off'
|
|
|
|
condition:
|
|
condition: or
|
|
conditions:
|
|
- condition: and
|
|
conditions:
|
|
- condition: state
|
|
entity_id: group.family
|
|
state: not_home
|
|
for: 00:05:00
|
|
- condition: or
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ states('cover.large_garage_door') == 'open' }}"
|
|
- condition: template
|
|
value_template: "{{ states('cover.small_garage_door') == 'open' }}"
|
|
- condition: and
|
|
conditions:
|
|
- condition: state
|
|
entity_id: sun.sun
|
|
state: 'below_horizon'
|
|
- condition: or
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ states('cover.large_garage_door') == 'open' }}"
|
|
- condition: template
|
|
value_template: "{{ states('cover.small_garage_door') == 'open'}}"
|
|
|
|
action:
|
|
- service: script.notify_engine
|
|
data:
|
|
title: 'Check Garage Doors:'
|
|
value1: "Small: {{ states('cover.small_garage_door')}}"
|
|
value2: "Large: {{ states('cover.large_garage_door')}}"
|
|
who: "family"
|
|
camera_entity: "camera.garagecam"
|
|
group: 'information'
|
|
|
|
- service: script.speech_engine
|
|
data:
|
|
value1: "Check the garage doors. The Small garage is {{ states('cover.small_garage_door')}} and the large garage is {{ states('cover.large_garage_door')}} [Only mention the garage door that is open and remind us to close it for the night]"
|
|
|