Files
Home-AssistantConfig/config/packages/garadget.yaml
Carlo Costanzo bbcc77673d Refactor automation configurations and enhance living room lighting scenes
- Removed redundant conditions from late night outside helper automation.
- Added a new automation for living room lighting that triggers a red scene when entry points are activated or garage doors are opened.
- Updated TV time automation to streamline triggers and removed the associated input boolean.
- Adjusted living room scene settings to ensure lights are on with specified RGB colors and brightness levels.
- Cleaned up trigger booleans by removing the now unnecessary TV time boolean.
2025-11-29 12:19:38 -05:00

462 lines
15 KiB
YAML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#-------------------------------------------
# Garadget Configuration for Home Assistant
#
# This package sets up the Garadget garage doors using MQTT cover and sensor platforms.
#
# Automation Integration:
# - Fully supports Home Assistant automation for notifications,
# remote control, and state monitoring.
# - Works seamlessly with notification engines (see `script.notify_engine`)
# for actionable alerts when garage state changes or manual intervention is required.
#
# Features:
# - Garage door status monitoring (open/close state, time since change)
# - Remote open, close, and stop actions
# - Door brightness sensing (helps detect obstacles or sunlight conditions)
#
# Integration/Setup Guides:
# - Setup: https://www.vcloudinfo.com/2019/03/how-to-add-garadget-to-home-assistant.html
# - Token Fix: https://www.vcloudinfo.com/2020/05/fixing-garadget-in-home-assistant.html
#
# Hardware:
# - Garadget unit (https://amzn.to/2jQLpVQ)
#
# Repository & Author:
# - https://github.com/CCOSTAN/Home-AssistantConfig
# - @CCOSTAN | More info: 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
automation:
######################################################################
## Automation: Auto-open Large Garage Door when someone comes home
######################################################################
- alias: 'Auto Open Large Garage Door On Arrival'
id: 7e2b1c3a-4b1e-4b2a-9c1a-automated_garage_door
mode: single
trigger:
- platform: state
entity_id:
- person.carlo
- person.stacey
from: 'driving'
to: 'home'
condition:
- condition: state
entity_id: cover.large_garage_door
state: 'closed'
- condition: state
entity_id: group.bed
state: 'off'
- condition: state
entity_id: group.family
state: 'home'
action:
- service: cover.open_cover
target:
entity_id: cover.large_garage_door
- 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
data:
who: 'parents'
value1: "Large Garage has been auto-opened for {{ states('input_text.last_person_home') }}."
title: 'Garage Auto-Opened'
group: 'Welcome_Home'
camera_entity: camera.garagecam
######################################################################
## Entry helper prompt after arrival if auto-open didnt fire.
######################################################################
- alias: 'Entry Helper'
id: 365adc21-5e96-4e78-9e94-089901a29430
mode: parallel
trigger:
- platform: state
entity_id:
- person.carlo
- person.stacey
to: 'home'
condition:
- condition: state
entity_id: cover.large_garage_door
state: 'closed'
action:
# Give the auto-open routine a chance to fire; if the door opened, skip the prompt.
- delay: "00:00:25"
- choose:
- conditions:
- condition: state
entity_id: cover.large_garage_door
state: 'closed'
sequence:
- 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: 'Choose: unlock front door or open garage?'
title1: 'Unlock Door'
action1: 'UNLOCK_FRONT_DOOR'
icon1: 'sfsymbols:lock.open'
destructive1: 'false'
title2: 'Open Garage'
action2: 'OPEN_LARGE_GARAGE'
icon2: 'sfsymbols:arrow.up.circle'
destructive2: 'false'
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: '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
######################################################################
## Auto-unlock front door when Paige or Justin arrive from driving
######################################################################
- alias: 'Auto Unlock Front Door on Arrival (Paige/Justin)'
id: 8f4f5f6a-9c2d-4f4c-9f6c-7d5e5b2e2c3d
mode: single
trigger:
- platform: state
entity_id:
- person.paige
- person.justin
from: 'driving'
to: 'home'
condition:
- condition: state
entity_id: lock.front_door
state: 'locked'
action:
- service: lock.unlock
target:
entity_id: lock.front_door
- service: script.notify_engine
data:
title: "Front door auto-unlocked"
value1: "Unlocking for {{ trigger.to_state.name }} arriving from driving."
who: "family"
group: "Welcome_Home"
######################################################################
## 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"
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') -%}
Large Garage Door: open
{% endif -%}
{% if is_state('cover.small_garage_door', 'open') -%}
{% if is_state('cover.large_garage_door', 'open') -%}and
{%- endif %} Small Garage Door: 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:
- cover.large_garage_door
- cover.small_garage_door
to: 'open'
- platform: state
entity_id: group.family
to: not_home
for: 00:05:00
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: >
{% set open = [] %}
{% if is_state('cover.small_garage_door','open') %}{% set _ = open.append('Small garage door') %}{% endif %}
{% if is_state('cover.large_garage_door','open') %}{% set _ = open.append('Large garage door') %}{% endif %}
{% if open|length == 0 %}
All garage doors are closed.
{% elif open|length == 1 %}
{{ open[0] }} is open.
{% else %}
{{ open|join(' and ') }} are open.
{% endif %}
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')}} [Always mention the specific garage door that is currently open and remind us to close it for the night]"
- alias: 'Garage Camera on Alexa Shows'
id: 4373df2a-77f2-4e19-be7c-46c7b27ca583
mode: single
trigger:
- platform: state
entity_id:
- cover.large_garage_door
- cover.small_garage_door
from: 'closed'
to: 'open'
- platform: state
entity_id: binary_sensor.mcu1_gpio12 #interior Garage Doors
from: 'off'
to: 'on'
- platform: state
entity_id:
- person.carlo
- person.stacey
- person.paige
- person.justin
to: 'not_home'
from: 'home'
action:
- choose:
- conditions: "{{ is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed','on') }}"
sequence:
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:10:00'
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'hide garage camera'
media_content_type: custom
default:
- service: media_player.play_media
target:
entity_id: media_player.kitchen
data:
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:20:00'
- service: media_player.play_media
target:
entity_id: media_player.kitchen
data:
media_content_id: 'hide garage camera'
media_content_type: custom