Added sunset reset feature
This commit is contained in:
parent
98a66a1e99
commit
995e81c549
|
@ -14,7 +14,7 @@ pipeline {
|
|||
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: 'start.yaml'
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ cameras:
|
|||
- 242,534,609,527,534,848,89,836 # Plants on patio
|
||||
- 681,528,832,522,876,834,635,829 # Logs on patio
|
||||
family_room:
|
||||
enabled: true
|
||||
enabled: false
|
||||
ffmpeg:
|
||||
inputs:
|
||||
- path: 'rtsp://{FRIGATE_FAMILY_ROOM_RTSP_USERNAME}:{FRIGATE_FAMILY_ROOM_RTSP_PASSWORD}@192.168.0.104:554/live/ch0'
|
||||
|
|
|
@ -82,6 +82,7 @@ services:
|
|||
environment:
|
||||
MQTT_USERNAME: frigate
|
||||
MQTT_PASSWORD: ${MQTT_PASSWORD}
|
||||
IPGEOLOCATION_API_KEY: ${IPGEOLOCATION_API_KEY}
|
||||
volumes:
|
||||
- type: bind
|
||||
source: /etc/localtime
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
vars_prompt:
|
||||
- name: mqtt_password
|
||||
prompt: Enter password for MQTT user frigate
|
||||
- name: ipgeolocation_api_key
|
||||
prompt: Enter API key for IPGeolocation
|
||||
- name: garage_rtsp_password
|
||||
prompt: Enter password for garage camera RTSP stream user motion
|
||||
- name: front_door_rtsp_password
|
||||
|
@ -114,6 +116,8 @@
|
|||
frigate_config:
|
||||
mqtt:
|
||||
password: '{{mqtt_password}}'
|
||||
ipgeolocation:
|
||||
api_key: '{{ipgeolocation_api_key}}'
|
||||
rtsp:
|
||||
garage:
|
||||
password: '{{garage_rtsp_password}}'
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
- name: Docker Compose up Frigate
|
||||
environment:
|
||||
MQTT_PASSWORD: '{{frigate_config.mqtt.password}}'
|
||||
IPGEOLOCATION_API_KEY: '{{frigate_config.ipgeolocation.api_key}}'
|
||||
FRIGATE_GARAGE_RTSP_PASSWORD: '{{frigate_config.rtsp.garage.password}}'
|
||||
FRIGATE_FRONT_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.front_door.password}}'
|
||||
FRIGATE_BACK_DOOR_RTSP_PASSWORD: '{{frigate_config.rtsp.back_door.password}}'
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
flask==2.3.2
|
||||
paho-mqtt==1.6.1
|
||||
requests==2.31.0
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
import os
|
||||
import sys
|
||||
import json
|
||||
from time import sleep
|
||||
from threading import Thread
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import requests
|
||||
from flask import Blueprint, request, jsonify
|
||||
import paho.mqtt.publish as mqtt_publish
|
||||
|
||||
|
@ -9,6 +13,33 @@ import paho.mqtt.publish as mqtt_publish
|
|||
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:
|
||||
sleep(delay)
|
||||
|
||||
|
@ -35,3 +66,7 @@ def camera_detect_POST(camera):
|
|||
return jsonify({
|
||||
'status': 'success'
|
||||
}), 200
|
||||
|
||||
|
||||
sunset_reset_thread = Thread(target=reset_all_camera_detection_at_sunset, args=())
|
||||
sunset_reset_thread.start()
|
||||
|
|
Loading…
Reference in New Issue