#!/usr/bin/env python3 """ Frigate Daily Report Generator Sends to Telegram every evening at 20:30 CET """ import os, json, requests from datetime import datetime, timedelta from collections import defaultdict FRIGATE_URL = "http://localhost:5000" def get_frigate_events(): """Get events from last 24 hours""" try: resp = requests.get(f"{FRIGATE_URL}/api/events", timeout=5) events = resp.json() # Filter for last 24h now = datetime.now().timestamp() yesterday = now - (24 * 3600) recent = [e for e in events if e.get('start_time', 0) > yesterday] return recent except Exception as e: print(f"Error fetching events: {e}") return [] def generate_report(): """Generate Frigate daily summary""" events = get_frigate_events() if not events: return "šŸŽ„ **Frigate Daily Report** — Keine Events heute\n\nStatus: āœ… Alle Kameras aktiv\nEvents: 0" # Group by camera & label by_camera = defaultdict(lambda: defaultdict(int)) by_label = defaultdict(int) people = set() for event in events: camera = event.get('camera', 'Unknown') label = event.get('label', 'Unknown') sub_label = event.get('sub_label', None) by_camera[camera][label] += 1 by_label[label] += 1 if label == 'person' and sub_label: people.add(sub_label) # Format report timestamp = datetime.now().strftime('%Y-%m-%d %H:%M CET') report = f"""šŸŽ„ **Frigate Daily Report** — {timestamp} šŸ“Š **ZUSAMMENFASSUNG** • Gesamt Events: {len(events)} • Detektierte Personen: {len(people)} • Kameras aktiv: {len(by_camera)} šŸ‘„ **Erkannte Personen** """ for person in sorted(people): report += f" • {person}\n" report += f"\nšŸ“¹ **Nach Kamera**\n" for camera in sorted(by_camera.keys()): events_count = sum(by_camera[camera].values()) labels = ", ".join(by_camera[camera].keys()) report += f" 🟢 {camera}: {events_count} Events ({labels})\n" report += f"\nšŸ·ļø **Nach Objekttyp**\n" for label in sorted(by_label.keys()): count = by_label[label] report += f" • {label.upper()}: {count}\n" report += f"\nāœ… **Status**: Alle Kameras aktiv\n" report += f"*Report: {datetime.now().strftime('%H:%M:%S UTC')}*" return report if __name__ == "__main__": report = generate_report() print(report)