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'
|
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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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}}'
|
||||||
|
|
|
@ -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}}'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue