48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
from gotify import Gotify
|
|
import paho.mqtt.client as mqtt
|
|
import json
|
|
import time
|
|
|
|
frigate_http="https"
|
|
frigate_url="example.com/"
|
|
# Must point to PATH api/events/ of frigate
|
|
frigate_api_path="snapshots/"
|
|
# Basic HTTP Auth Fomat (e.g username:password@)
|
|
frigate_auth="username:password@"
|
|
mqtt_ip="ip"
|
|
mqtt_port=1883
|
|
|
|
gotify = Gotify(
|
|
base_url="https://gotify.example.com/",
|
|
app_token="token",
|
|
)
|
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
print("Connected with result code "+str(rc))
|
|
client.subscribe("frigate/events")
|
|
|
|
def on_message(client, userdata, msg):
|
|
data = msg.payload
|
|
decoded_data = json.loads(data.decode())
|
|
if decoded_data["type"] == "new":
|
|
print(f'{time.ctime(1545925769.9618232)}: A {decoded_data["after"]["label"]} has been detected at {decoded_data["after"]["camera"]}. See at {frigate_http}://{frigate_url}api/events/{decoded_data["after"]["id"]}/snapshot.jpg')
|
|
frigate_title = f'A {decoded_data["after"]["label"]} has been detected at {decoded_data["after"]["camera"]}.'
|
|
frigate_msg = f'A {decoded_data["after"]["label"]} has been detected at {decoded_data["after"]["camera"]}. See at {frigate_http}://{frigate_url}api/events/{decoded_data["after"]["id"]}/snapshot.jpg'
|
|
frigate_extras = {
|
|
"client::notification": {
|
|
"bigImageUrl": f'{frigate_http}://{frigate_url}{frigate_api_path}{decoded_data["after"]["id"]}/snapshot.jpg',
|
|
"click": { "url": f'{frigate_http}://{frigate_auth}{frigate_url}events?camera={decoded_data["after"]["camera"]}&label={decoded_data["after"]["label"]}' }
|
|
}
|
|
}
|
|
gotify.create_message(frigate_msg,frigate_extras,title=frigate_title,priority=7)
|
|
print(frigate_extras)
|
|
|
|
|
|
client = mqtt.Client()
|
|
client.on_connect = on_connect
|
|
client.on_message = on_message
|
|
|
|
client.connect(mqtt_ip, mqtt_port, 60)
|
|
|
|
client.loop_forever()
|