Person detection via direct MQTT instead of HA entities

- Electron main process subscribes to Frigate's MQTT topics
  (frigate/<camera>/person and frigate/events) directly via mqtt.js,
  bypassing the broken HA MQTT integration
- Watched cameras: Front_Porch, FPE, Porch_Downstairs, Driveway_door
- On person detection, exits photo-frame idle and shows full-screen
  camera feed for 30 seconds
- Removed HA entity-based person detection code (entityToCameraName,
  personDetectionEntities config dependency)
- Deleted unused useFrigateDetection HTTP polling hook (superseded)
This commit is contained in:
root
2026-04-16 21:46:28 -05:00
parent 55dd117520
commit 3b38a78295
8 changed files with 8301 additions and 43 deletions

View File

@@ -6,12 +6,14 @@ import { ScreenManager } from './services/ScreenManager';
import { PresenceDetector } from './services/PresenceDetector';
import { FrigateStreamer } from './services/FrigateStreamer';
import { PhotoManager } from './services/PhotoManager';
import { FrigateDetector } from './services/FrigateDetector';
let mainWindow: BrowserWindow | null = null;
let screenManager: ScreenManager | null = null;
let presenceDetector: PresenceDetector | null = null;
let frigateStreamer: FrigateStreamer | null = null;
let photoManager: PhotoManager | null = null;
let frigateDetector: FrigateDetector | null = null;
let powerSaveBlockerId: number | null = null;
// Photos directory: env var PHOTOS_PATH wins, else fall back to ~/Pictures/dashboard
@@ -66,6 +68,20 @@ function createWindow(): void {
photoManager = new PhotoManager(resolvePhotosDir());
console.log(`PhotoManager: watching ${photoManager.getDir()}`);
// Frigate person detection via MQTT (bypasses HA entities)
frigateDetector = new FrigateDetector({
mqttUrl: 'mqtt://192.168.1.50:1883',
mqttUser: 'mqtt',
mqttPassword: '11xpfcryan',
topicPrefix: 'frigate',
cameras: ['Front_Porch', 'FPE', 'Porch_Downstairs', 'Driveway_door'],
});
frigateDetector.on('personDetected', (camera: string) => {
console.log(`FrigateDetector: person on ${camera}`);
mainWindow?.webContents.send('frigate:personDetected', camera);
});
frigateDetector.start();
// Handle window close
mainWindow.on('closed', () => {
mainWindow = null;
@@ -225,6 +241,7 @@ app.on('window-all-closed', () => {
}
presenceDetector?.stop();
frigateStreamer?.stop();
frigateDetector?.stop();
if (process.platform !== 'darwin') {
app.quit();