Compare commits
2 Commits
51b2f58791
...
c831770ac8
| Author | SHA1 | Date | |
|---|---|---|---|
| c831770ac8 | |||
| cc7a8ebaf0 |
25
deepstack/stacks/compose.yml
Normal file
25
deepstack/stacks/compose.yml
Normal file
@ -0,0 +1,25 @@
|
||||
services:
|
||||
deepstack:
|
||||
container_name: deepstack
|
||||
restart: unless-stopped
|
||||
image: deepquestai/deepstack
|
||||
ports:
|
||||
- '5000:5000'
|
||||
environment:
|
||||
- VISION-DETECTION=True
|
||||
- API-KEY=""
|
||||
volumes:
|
||||
- /Users/robin/Data/pytorch-models:/modelstore/detection
|
||||
deepstack_ui:
|
||||
container_name: deepstack_ui
|
||||
restart: unless-stopped
|
||||
image: robmarkcole/deepstack-ui:latest
|
||||
environment:
|
||||
- DEEPSTACK_IP=deepstack
|
||||
- DEEPSTACK_PORT=5000
|
||||
- DEEPSTACK_API_KEY=""
|
||||
- DEEPSTACK_TIMEOUT=20
|
||||
- DEEPSTACK_CUSTOM_MODEL=fire
|
||||
- DEEPSTACK_UI_DEBUG_MODE=True
|
||||
ports:
|
||||
- '8501:8501'
|
||||
39
home-assistant/Notification to smart phone.yml
Normal file
39
home-assistant/Notification to smart phone.yml
Normal file
@ -0,0 +1,39 @@
|
||||
# Automation version of notification
|
||||
action: notify.mobile_app_sm_n986b
|
||||
data_template:
|
||||
message: A {{trigger.payload_json["after"]["label"]}} was detected.
|
||||
title: Frigate
|
||||
data:
|
||||
image: >-
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android
|
||||
tag: "{{trigger.payload_json[\"after\"][\"id\"]}}"
|
||||
when: "{{trigger.payload_json[\"after\"][\"start_time\"]|int}}"
|
||||
actions:
|
||||
- action: URI
|
||||
title: Open Image
|
||||
uri: >-
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android
|
||||
enabled: true
|
||||
|
||||
# script version of notification
|
||||
alias: Send Dynamic Notification To All Devices
|
||||
sequence:
|
||||
- data:
|
||||
message: "{{ message }}"
|
||||
title: "{{ title }}"
|
||||
data: null
|
||||
url: "{{ video }}"
|
||||
tag: "{{ notifTag }}"
|
||||
group: "{{ group }}"
|
||||
attachment:
|
||||
url: >-
|
||||
{% if (importance == "default" and video != null) -%} {{ video }} {%-
|
||||
else -%} {{ image }} {%- endif %}
|
||||
push:
|
||||
interruption-level: >-
|
||||
{% if importance == "max" -%} time-sensitive {%- else -%} passive {%-
|
||||
endif %}
|
||||
action: notify.mobile_app_sm_n986b
|
||||
mode: single
|
||||
icon: mdi:bell-ring-outline
|
||||
max: 10
|
||||
97
home-assistant/Person Detect Logic.yml
Normal file
97
home-assistant/Person Detect Logic.yml
Normal file
@ -0,0 +1,97 @@
|
||||
alias: "FRIGATE: Person Detect Logic"
|
||||
description: >-
|
||||
This automation is used to send a notification when a person is detected by
|
||||
Frigate. It uses the frigate MQTT event stream to trigger the notification and
|
||||
includes a snapshot of the detected object. The notification will be sent to
|
||||
all devices with the specified group and will include a video clip of the
|
||||
detection if available.
|
||||
triggers:
|
||||
- topic: homeassistant/events
|
||||
id: frigate-event
|
||||
value_template: "{{ value_json[\"after\"][\"camera\"] }}"
|
||||
variables:
|
||||
after_zones: "{{ trigger.payload_json[\"after\"][\"entered_zones\"] }}"
|
||||
before_zones: "{{ trigger.payload_json[\"before\"][\"entered_zones\"] }}"
|
||||
camera: "{{ trigger.payload_json[\"after\"][\"camera\"] }}"
|
||||
id: "{{ trigger.payload_json[\"after\"][\"id\"] }}"
|
||||
label: "{{ trigger.payload_json[\"after\"][\"label\"] }}"
|
||||
score: "{{ trigger.payload_json[\"after\"][\"score\"] }}"
|
||||
time_clip_start: "{{ trigger.payload_json[\"after\"][\"start_time\"] - 10.0 }}"
|
||||
trigger: mqtt
|
||||
conditions:
|
||||
- condition: or
|
||||
conditions:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json['type'] == 'new' }}"
|
||||
- condition: template
|
||||
value_template: "{{ before_zones | length == 0 }}"
|
||||
enabled: false
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json[\"after\"][\"entered_zones\"]|length > 0 }}"
|
||||
enabled: false
|
||||
actions:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: frigate-event
|
||||
sequence:
|
||||
- action: script.person_in_driveway_detect_actions
|
||||
data:
|
||||
id: "{{ id }}"
|
||||
title: >-
|
||||
{{ label }} was detected on {{ camera | replace("_", " ") |
|
||||
title }}
|
||||
message: >-
|
||||
{{ label }} detected in the {{ after_zones[0] | replace("_", "
|
||||
") | title }}
|
||||
notifTag: "{{ id }}"
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: frigate-notification-{{ camera }}
|
||||
importance: max
|
||||
image: /api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
video: ""
|
||||
clickAction: ""
|
||||
camera: "{{ camera }}"
|
||||
- repeat:
|
||||
sequence:
|
||||
- wait_for_trigger:
|
||||
- topic: homeassistant/events
|
||||
payload: "{{ trigger.payload_json[\"after\"][\"id\"] }}"
|
||||
value_template: "{{ value_json[\"after\"][\"id\"] }}"
|
||||
trigger: mqtt
|
||||
continue_on_timeout: false
|
||||
timeout: "00:02:00"
|
||||
- condition: template
|
||||
value_template: "{{ wait.trigger.payload_json['type'] == 'end' }}"
|
||||
- action: script.person_in_driveway_detect_actions
|
||||
data:
|
||||
id: "{{ id }}"
|
||||
title: >
|
||||
{% if (wait.trigger.payload_json["after"]["sub_label"] !=
|
||||
None) -%} {{
|
||||
(wait.trigger.payload_json["after"]["sub_label"]) | title
|
||||
}} {%- else -%} {{ label | replace("_", " ") | title }}
|
||||
{%- endif %} was detected in the {{ after_zones[0] |
|
||||
replace("_", " ") | title }}
|
||||
message: >-
|
||||
Detected with {{ int(score | round(2) * 100) }}%
|
||||
confidence
|
||||
notifTag: "{{ id }}"
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: >
|
||||
frigate-notification-{{
|
||||
trigger.payload_json["after"]["camera"] }}
|
||||
importance: default
|
||||
image: /api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
video: >-
|
||||
home-assistant.sthome.org/api/{{ id }}/{{ camera
|
||||
}}/clip.mp4
|
||||
clickAction: >
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4
|
||||
camera: "{{ camera }}"
|
||||
until:
|
||||
- condition: template
|
||||
value_template: "{{ wait.trigger.payload_json[\"type\"] == \"end\" }}"
|
||||
default: []
|
||||
mode: parallel
|
||||
max: 10
|
||||
125
home-assistant/Person detect Actions.yml
Normal file
125
home-assistant/Person detect Actions.yml
Normal file
@ -0,0 +1,125 @@
|
||||
alias: Person detect Actions
|
||||
description: ""
|
||||
variables:
|
||||
relay: null
|
||||
counter: null
|
||||
sequence:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ camera == 'Driveway' }}"
|
||||
then:
|
||||
- variables:
|
||||
relay: switch.sthome_ut1_relay_1
|
||||
counter: counter.driveway_person_alarm_counter
|
||||
else:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ camera == 'Patio' }}"
|
||||
then:
|
||||
- variables:
|
||||
relay: switch.sthome_ut1_relay_2
|
||||
counter: counter.patio_person_alarm_counter
|
||||
else:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ camera == 'Westwall' }}"
|
||||
then:
|
||||
- variables:
|
||||
relay: switch.sthome_ut1_relay_2
|
||||
counter: counter.west_wall_person_alarm_counter
|
||||
else:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ camera == 'Eastwall' }}"
|
||||
then:
|
||||
- variables:
|
||||
relay: switch.sthome_ut1_relay_3
|
||||
counter: counter.east_wall_person_alarm_counter
|
||||
else:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ camera == 'Backyard' }}"
|
||||
then:
|
||||
- variables:
|
||||
relay: switch.sthome_ut1_relay_4
|
||||
counter: counter.backyard_person_alarm_counter
|
||||
else:
|
||||
- stop: Unknown camera
|
||||
- action: counter.increment
|
||||
target:
|
||||
entity_id: "{{ counter }}"
|
||||
data: {}
|
||||
- action: switch.turn_on
|
||||
target:
|
||||
entity_id: "{{ relay }}"
|
||||
data: {}
|
||||
- action: script.send_dynamic_notification_to_all_devices
|
||||
data:
|
||||
id: "{{ id }}"
|
||||
title: "{{ title }}"
|
||||
message: "{{ message }}"
|
||||
notifTag: "{{ notifTag }}"
|
||||
notifIcon: "{{ notifIcon }}"
|
||||
group: "{{ group }}"
|
||||
importance: "{{ importance }}"
|
||||
image: "{{ image }}"
|
||||
video: "{{ video }}"
|
||||
clickAction: "{{ clickAction }}"
|
||||
enabled: true
|
||||
fields:
|
||||
id:
|
||||
selector:
|
||||
text: null
|
||||
name: id
|
||||
required: true
|
||||
title:
|
||||
selector:
|
||||
text: null
|
||||
name: title
|
||||
required: true
|
||||
message:
|
||||
selector:
|
||||
text: null
|
||||
name: message
|
||||
required: true
|
||||
notiftag:
|
||||
selector:
|
||||
text: null
|
||||
name: notifTag
|
||||
required: true
|
||||
notificon:
|
||||
selector:
|
||||
text: null
|
||||
name: notifIcon
|
||||
required: true
|
||||
group:
|
||||
selector:
|
||||
text: null
|
||||
name: group
|
||||
required: true
|
||||
importance:
|
||||
selector:
|
||||
text: null
|
||||
name: importance
|
||||
required: true
|
||||
image:
|
||||
selector:
|
||||
text: null
|
||||
name: image
|
||||
required: true
|
||||
clickaction:
|
||||
selector:
|
||||
text: null
|
||||
name: clickAction
|
||||
required: true
|
||||
video:
|
||||
selector:
|
||||
text: null
|
||||
name: video
|
||||
required: true
|
||||
camera:
|
||||
selector:
|
||||
entity: {}
|
||||
name: camera
|
||||
description: Name of camera as defined in Frigate
|
||||
required: true
|
||||
107
home-assistant/Send Dynamic Notification To All Devices.yml
Normal file
107
home-assistant/Send Dynamic Notification To All Devices.yml
Normal file
@ -0,0 +1,107 @@
|
||||
alias: Send Dynamic Notification To All Devices
|
||||
sequence:
|
||||
- parallel:
|
||||
# - if:
|
||||
# - condition: template
|
||||
# value_template: '{{ send_to_fold | default(True) }}'
|
||||
# then:
|
||||
# - data:
|
||||
# message: '{{ message }}'
|
||||
# title: '{{ title }}'
|
||||
# data:
|
||||
# channel: '{{ channel }}'
|
||||
# clickAction: '{{ video }}'
|
||||
# tag: '{{ notifTag }}'
|
||||
# group: '{{ group }}'
|
||||
# image: '{% if (importance == "default" and video != null) -%} {{ null
|
||||
# }} {%- else -%} {{ image }} {%- endif %}'
|
||||
# video: '{% if (importance == "default" and video != null) -%} {{ video
|
||||
# }} {%- else -%} {{ null }} {%- endif %}'
|
||||
# notification_icon: '{{ notifIcon }}'
|
||||
# importance: '{{ importance }}'
|
||||
# action: notify.mobile_app_fold
|
||||
- data:
|
||||
message: '{{ message }}'
|
||||
title: '{{ title }}'
|
||||
data:
|
||||
url: '{{ video }}'
|
||||
tag: '{{ notifTag }}'
|
||||
group: '{{ group }}'
|
||||
attachment:
|
||||
url: '{% if (importance == "default" and video != null) -%} {{ video }} {%- else -%} {{ image }} {%- endif %}'
|
||||
push:
|
||||
interruption-level: '{% if importance == "max" -%} time-sensitive {%- else -%} passive {%- endif %}'
|
||||
# must test above data sent to notify.mobile_app_sm_n986b and check whether the following data is needed
|
||||
# actions:
|
||||
# - action: URI
|
||||
# title: Open Image
|
||||
# uri: https://home-assistant.sthome.org/api/frigate/notifications/{{ id }}/thumbnail.jpg?format=android
|
||||
action: notify.mobile_app_sm_n986b
|
||||
# - if:
|
||||
# - condition: template
|
||||
# value_template: '{{ states("media_player.nova4k") != "off" }}'
|
||||
# - condition: template
|
||||
# value_template: '{{ importance == "max" }}'
|
||||
# then:
|
||||
# - data:
|
||||
# message: '{{ message }}'
|
||||
# title: '{{ title }}'
|
||||
# data:
|
||||
# fontsize: medium
|
||||
# image:
|
||||
# url: https://frigate.sthome.org/api/events/{{id}}/snapshot.jpg
|
||||
# action: notify.nova_4k
|
||||
mode: parallel
|
||||
icon: mdi:bell-ring-outline
|
||||
max: 10
|
||||
fields:
|
||||
id:
|
||||
selector:
|
||||
text: null
|
||||
name: id
|
||||
required: true
|
||||
title:
|
||||
selector:
|
||||
text: null
|
||||
name: title
|
||||
required: true
|
||||
message:
|
||||
selector:
|
||||
text: null
|
||||
name: message
|
||||
required: true
|
||||
notiftag:
|
||||
selector:
|
||||
text: null
|
||||
name: notifTag
|
||||
required: true
|
||||
notificon:
|
||||
selector:
|
||||
text: null
|
||||
name: notifIcon
|
||||
required: true
|
||||
group:
|
||||
selector:
|
||||
text: null
|
||||
name: group
|
||||
required: true
|
||||
importance:
|
||||
selector:
|
||||
text: null
|
||||
name: importance
|
||||
required: true
|
||||
image:
|
||||
selector:
|
||||
text: null
|
||||
name: image
|
||||
required: true
|
||||
clickaction:
|
||||
selector:
|
||||
text: null
|
||||
name: clickAction
|
||||
required: true
|
||||
video:
|
||||
selector:
|
||||
text: null
|
||||
name: video
|
||||
required: true
|
||||
171
home-assistant/home-automation2.txt
Normal file
171
home-assistant/home-automation2.txt
Normal file
@ -0,0 +1,171 @@
|
||||
https://www.youtube.com/watch?v=gA67NCcTwms&t=621s
|
||||
|
||||
# Automation yaml file
|
||||
--- snip ---
|
||||
alias: "FRIGATE: Notify driveway zone1 person detection"
|
||||
description: FRIGATE notify - driveway
|
||||
triggers:
|
||||
- topic: homeassistant/events
|
||||
trigger: mqtt
|
||||
conditions:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json['after']['label'] == 'person' }}"
|
||||
- condition: template
|
||||
value_template: "{{ 'driveway_z1' in trigger.payload_json['after']['entered_zones']}}"
|
||||
actions:
|
||||
- action: notify.mobile_app_sm_n986b
|
||||
data_template:
|
||||
message: A {{trigger.payload_json["after"]["label"]}} was detected.
|
||||
title: Frigate
|
||||
data:
|
||||
image: >-
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android
|
||||
tag: "{{trigger.payload_json[\"after\"][\"id\"]}}"
|
||||
when: "{{trigger.payload_json[\"after\"][\"start_time\"]|int}}"
|
||||
actions:
|
||||
- action: URI
|
||||
title: Open Image
|
||||
uri: >-
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android
|
||||
enabled: true
|
||||
mode: single
|
||||
--- snip ---
|
||||
|
||||
# Install home-assistant app on your android phone from the play store
|
||||
# After installation and connection to you home-assistant server, on home-assistant server (on computer), navigate to Settings -> Devices & services -> Integrations. Look for your Mobile App in the list of integrations.
|
||||
# To change the name of the device, click on the 3 dot menu next to the device name under Integration Entities and select Rename.
|
||||
|
||||
# open app on phone and from the Overview screen, click on hamburger menu -> Settings -> Companion app -> Notification channels
|
||||
|
||||
# With the device name now known, edit the yaml file above to reflect the device name, e.g.
|
||||
# if device name is SM-N986B, then
|
||||
- action: notify.mobile_app_samsung_sm_n986b
|
||||
|
||||
|
||||
To create a script using GUI
|
||||
----------------------------
|
||||
Navigate to Settings -> Automations & Scenes -> Scripts
|
||||
Click "+ CREATE SCRIPT"
|
||||
Click Create New Script
|
||||
|
||||
To create script directly using yaml
|
||||
------------------------------------
|
||||
In truenas shell, go to config/scripts folder
|
||||
# Create custom scripts folder to keep scripts organised
|
||||
mkdir custom_scripts
|
||||
# Create script file using nano editor, for example:
|
||||
nano custom_scripts/send_dynamic_notification_to_all_devices.yaml
|
||||
# Then edit scripts.yaml to include newly created script file
|
||||
nano scripts.yaml
|
||||
# Enter following line in scripts.yaml file, save and exit
|
||||
script: !include_dir_merge_named custom_scripts/
|
||||
|
||||
|
||||
|
||||
-------------------------
|
||||
alias: Outside - Driveway & Front Yard - Frigate Event - Cat / Dog / Person Seen
|
||||
description: ''
|
||||
# The trigger is mqtt and will fire whenever an object is detected by YOUR_CAMERA_NAME
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: frigate/events
|
||||
id: frigate-event
|
||||
payload: YOUR_CAMERA_NAME
|
||||
value_template: "{{ value_json['after']['camera'] }}"
|
||||
variables:
|
||||
after_zones: "{{ trigger.payload_json['after']['entered_zones'] }}"
|
||||
before_zones: "{{ trigger.payload_json['before']['entered_zones'] }}"
|
||||
camera: "{{ trigger.payload_json['after']['camera'] }}"
|
||||
id: "{{ trigger.payload_json['after']['id'] }}"
|
||||
label: "{{ trigger.payload_json['after']['label'] }}"
|
||||
score: "{{ trigger.payload_json['after']['score'] }}"
|
||||
time_clip_start: "{{ trigger.payload_json['after']['start_time'] - 10.0 }}"
|
||||
# Conditions must be used to filter out objects / detections that are not of interest
|
||||
condition:
|
||||
# This condition is used to ensure that I am only notified of objects that are new or only just entered a zone. This is to avoid getting loads of updated notifications for the same dog in my backyard (as an example).
|
||||
- condition: or
|
||||
conditions:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json['type'] == 'new' }}"
|
||||
- condition: template
|
||||
value_template: "{{ before_zones | length == 0 }}"
|
||||
# This ensures that the object at least has one zone, this can be removed if you don't care about zones
|
||||
- condition: template
|
||||
value_template: '{{ trigger.payload_json["after"]["entered_zones"]|length > 0 }}'
|
||||
# This specifically checks for the object to be in the driveway or front_yard zone. This can be removed or those names changed to fit your use case.
|
||||
for example:
|
||||
- condition: template
|
||||
value_template: >-
|
||||
{{ ["driveway", "front_yard"] | select("in",
|
||||
after_zones) | list | length > 0 }}
|
||||
alias: Object is in Driveway or Front Yard
|
||||
# This filters out any car objects as I have a separate automation with different behavior for car. This can be removed if not applicable to your use case.
|
||||
- condition: template
|
||||
value_template: '{{ trigger.payload_json["after"]["label"] != "car" }}'
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: frigate-event
|
||||
sequence:
|
||||
# Send the initial notification with snapshot and info.
|
||||
- service: script.send_dynamic_notification_to_all_devices
|
||||
data:
|
||||
id: "{{ id }}"
|
||||
title: >-
|
||||
{{ label }} was
|
||||
detected on {{ camera |
|
||||
replace("_", " ") | title }}
|
||||
message: >-
|
||||
{{ label }} detected in
|
||||
the {{ after_zones[0] |
|
||||
replace("_", " ") | title }}
|
||||
notifTag: "{{ id }}"
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: >-
|
||||
frigate-notification-{{ camera }}
|
||||
importance: max
|
||||
image: >-
|
||||
/api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
clickAction: ''
|
||||
# Wait until the end of the notification has occurred.
|
||||
- repeat:
|
||||
until:
|
||||
- condition: template
|
||||
value_template: '{{ wait.trigger.payload_json["type"] == "end" }}'
|
||||
sequence:
|
||||
- wait_for_trigger:
|
||||
- platform: mqtt
|
||||
topic: frigate/events
|
||||
payload: "{{ trigger.payload_json[\"after\"][\"id\"] }}"
|
||||
value_template: "{{ value_json[\"after\"][\"id\"] }}"
|
||||
continue_on_timeout: false
|
||||
timeout: '00:02:00'
|
||||
- condition: template
|
||||
value_template: '{{ wait.trigger.payload_json[''type''] == ''end'' }}'
|
||||
- service: script.send_dynamic_notification_to_all_devices
|
||||
data:
|
||||
id: '{{ id }}'
|
||||
# Uses double take for title and message to include face info if a match is detected.
|
||||
title: >-
|
||||
{% if (wait.trigger.payload_json["after"]["sub_label"] !=
|
||||
None) -%} {{ (wait.trigger.payload_json["after"]["sub_label"])
|
||||
| title }} {%- else -%} {{ label | replace("_", " ") | title
|
||||
}} {%- endif %} was detected in the {{ after_zones[0] |
|
||||
replace("_", " ") | title }}
|
||||
message: Detected with {{ int(score | round(2) * 100) }}% confidence
|
||||
notifTag: '{{ id }}'
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: >-
|
||||
frigate-notification-{{
|
||||
trigger.payload_json["after"]["camera"] }}
|
||||
importance: default
|
||||
image: >-
|
||||
/api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
video: >-
|
||||
HASS_URL_BASE/api/{{id}}/{{camera}}/clip.mp4
|
||||
clickAction: >-
|
||||
http://HASS_URL_BASE/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4
|
||||
default: []
|
||||
mode: parallel
|
||||
max: 10
|
||||
106
home-assistant/home-automation3.yml
Normal file
106
home-assistant/home-automation3.yml
Normal file
@ -0,0 +1,106 @@
|
||||
alias: Frigate Person Detect Notification
|
||||
description: 'This automation is used to send a notification when a person is detected by Frigate. It uses the frigate MQTT event stream to trigger the notification and includes a snapshot of the detected object. The notification will be sent to all devices with the specified group and will include a video clip of the detection if available.'
|
||||
# The trigger is mqtt and will fire whenever an object is detected by YOUR_CAMERA_NAME
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: homeassistant/events
|
||||
id: frigate-event
|
||||
payload: Driveway
|
||||
value_template: "{{ value_json['after']['camera'] }}"
|
||||
variables:
|
||||
after_zones: "{{ trigger.payload_json['after']['entered_zones'] }}"
|
||||
before_zones: "{{ trigger.payload_json['before']['entered_zones'] }}"
|
||||
camera: "{{ trigger.payload_json['after']['camera'] }}"
|
||||
id: "{{ trigger.payload_json['after']['id'] }}"
|
||||
label: "{{ trigger.payload_json['after']['label'] }}"
|
||||
score: "{{ trigger.payload_json['after']['score'] }}"
|
||||
time_clip_start: "{{ trigger.payload_json['after']['start_time'] - 10.0 }}"
|
||||
# Conditions must be used to filter out objects / detections that are not of interest
|
||||
condition:
|
||||
# This condition is used to ensure that I am only notified of objects that are new or only just entered a zone. This is to avoid getting loads of updated notifications for the same dog in my backyard (as an example).
|
||||
- condition: or
|
||||
conditions:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json['type'] == 'new' }}"
|
||||
- condition: template
|
||||
value_template: "{{ before_zones | length == 0 }}"
|
||||
# This ensures that the object at least has one zone, this can be removed if you don't care about zones
|
||||
- condition: template
|
||||
value_template: '{{ trigger.payload_json["after"]["entered_zones"]|length > 0 }}'
|
||||
# This specifically checks for the object to be in the specified zones. This can be removed or those names changed to fit your use case.
|
||||
#for example:
|
||||
- condition: template
|
||||
value_template: >-
|
||||
{{ ["driveway_z1", "Driveway_Paving"] | select("in",
|
||||
after_zones) | list | length > 0 }}
|
||||
alias: Object is in Driveway
|
||||
# This filters out any car objects. This can be removed if not applicable to your use case.
|
||||
- condition: template
|
||||
value_template: '{{ trigger.payload_json["after"]["label"] != "car" }}'
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: frigate-event
|
||||
sequence:
|
||||
# Send the initial notification with snapshot and info.
|
||||
- service: script.send_dynamic_notification_to_all_devices
|
||||
data:
|
||||
id: "{{ id }}"
|
||||
title: >-
|
||||
{{ label }} was
|
||||
detected on {{ camera |
|
||||
replace("_", " ") | title }}
|
||||
message: >-
|
||||
{{ label }} detected in
|
||||
the {{ after_zones[0] |
|
||||
replace("_", " ") | title }}
|
||||
notifTag: "{{ id }}"
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: >-
|
||||
frigate-notification-{{ camera }}
|
||||
importance: max
|
||||
image: >-
|
||||
/api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
clickAction: ''
|
||||
# Wait until the end of the notification has occurred.
|
||||
- repeat:
|
||||
until:
|
||||
- condition: template
|
||||
value_template: '{{ wait.trigger.payload_json["type"] == "end" }}'
|
||||
sequence:
|
||||
- wait_for_trigger:
|
||||
- platform: mqtt
|
||||
topic: homeassistant/events
|
||||
payload: "{{ trigger.payload_json[\"after\"][\"id\"] }}"
|
||||
value_template: "{{ value_json[\"after\"][\"id\"] }}"
|
||||
continue_on_timeout: false
|
||||
timeout: '00:02:00'
|
||||
- condition: template
|
||||
value_template: '{{ wait.trigger.payload_json[''type''] == ''end'' }}'
|
||||
- service: script.send_dynamic_notification_to_all_devices
|
||||
data:
|
||||
id: '{{ id }}'
|
||||
# Uses double take for title and message to include face info if a match is detected.
|
||||
title: >-
|
||||
{% if (wait.trigger.payload_json["after"]["sub_label"] !=
|
||||
None) -%} {{ (wait.trigger.payload_json["after"]["sub_label"])
|
||||
| title }} {%- else -%} {{ label | replace("_", " ") | title
|
||||
}} {%- endif %} was detected in the {{ after_zones[0] |
|
||||
replace("_", " ") | title }}
|
||||
message: Detected with {{ int(score | round(2) * 100) }}% confidence
|
||||
notifTag: '{{ id }}'
|
||||
notifIcon: mdi:doorbell-video
|
||||
group: >-
|
||||
frigate-notification-{{
|
||||
trigger.payload_json["after"]["camera"] }}
|
||||
importance: default
|
||||
image: >-
|
||||
/api/frigate/notifications/{{ id }}/snapshot.jpg
|
||||
video: >-
|
||||
home-assistant.sthome.org/api/{{id}}/{{camera}}/clip.mp4
|
||||
clickAction: >-
|
||||
https://home-assistant.sthome.org/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4
|
||||
default: []
|
||||
mode: parallel
|
||||
max: 10
|
||||
24
home-assistant/notification to android tv.yml
Normal file
24
home-assistant/notification to android tv.yml
Normal file
@ -0,0 +1,24 @@
|
||||
# NOT WORKING
|
||||
|
||||
# Adding notify to Configuration.yaml file
|
||||
# --------------------------------------------------------
|
||||
# open home-assistant configration.yaml file with nano
|
||||
nano /mnt/SSD1/docker/data/home-assistant/config/configuration.yaml
|
||||
# Add the following lines to the end of the file
|
||||
notify:
|
||||
- platform: androidtv
|
||||
name: Android TV
|
||||
host: nova4k.sthome.org
|
||||
|
||||
# Checking the configuration and restarting home-assistant
|
||||
# --------------------------------------------------------
|
||||
# In home-assistant, go to Developer Tools > YAML and click Check Configuration.
|
||||
# If there are no errors, click Restart to apply the changes.
|
||||
|
||||
# In home-assistant, go to Developer Tools > Services and select the notify service.
|
||||
# In the Service Data field, enter the following JSON:
|
||||
{
|
||||
"message": "Hello from Home Assistant!",
|
||||
"title": "Test Notification",
|
||||
"target": "Android TV"
|
||||
}
|
||||
@ -63,6 +63,16 @@ cp -pr /mnt/stpool1/apps/mosquitto/* /mnt/SSD1/docker/data/mosquitto/config/conf
|
||||
chown -R mosquitt:mosquitt /mnt/SSD1/docker/data/mosquitto/
|
||||
chmod -R 700 /mnt/SSD1/docker/data/mosquitto/
|
||||
|
||||
Creating mosquitto user
|
||||
-----------------------
|
||||
# start mosquitto app with Dockge or issuing "docker compose up -d" in stacks/mosquitto folder
|
||||
# open shell on mosquitto
|
||||
docker exec -it mosquitto-mosquitto-1 sh
|
||||
# enter following line in mosquitto app shell, replacing <username> with the appropriate mosquitto username
|
||||
mosquitto_passwd -c /mosquitto/config/password.txt <username>
|
||||
# enter and confirm the password
|
||||
# exit mosquitto shell
|
||||
|
||||
Test mosquitto
|
||||
--------------
|
||||
# TODO
|
||||
|
||||
@ -28,7 +28,7 @@ services:
|
||||
# tcp services
|
||||
# -------------
|
||||
- "traefik.tcp.services.${APPLICATION_NAME}-svc.loadbalancer.server.port=${SERVICE_PORT}"
|
||||
- "traefik.tcp.services.${APPLICATION_NAME}-secure-svc.loadbalancer.server.port=${SECURE_SERVICE_PORT}"
|
||||
#- "traefik.tcp.services.${APPLICATION_NAME}-secure-svc.loadbalancer.server.port=${SECURE_SERVICE_PORT}"
|
||||
#
|
||||
# tcp routers
|
||||
# ------------
|
||||
@ -48,6 +48,7 @@ services:
|
||||
# passthrough tls
|
||||
- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.tls.passthrough=true"
|
||||
# generate certificates using following certresolver
|
||||
- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.tls.certresolver=sthomeresolver"
|
||||
- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.tls.certresolver=solver-dns"
|
||||
# assign svc target to routers
|
||||
- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.service=${APPLICATION_NAME}-secure-svc"
|
||||
#- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.service=${APPLICATION_NAME}-secure-svc"
|
||||
- "traefik.tcp.routers.${APPLICATION_NAME}-secure-rtr.service=${APPLICATION_NAME}-svc" # use same svc as non-secure router to avoid issues with certificates on mosquitto
|
||||
|
||||
@ -70,6 +70,10 @@ services:
|
||||
published: "8883"
|
||||
protocol: tcp
|
||||
mode: host
|
||||
- target: 9001 # mosquitto websocket port
|
||||
published: "9001"
|
||||
protocol: tcp
|
||||
mode: host
|
||||
- target: 19132 # minecraft-bedrock port
|
||||
published: "19132"
|
||||
protocol: udp
|
||||
|
||||
@ -52,45 +52,30 @@ entryPoints:
|
||||
- "10.0.0.0/24"
|
||||
- "192.168.2.0/24"
|
||||
- "172.16.0.0/12"
|
||||
|
||||
wireguard:
|
||||
address: ":51820/udp"
|
||||
|
||||
plex:
|
||||
address: ":32400"
|
||||
http:
|
||||
redirections:
|
||||
entrypoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
|
||||
metrics:
|
||||
address: ":8082"
|
||||
|
||||
ping:
|
||||
address: ":8083"
|
||||
|
||||
mariadb:
|
||||
address: ":8306"
|
||||
|
||||
mysql:
|
||||
address: ":9306"
|
||||
|
||||
mqtt:
|
||||
address: ":1883"
|
||||
|
||||
mqttsecure:
|
||||
address: ":8883"
|
||||
|
||||
mqttwebsocket:
|
||||
address: ":9001"
|
||||
mc-bedrock:
|
||||
address: ":19132/udp"
|
||||
|
||||
mc-java:
|
||||
address: ":25565/udp"
|
||||
|
||||
mc-java-rcon:
|
||||
address: ":25575"
|
||||
|
||||
sftp1:
|
||||
address: ":2022"
|
||||
sftp2:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user