Add initial CCTV to home assistant

Signed-off-by: main <magic_rb@redalder.org>
Signed-off-by: Magic_RB <magic_rb@redalder.org>
This commit is contained in:
main 2022-12-20 22:49:08 +01:00 committed by Magic_RB
parent 48b9a5c073
commit 5b85429327
9 changed files with 123 additions and 20 deletions

View file

@ -58,6 +58,13 @@
coreutils git ffmpeg bash runit coreutils git ffmpeg bash runit
]; ];
}; };
ensureSomething.create."media" = {
type = "directory";
mode = "755";
owner = "home-assistant";
dst = "/media";
persistent = true;
};
}; };
services.home-assistant = { services.home-assistant = {
@ -87,18 +94,40 @@
unit_system = "metric"; unit_system = "metric";
time_zone = "\${TIME_ZONE}"; time_zone = "\${TIME_ZONE}";
internal_url = "http://localhost:8123/"; internal_url = "http://localhost:8123/";
whitelist_external_dirs = [
"/mnt/cctv"
];
media_dirs = {
local = "/mnt/cctv";
};
}; };
automation = "!include automations.yaml"; automation = "!include automations.yaml";
"automation static" = [ "automation static" = [
(import ./home-assistant/automations/alarm/pending.nix) (import ./home-assistant/automations/alarm/pending.nix)
(import ./home-assistant/automations/alarm/disarmed.nix) (import ./home-assistant/automations/alarm/disarmed.nix)
(import ./home-assistant/automations/alarm/triggered.nix) (import ./home-assistant/automations/alarm/triggered.nix)
(import ./home-assistant/automations/alarm/retriggered.nix)
(import ./home-assistant/automations/alarm/motion-detected.nix) (import ./home-assistant/automations/alarm/motion-detected.nix)
(import ./home-assistant/automations/alarm/motion-detected-away.nix) (import ./home-assistant/automations/alarm/motion-detected-away.nix)
]; ];
alarm_control_panel = import ./home-assistant/alarm_control_panel.nix; alarm_control_panel = import ./home-assistant/alarm_control_panel.nix;
frontend.themes = frontend.themes =
{ }; { };
sensor = [
{
platform = "time_date";
display_options = [
"time"
"date"
"date_time"
"date_time_utc"
"date_time_iso"
"time_date"
"time_utc"
"beat"
];
}
];
}; };
package = package =
(pkgs.home-assistant.override (pkgs.home-assistant.override

View file

@ -4,9 +4,9 @@
code = "\${ALARM_CODE}"; code = "\${ALARM_CODE}";
code_arm_required = false; # Don't need code to arm. code_arm_required = false; # Don't need code to arm.
disarm_after_trigger = false; # Leave alarm armed after triggering. disarm_after_trigger = false; # Leave alarm armed after triggering.
arming_time = 30; # Time to leave the house after arming. arming_time = 0; # Time to leave the house after arming.
delay_time = 60; # Time to turn off after entering the house. delay_time = 30; # Time to turn off after entering the house.
trigger_time = 600; # How long the alarm goes off for. trigger_time = 3600; # How long the alarm goes off for.
disarmed = { disarmed = {
trigger_time = 0; # Can't be triggered when disarmed. trigger_time = 0; # Can't be triggered when disarmed.
}; };

View file

@ -13,6 +13,10 @@
{ {
data = { data = {
message = "Alarm Disarmed"; message = "Alarm Disarmed";
data = {
channel = "Motion";
importance = "high";
};
}; };
service = "notify.mobile_app_redrum"; service = "notify.mobile_app_redrum";
} }

View file

@ -2,11 +2,18 @@
alias = "Alarm - Trigger when motion detected - Away"; alias = "Alarm - Trigger when motion detected - Away";
id = "b16e988f-2ee0-4596-a14d-0fda1a95ac2d"; id = "b16e988f-2ee0-4596-a14d-0fda1a95ac2d";
trigger = { trigger = [
{
platform = "state"; platform = "state";
entity_id = "binary_sensor.motion_sensor_occupancy"; entity_id = "binary_sensor.motion_sensor_occupancy";
to = "on"; to = "on";
}; }
{
platform = "state";
entity_id = "binary_sensor.sensor_entry_door_contact";
to = "on";
}
];
condition = { condition = {
condition = "or"; condition = "or";
conditions = [ conditions = [

View file

@ -1,12 +1,14 @@
{ {
alias = "Alarm - Trigger when motion detected - Home/Away"; alias = "Alarm - Trigger when motion detected - Home";
id = "972bccd8-a68c-48fc-ac90-ebbeb87c64b9"; id = "972bccd8-a68c-48fc-ac90-ebbeb87c64b9";
trigger = { trigger = [
{
platform = "state"; platform = "state";
entity_id = "binary_sensor.sensor_entry_door_contact"; entity_id = "binary_sensor.sensor_entry_door_contact";
to = "on"; to = "on";
}; }
];
condition = { condition = {
condition = "or"; condition = "or";
conditions = [ conditions = [
@ -15,11 +17,6 @@
entity_id = "alarm_control_panel.home_alarm"; entity_id = "alarm_control_panel.home_alarm";
state = "armed_home"; state = "armed_home";
} }
{
condition = "state";
entity_id = "alarm_control_panel.home_alarm";
state = "armed_away";
}
]; ];
}; };
action = [ action = [

View file

@ -12,7 +12,13 @@
]; ];
action = [ action = [
{ {
data = { message = "Alarm Pending - Intruder Detected!"; }; data = {
message = "Alarm Pending - Intruder Detected!";
data = {
channel = "Motion";
importance = "high";
};
};
service = "notify.mobile_app_redrum"; service = "notify.mobile_app_redrum";
} }
]; ];

View file

@ -0,0 +1,35 @@
{
alias = "Alarm - ReTriggered";
id = "2f4942bc-3538-4888-bc52-84171e0b040f";
trigger = [
{
platform = "state";
entity_id = "binary_sensor.motion_sensor_occupancy";
to = "on";
}
];
condition = {
condition = "or";
conditions = [
{
condition = "state";
entity_id = "alarm_control_panel.home_alarm";
state = "triggered";
}
];
};
action = [
{
service = "camera.record";
target.entity_id = "camera.mirror_camera";
data = {
lookback = 30;
duration = 30;
filename = "/mnt/cctv/cctv-{{ states('sensor.date_time_iso') }}.mp4";
};
}
];
}

View file

@ -10,9 +10,22 @@
} }
]; ];
action = [ action = [
{
service = "camera.record";
target.entity_id = "camera.mirror_camera";
data = {
lookback = 30;
duration = 30;
filename = "/mnt/cctv/cctv-{{ states('sensor.date_time_iso') }}.mp4";
};
}
{ {
data = { data = {
message = "Alarm Triggered - Motion Detected!"; message = "Alarm Triggered - Motion Detected!";
data = {
channel = "Motion";
importance = "high";
};
}; };
service = "notify.mobile_app_redrum"; service = "notify.mobile_app_redrum";
} }

View file

@ -209,6 +209,12 @@ EOF
access_mode = "single-node-writer" access_mode = "single-node-writer"
} }
volume "cctv" {
type = "host"
read_only = false
source = "cctv"
}
service { service {
name = "home-assistant" name = "home-assistant"
port = "8123" port = "8123"
@ -284,6 +290,12 @@ EOF
read_only = false read_only = false
} }
volume_mount {
volume = "cctv"
destination = "/mnt/cctv"
read_only = false
}
template { template {
data = <<EOF data = <<EOF
{{ with secret "kv/data/home-assistant" }} {{ with secret "kv/data/home-assistant" }}