Added sunset reset feature

This commit is contained in:
Ashish D'Souza 2023-07-11 07:32:12 -04:00
parent 98a66a1e99
commit 995e81c549
7 changed files with 44 additions and 2 deletions

2
Jenkinsfile vendored
View File

@ -14,7 +14,7 @@ pipeline {
frigate_config = readJSON file: 'frigate_config.json' frigate_config = readJSON file: 'frigate_config.json'
} }
ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, extras: "--extra-vars 'mqtt_password=\"${frigate_config.mqtt.password}\" garage_rtsp_password=\"${frigate_config.rtsp.garage.password}\" front_door_rtsp_password=\"${frigate_config.rtsp.front_door.password}\" back_door_rtsp_password=\"${frigate_config.rtsp.back_door.password}\" family_room_rtsp_password=\"${frigate_config.rtsp.family_room.password}\"'", playbook: 'install.yaml' ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, extras: "--extra-vars 'mqtt_password=\"${frigate_config.mqtt.password}\" ipgeolocation_api_key=\"${frigate_config.ipgeolocation.api_key}\" garage_rtsp_password=\"${frigate_config.rtsp.garage.password}\" front_door_rtsp_password=\"${frigate_config.rtsp.front_door.password}\" back_door_rtsp_password=\"${frigate_config.rtsp.back_door.password}\" family_room_rtsp_password=\"${frigate_config.rtsp.family_room.password}\"'", playbook: 'install.yaml'
ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, playbook: 'stop.yaml' ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, playbook: 'stop.yaml'
ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, playbook: 'start.yaml' ansiblePlaybook credentialsId: 'rivendell-ssh-key', disableHostKeyChecking: true, playbook: 'start.yaml'
} }

View File

@ -72,7 +72,7 @@ cameras:
- 242,534,609,527,534,848,89,836 # Plants on patio - 242,534,609,527,534,848,89,836 # Plants on patio
- 681,528,832,522,876,834,635,829 # Logs on patio - 681,528,832,522,876,834,635,829 # Logs on patio
family_room: family_room:
enabled: true enabled: false
ffmpeg: ffmpeg:
inputs: inputs:
- path: 'rtsp://{FRIGATE_FAMILY_ROOM_RTSP_USERNAME}:{FRIGATE_FAMILY_ROOM_RTSP_PASSWORD}@192.168.0.104:554/live/ch0' - path: 'rtsp://{FRIGATE_FAMILY_ROOM_RTSP_USERNAME}:{FRIGATE_FAMILY_ROOM_RTSP_PASSWORD}@192.168.0.104:554/live/ch0'

View File

@ -82,6 +82,7 @@ services:
environment: environment:
MQTT_USERNAME: frigate MQTT_USERNAME: frigate
MQTT_PASSWORD: ${MQTT_PASSWORD} MQTT_PASSWORD: ${MQTT_PASSWORD}
IPGEOLOCATION_API_KEY: ${IPGEOLOCATION_API_KEY}
volumes: volumes:
- type: bind - type: bind
source: /etc/localtime source: /etc/localtime

View File

@ -3,6 +3,8 @@
vars_prompt: vars_prompt:
- name: mqtt_password - name: mqtt_password
prompt: Enter password for MQTT user frigate prompt: Enter password for MQTT user frigate
- name: ipgeolocation_api_key
prompt: Enter API key for IPGeolocation
- name: garage_rtsp_password - name: garage_rtsp_password
prompt: Enter password for garage camera RTSP stream user motion prompt: Enter password for garage camera RTSP stream user motion
- name: front_door_rtsp_password - name: front_door_rtsp_password
@ -114,6 +116,8 @@
frigate_config: frigate_config:
mqtt: mqtt:
password: '{{mqtt_password}}' password: '{{mqtt_password}}'
ipgeolocation:
api_key: '{{ipgeolocation_api_key}}'
rtsp: rtsp:
garage: garage:
password: '{{garage_rtsp_password}}' password: '{{garage_rtsp_password}}'

View File

@ -36,6 +36,7 @@
- name: Docker Compose up Frigate - name: Docker Compose up Frigate
environment: environment:
MQTT_PASSWORD: '{{frigate_config.mqtt.password}}' MQTT_PASSWORD: '{{frigate_config.mqtt.password}}'
IPGEOLOCATION_API_KEY: '{{frigate_config.ipgeolocation.api_key}}'
FRIGATE_GARAGE_RTSP_PASSWORD: '{{frigate_config.rtsp.garage.password}}' FRIGATE_GARAGE_RTSP_PASSWORD: '{{frigate_config.rtsp.garage.password}}'
FRIGATE_FRONT_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.front_door.password}}' FRIGATE_FRONT_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.front_door.password}}'
FRIGATE_BACK_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.back_door.password}}' FRIGATE_BACK_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.back_door.password}}'

View File

@ -1,2 +1,3 @@
flask==2.3.2 flask==2.3.2
paho-mqtt==1.6.1 paho-mqtt==1.6.1
requests==2.31.0

View File

@ -1,7 +1,11 @@
import os import os
import sys
import json
from time import sleep from time import sleep
from threading import Thread from threading import Thread
from datetime import datetime, timedelta
import requests
from flask import Blueprint, request, jsonify from flask import Blueprint, request, jsonify
import paho.mqtt.publish as mqtt_publish import paho.mqtt.publish as mqtt_publish
@ -9,6 +13,33 @@ import paho.mqtt.publish as mqtt_publish
blueprint = Blueprint('detection', __name__) blueprint = Blueprint('detection', __name__)
def get_sunset() -> datetime:
IPGEOLOCATION_API_KEY = os.environ['IPGEOLOCATION_API_KEY']
ipgeolocation_api_response = requests.get(f'https://api.ipgeolocation.io/astronomy?apiKey={IPGEOLOCATION_API_KEY}&location=Winter+Haven,+FL')
ipgeolocation_api_response.raise_for_status()
astronomical_json = json.loads(ipgeolocation_api_response.content)
sunset_time = datetime.strptime(astronomical_json['sunset'], '%H:%M').time()
sunset_date = datetime.now().date()
if sunset_time < datetime.now().time():
# Sunset has already passed today
sunset_date += timedelta(days=1)
return datetime.combine(sunset_date, sunset_time)
def reset_all_camera_detection_at_sunset():
while True:
sunset = get_sunset()
print(f'Waiting until {sunset} to reset detection for all cameras...', file=sys.stderr)
seconds_until_sunset = (sunset - datetime.now()).total_seconds()
sleep(seconds_until_sunset)
set_camera_detection('front_door', True)
set_camera_detection('back_door', True)
set_camera_detection('garage', True)
set_camera_detection('family_room', True)
def set_camera_detection(camera: str, value: bool, delay: int = 0) -> None: def set_camera_detection(camera: str, value: bool, delay: int = 0) -> None:
sleep(delay) sleep(delay)
@ -35,3 +66,7 @@ def camera_detect_POST(camera):
return jsonify({ return jsonify({
'status': 'success' 'status': 'success'
}), 200 }), 200
sunset_reset_thread = Thread(target=reset_all_camera_detection_at_sunset, args=())
sunset_reset_thread.start()