mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-09 10:30:14 -04:00
initial push
This commit is contained in:
@@ -0,0 +1,593 @@
|
||||
input_text:
|
||||
camera14_status:
|
||||
name: Camera14 Status
|
||||
icon: mdi:cctv
|
||||
|
||||
input_select:
|
||||
camera14_preset:
|
||||
name: Camera14 Preset
|
||||
options:
|
||||
- Deck
|
||||
- Sandbox
|
||||
- Grove
|
||||
- Grass
|
||||
- Yard
|
||||
- Stairs
|
||||
- BesideStairs
|
||||
|
||||
input_button:
|
||||
# PTZ Controls
|
||||
cam14_ptz_up:
|
||||
name: Cam14 PTZ Up
|
||||
icon: mdi:arrow-up
|
||||
cam14_ptz_right_up:
|
||||
name: Cam14 PTZ Right Up
|
||||
icon: mdi:arrow-top-right
|
||||
cam14_ptz_right:
|
||||
name: Cam14 PTZ Right
|
||||
icon: mdi:arrow-right
|
||||
cam14_ptz_right_down:
|
||||
name: Cam14 Right Down
|
||||
icon: mdi:arrow-bottom-right
|
||||
cam14_ptz_down:
|
||||
name: Cam14 PTZ Down
|
||||
icon: mdi:arrow-down
|
||||
cam14_ptz_left_down:
|
||||
name: Cam14 PTZ Left Down
|
||||
icon: mdi:arrow-bottom-left
|
||||
cam14_ptz_left:
|
||||
name: Cam14 PTZ Left
|
||||
icon: mdi:arrow-left
|
||||
cam14_ptz_left_up:
|
||||
name: Cam14 Left Up
|
||||
icon: mdi:arrow-top-left
|
||||
cam14_ptz_zoom_in:
|
||||
name: Cam14 Zoom In
|
||||
icon: mdi:magnify-plus
|
||||
cam14_ptz_zoom_out:
|
||||
name: Cam14 Zoom Out
|
||||
icon: mdi:magnify-minus
|
||||
|
||||
# Camera Preset
|
||||
cam14_ptz_preset_1:
|
||||
name: Cam14 Deck
|
||||
icon: mdi:grill
|
||||
cam14_ptz_preset_2:
|
||||
name: Cam14 Sandbox
|
||||
icon: mdi:pail
|
||||
cam14_ptz_preset_3:
|
||||
name: Cam14 Yard
|
||||
icon: mdi:slide
|
||||
cam14_ptz_preset_4:
|
||||
name: Cam14 Grove
|
||||
icon: mdi:forest
|
||||
cam14_ptz_preset_5:
|
||||
name: Cam14 Stairs
|
||||
icon: mdi:stairs
|
||||
cam14_ptz_preset_6:
|
||||
name: Cam14 Preset 6
|
||||
icon: mdi:stairs-down
|
||||
cam14_ptz_preset_7:
|
||||
name: Cam14 Preset 7
|
||||
icon: mdi:grass
|
||||
cam14_ptz_preset_8:
|
||||
name: Cam14 Preset 8
|
||||
icon: mdi:map-marker
|
||||
cam14_ptz_preset_9:
|
||||
name: Cam14 Preset 9
|
||||
icon: mdi:map-marker
|
||||
cam14_ptz_preset_10:
|
||||
name: Cam14 Preset 10
|
||||
icon: mdi:map-marker
|
||||
|
||||
automation:
|
||||
# - id: automation_cam14_ptz_controls
|
||||
# alias: Cam14 PTZ Controls
|
||||
# mode: queued
|
||||
# trigger:
|
||||
# - id: up
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_up
|
||||
|
||||
# - id: right_up
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_right_up
|
||||
|
||||
# - id: right
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_right
|
||||
|
||||
# - id: right_down
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_right_down
|
||||
|
||||
# - id: down
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_down
|
||||
|
||||
# - id: left_down
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_left_down
|
||||
|
||||
# - id: left
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_left
|
||||
|
||||
# - id: left_up
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_left_up
|
||||
|
||||
# - id: zoom_in
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_zoom_in
|
||||
|
||||
# - id: zoom_out
|
||||
# platform: state
|
||||
# entity_id: input_button.cam14_ptz_zoom_out
|
||||
|
||||
# condition: []
|
||||
# action:
|
||||
# - service: amcrest.ptz_control
|
||||
# data:
|
||||
# entity_id: camera.frigate_cam14
|
||||
# movement: "{{ trigger.id }}"
|
||||
# travel_time: 0.5
|
||||
|
||||
# - delay: '00:00:01'
|
||||
|
||||
# - id: automation_manage_frigate_cam14_motion
|
||||
# mode: single
|
||||
# alias: Manage Frigate Cam14 Motion
|
||||
# description: ""
|
||||
# trigger:
|
||||
# - platform: state
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
|
||||
# - platform: event
|
||||
# event_type: automation_reloaded
|
||||
|
||||
# action:
|
||||
# - choose:
|
||||
# - conditions:
|
||||
# - condition: state
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
# state: 'off'
|
||||
# sequence:
|
||||
# - service: switch.turn_on
|
||||
# target:
|
||||
# entity_id: switch.frigate_cam14_motion
|
||||
# default:
|
||||
# - service: switch.turn_off
|
||||
# target:
|
||||
# entity_id: switch.frigate_cam14_motion
|
||||
|
||||
- id: automation_cycle_back_yard_camera
|
||||
mode: single
|
||||
alias: Cycle Back Yard Camera
|
||||
description: ""
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_boolean.cycle_cam14
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: event
|
||||
event_type: automation_reloaded
|
||||
|
||||
condition: []
|
||||
# - alias: "The input_boolean controlling the cycling of cam14 is on"
|
||||
# condition: state
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
# state: "on"
|
||||
|
||||
# - alias: "No people or animals detected by Frigate for the last 5 seconds"
|
||||
# condition: state
|
||||
# entity_id: binary_sensor.frigate_cam14_all_occupancy
|
||||
# state: "off"
|
||||
# for:
|
||||
# hours: 0
|
||||
# minutes: 0
|
||||
# seconds: 5
|
||||
|
||||
# # Either the camera isn't looking at the deck
|
||||
# # or the camera is looking at the deck and the deck motion sensor has been off for at least 30 seconds
|
||||
# # or the camera is looking at the deck and the patio door has been closed for at least 30 seconds
|
||||
# - condition: or
|
||||
# conditions:
|
||||
# - alias: "The input_select isn't set to Deck"
|
||||
# condition: not
|
||||
# conditions:
|
||||
# - condition: state
|
||||
# entity_id: input_select.camera14_preset
|
||||
# state: "Deck"
|
||||
# - alias: "The input_select is set to Deck and there hasn't been motion detected on the deck for the last 30 seconds"
|
||||
# condition: and
|
||||
# conditions:
|
||||
# - condition: state
|
||||
# entity_id: input_select.camera14_preset
|
||||
# state: "Deck"
|
||||
# - condition: state
|
||||
# entity_id: binary_sensor.deck_motion
|
||||
# state: "off"
|
||||
# for:
|
||||
# seconds: 30
|
||||
# - alias: "The input_select is set to deck and the patio door has been shut for at least 30 seconds"
|
||||
# condition: and
|
||||
# conditions:
|
||||
# - condition: state
|
||||
# entity_id: input_select.camera14_preset
|
||||
# state: "Deck"
|
||||
# - condition: state
|
||||
# entity_id: binary_sensor.patio_door_contact
|
||||
# state: "off"
|
||||
# for:
|
||||
# seconds: 30
|
||||
|
||||
action:
|
||||
# - alias: "This always cycles the back yard camera every 45 seconds. It should stop cycling when a person is found, but this version doesn't"
|
||||
# repeat:
|
||||
# while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}"
|
||||
# sequence:
|
||||
# - service: input_select.select_next
|
||||
# data:
|
||||
# cycle: true
|
||||
# target:
|
||||
# entity_id: input_select.camera14_preset
|
||||
|
||||
# - delay: "00:00:45"
|
||||
|
||||
- alias: "This should only cycle the back yard camera, if a person isn't found."
|
||||
repeat:
|
||||
while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}"
|
||||
sequence:
|
||||
- choose:
|
||||
# If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds.
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Deck
|
||||
- condition: state
|
||||
entity_id: binary_sensor.deck_motion
|
||||
state: 'on'
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Deck"
|
||||
- delay: 5
|
||||
|
||||
# If a person is not found, cycle to the next preset, then wait 30 seconds.
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}"
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Cycling"
|
||||
- service: input_select.select_next
|
||||
data:
|
||||
cycle: true
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
|
||||
- delay: 30
|
||||
|
||||
# If a person is found, check if the person is still present every 5 seconds
|
||||
default:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Focusing"
|
||||
|
||||
- repeat:
|
||||
while: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}"
|
||||
sequence:
|
||||
- delay: 5
|
||||
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Static"
|
||||
|
||||
- id: automation_look_at_deck
|
||||
mode: restart
|
||||
alias: "Look at deck"
|
||||
description: "When the patio door is opened, set the camera to the deck preset, if frigate isn't currently detecting anything"
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.patio_door_contact
|
||||
from: "off"
|
||||
to: "on"
|
||||
condition:
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.frigate_cam14_all_count
|
||||
below: 2
|
||||
|
||||
action:
|
||||
# We don't need to turn off cycling the back yard camera.
|
||||
# - service: input_boolean.turn_off
|
||||
# target:
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Deck"
|
||||
|
||||
- service: input_select.select_option
|
||||
data:
|
||||
option: Deck
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
|
||||
# the Cycle cam 14 automation already checks if something is detected. All we need to do is force cam14 to look at the deck
|
||||
|
||||
# - delay: "00:00:05"
|
||||
|
||||
# - repeat:
|
||||
# while: "{{ is_state('binary_sensor.frigate_cam14_all_occupancy', 'on')}}"
|
||||
# sequence:
|
||||
# - delay: "00:00:05"
|
||||
|
||||
# - service: input_boolean.turn_on
|
||||
# target:
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
|
||||
- id: automation_back_yard_snapshot
|
||||
mode: restart
|
||||
alias: "Back Yard Snapshot"
|
||||
trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: camera.frigate_cam14
|
||||
to: "streaming"
|
||||
|
||||
action:
|
||||
- service: camera.snapshot
|
||||
target:
|
||||
entity_id: camera.frigate_cam14
|
||||
data:
|
||||
filename: "/config/tmp/snapshots/cam14-{{states('input_select.camera14_preset')}}-{{now().strftime('%y%m%d-%H%M%S')}}.jpg"
|
||||
|
||||
- id: automation_cam14_ptz_preset
|
||||
alias: Cam14 PTZ Presets
|
||||
mode: single
|
||||
max_exceeded: silent
|
||||
trigger:
|
||||
- id: Preset 1
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_1
|
||||
|
||||
- id: Preset 2
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_2
|
||||
|
||||
- id: Preset 3
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_3
|
||||
|
||||
- id: Preset 4
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_4
|
||||
|
||||
- id: Preset 5
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_5
|
||||
|
||||
- id: Preset 6
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_6
|
||||
|
||||
- id: Preset 7
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_7
|
||||
|
||||
- id: Preset 8
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_8
|
||||
|
||||
- id: Preset 9
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_9
|
||||
|
||||
- id: Preset 10
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_10
|
||||
|
||||
action:
|
||||
- choose:
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 1}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Deck"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 2}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Sandbox"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 3}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Yard"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 4}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Grove"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 5}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Stairs"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 6}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "BesideStairs"
|
||||
- conditions: >
|
||||
{{ trigger.id|replace('Preset ','')|int(default=0) == 7}}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
data:
|
||||
option: "Grass"
|
||||
|
||||
- service: "shell_command.back_yard_preset_{{ trigger.id|replace('Preset ','')|int(default=1) }}"
|
||||
# - service: amcrest.goto_preset
|
||||
# data:
|
||||
# entity_id: camera.frigate_cam14
|
||||
# preset: "{{ trigger.id|replace('Preset ','')|int(default=1) }}"
|
||||
|
||||
- delay: "00:00:2"
|
||||
|
||||
- id: automation_cam14_ptz_move
|
||||
alias: Cam14 PTZ Move
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_select.camera14_preset
|
||||
- platform: state
|
||||
entity_id: camera.frigate_cam14
|
||||
from: unavailable
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: time_pattern
|
||||
minutes: /10
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Sandbox
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_2
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Yard
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_3
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Grove
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_4
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Stairs
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_5
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: BesideStairs
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_6
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Grass
|
||||
sequence:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_7
|
||||
default:
|
||||
- service: input_button.press
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_button.cam14_ptz_preset_1
|
||||
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: Deck Person Occupancy
|
||||
unique_id: templatebinarysensor.deck_person_occupancy
|
||||
availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ is_state('binary_sensor.possible_deck_person_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}"
|
||||
icon: >
|
||||
{% if is_state('binary_sensor.deck_person_occupancy','on') %}
|
||||
mdi:motion-sensor
|
||||
{% else %}
|
||||
mdi:motion-sensor-off
|
||||
{% endif %}
|
||||
|
||||
- name: Deck Animal Motion
|
||||
unique_id: templatebinarysensor.deck_animal_occupancy
|
||||
availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ is_state('binary_sensor.possible_deck_animal_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}"
|
||||
icon: mdi:bird
|
||||
|
||||
- sensor:
|
||||
- name: Deck Person Count
|
||||
unique_id: templatesensor.deck_person_count
|
||||
availability: "{{ states('sensor.possible_deck_person_count') not in ['unkown', 'unavailable'] }}"
|
||||
unit_of_measurement: objects
|
||||
state: >
|
||||
{% if is_state('input_select.camera14_preset','Deck') %}
|
||||
{{ states('sensor.possible_deck_person_count') }}
|
||||
{% else %}
|
||||
0
|
||||
{% endif %}
|
||||
icon: mdi:shield-account
|
||||
|
||||
- name: Deck Animal Count
|
||||
unique_id: templatesensor.deck_animal_count
|
||||
availability: "{{ states('sensor.possible_deck_animal_count') not in ['unkown', 'unavailable'] }}"
|
||||
unit_of_measurement: objects
|
||||
state: >
|
||||
{% if is_state('input_select.camera14_preset','Deck') %}
|
||||
{{ states('sensor.possible_deck_animal_count') }}
|
||||
{% else %}
|
||||
0
|
||||
{% endif %}
|
||||
icon: mdi:paw
|
||||
@@ -0,0 +1,20 @@
|
||||
shell_command:
|
||||
master_bedroom_left_preset_1: !secret master_bedroom_left_preset_1
|
||||
master_bedroom_left_preset_2: !secret master_bedroom_left_preset_2
|
||||
master_bedroom_left_preset_3: !secret master_bedroom_left_preset_3
|
||||
master_bedroom_left_preset_4: !secret master_bedroom_left_preset_4
|
||||
master_bedroom_left_preset_5: !secret master_bedroom_left_preset_5
|
||||
|
||||
master_bedroom_right_preset_1: !secret master_bedroom_right_preset_1
|
||||
master_bedroom_right_preset_2: !secret master_bedroom_right_preset_2
|
||||
master_bedroom_right_preset_3: !secret master_bedroom_right_preset_3
|
||||
master_bedroom_right_preset_4: !secret master_bedroom_right_preset_4
|
||||
master_bedroom_right_preset_5: !secret master_bedroom_right_preset_5
|
||||
|
||||
back_yard_preset_1: !secret back_yard_preset_1
|
||||
back_yard_preset_2: !secret back_yard_preset_2
|
||||
back_yard_preset_3: !secret back_yard_preset_3
|
||||
back_yard_preset_4: !secret back_yard_preset_4
|
||||
back_yard_preset_5: !secret back_yard_preset_5
|
||||
back_yard_preset_6: !secret back_yard_preset_6
|
||||
back_yard_preset_7: !secret back_yard_preset_7
|
||||
Reference in New Issue
Block a user