Simplify home view and drop motion detection

- Top nav tabs (Home/Media/Cameras/Settings) replace the right-side button cluster
- Home view now shows calendar 90% / todo 10% vertically; lights, locks,
  alarm, thermostats removed from the dashboard since the photo frame now
  owns the idle space and the nav covers the remaining sections
- Motion detection deleted: the go2rtc-based Kitchen_Panel poll was only
  there to wake the screen before idle timeout, which photo-frame exit on
  touch replaces
This commit is contained in:
root
2026-04-14 13:27:20 -05:00
parent 5fe7bc71ef
commit 1dd32c6afe
6 changed files with 82 additions and 163 deletions

View File

@@ -4,14 +4,12 @@ import * as fs from 'fs';
import { ScreenManager } from './services/ScreenManager';
import { PresenceDetector } from './services/PresenceDetector';
import { FrigateStreamer } from './services/FrigateStreamer';
import { MotionDetector } from './services/MotionDetector';
import { PhotoManager } from './services/PhotoManager';
let mainWindow: BrowserWindow | null = null;
let screenManager: ScreenManager | null = null;
let presenceDetector: PresenceDetector | null = null;
let frigateStreamer: FrigateStreamer | null = null;
let motionDetector: MotionDetector | null = null;
let photoManager: PhotoManager | null = null;
let powerSaveBlockerId: number | null = null;
@@ -63,23 +61,6 @@ function createWindow(): void {
// Initialize services
screenManager = new ScreenManager(mainWindow);
// Initialize motion detector (runs in main process, not throttled by browser)
// Uses file size comparison which is more reliable for JPEG streams
motionDetector = new MotionDetector({
go2rtcUrl: 'http://192.168.1.241:1985',
cameraName: 'Kitchen_Panel',
sensitivityThreshold: 5, // % file size change to trigger (5% = significant motion)
checkIntervalMs: 2000, // Check every 2 seconds for responsiveness
});
motionDetector.on('motion', () => {
console.log('MotionDetector: Motion detected, waking screen');
screenManager?.wakeScreen();
mainWindow?.webContents.send('motion:detected');
});
motionDetector.start();
// Photo frame slideshow source
photoManager = new PhotoManager(resolvePhotosDir());
console.log(`PhotoManager: watching ${photoManager.getDir()}`);
@@ -243,7 +224,6 @@ app.on('window-all-closed', () => {
}
presenceDetector?.stop();
frigateStreamer?.stop();
motionDetector?.stop();
if (process.platform !== 'darwin') {
app.quit();

View File

@@ -17,9 +17,6 @@ export interface ElectronAPI {
startStream: (rtspUrl: string) => Promise<boolean>;
stopStream: () => Promise<boolean>;
};
motion: {
onDetected: (callback: () => void) => () => void;
};
app: {
quit: () => void;
toggleFullscreen: () => void;
@@ -61,13 +58,6 @@ const electronAPI: ElectronAPI = {
startStream: (rtspUrl: string) => ipcRenderer.invoke('frigate:startStream', rtspUrl),
stopStream: () => ipcRenderer.invoke('frigate:stopStream'),
},
motion: {
onDetected: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('motion:detected', handler);
return () => ipcRenderer.removeListener('motion:detected', handler);
},
},
app: {
quit: () => ipcRenderer.invoke('app:quit'),
toggleFullscreen: () => ipcRenderer.invoke('app:toggleFullscreen'),