{ config, ... }: { age.secrets."camera-ulfried-url".file = ../../secrets/camera-ulfried-url.age; age.secrets."camera-ulfried-sub-url".file = ../../secrets/camera-ulfried-sub-url.age; age.secrets."camera-gnisbert-url".file = ../../secrets/camera-gnisbert-url.age; age.secrets."camera-gnisbert-sub-url".file = ../../secrets/camera-gnisbert-sub-url.age; age.secrets."camera-taubis-url".file = ../../secrets/camera-taubis-url.age; age.secrets."camera-taubis-sub-url".file = ../../secrets/camera-taubis-sub-url.age; age.secrets."camera-foeff-url".file = ../../secrets/camera-foeff-url.age; age.secrets."camera-foeff-sub-url".file = ../../secrets/camera-foeff-sub-url.age; systemd.services.go2rtc.serviceConfig.LoadCredential = [ "ULFRIED_URL:${config.age.secrets."camera-ulfried-url".path}" "ULFRIED_SUB_URL:${config.age.secrets."camera-ulfried-sub-url".path}" "GNISBERT_URL:${config.age.secrets."camera-gnisbert-url".path}" "GNISBERT_SUB_URL:${config.age.secrets."camera-gnisbert-sub-url".path}" "TAUBIS_URL:${config.age.secrets."camera-taubis-url".path}" "TAUBIS_SUB_URL:${config.age.secrets."camera-taubis-sub-url".path}" "FOEFF_URL:${config.age.secrets."camera-foeff-url".path}" "FOEFF_SUB_URL:${config.age.secrets."camera-foeff-sub-url".path}" ]; services.go2rtc.enable = true; services.go2rtc.settings = { rtsp.listen = ":8554"; webrtc.listen = ":8555"; }; services.go2rtc.settings.streams = { "ulfried" = [ "\${ULFRIED_URL}" "ffmpeg:ulfried#audio=opus#audio=aac" ]; "ulfried_sub" = [ "\${ULFRIED_SUB_URL}" "ffmpeg:ulfried_sub#audio=opus#audio=aac" ]; "gnisbert" = [ "\${GNISBERT_URL}" "ffmpeg:gnisbert#audio=opus#audio=aac" ]; "gnisbert_sub" = [ "\${GNISBERT_SUB_URL}" "ffmpeg:gnisbert_sub#audio=opus#audio=aac" ]; "taubis" = [ "\${TAUBIS_URL}" "ffmpeg:taubis#audio=opus#audio=aac" ]; "taubis_sub" = [ "\${TAUBIS_SUB_URL}" "ffmpeg:taubis_sub#audio=opus#audio=aac" ]; "foeff" = [ "\${FOEFF_URL}" "ffmpeg:foeff#audio=opus#audio=aac#video=copy" ]; "foeff_sub" = [ "\${FOEFF_SUB_URL}" "ffmpeg:foeff_sub#audio=opus#audio=aac#video=copy" ]; }; services.frigate.enable = true; services.frigate.hostname = "kameramann.lan.baubs.net"; services.frigate.settings.go2rtc = { streams = { "ulfried" = []; "ulfried_sub" = []; "taubis" = []; "taubis_sub" = []; "foeff" = []; "foeff_sub" = []; "gnisbert" = []; "gnisbert_sub" = []; };}; services.frigate.settings.detect = { enabled = true; }; services.frigate.settings.objects = { track = ["person" "bird" "car"]; }; services.frigate.settings.classification.bird.enabled = true; services.frigate.settings.cameras = { "ulfried" = { record = { enabled = true; continuous.days = 0; alerts.retain = { days = 30; mode = "motion"; }; }; ffmpeg.inputs = [{ path = "rtsp://127.0.0.1:8554/ulfried?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "record" ]; } { path = "rtsp://127.0.0.1:8554/ulfried_sub?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "detect" "audio" ]; }]; }; "foeff" = { record = { enabled = true; continuous.days = 0; alerts.retain = { days = 30; mode = "motion"; }; }; ffmpeg.inputs = [ { path = "rtsp://127.0.0.1:8554/foeff?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "record" ]; } { path = "rtsp://127.0.0.1:8554/foeff_sub?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "detect" "audio" ]; } ]; }; "taubis" = { detect.enabled = true; record = { enabled = true; continuous.days = 1; detections.retain.days = 7; }; ffmpeg.inputs = [ { path = "rtsp://127.0.0.1:8554/taubis?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "record" ]; } { path = "rtsp://127.0.0.1:8554/taubis_sub?timeout=30"; input_args = "preset-rtsp-generic"; roles = [ "detect" "audio" ]; } ]; }; }; networking.firewall.allowedTCPPorts = [ 5000 1984 80 8555 ]; networking.firewall.allowedUDPPorts = [ 8555 ]; }