feat: Implement server-managed camera settings with new API endpoints, client-side application, and updated documentation.
This commit is contained in:
66
server.js
66
server.js
@@ -194,6 +194,72 @@ app.get('/stats/:cameraId', authenticate, (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Camera settings storage
|
||||
const SETTINGS_FILE = process.env.PICUPPER_SETTINGS_FILE || path.join(__dirname, 'camera-settings.json');
|
||||
|
||||
function loadCameraSettings() {
|
||||
try {
|
||||
if (fs.existsSync(SETTINGS_FILE)) {
|
||||
return JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8'));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error loading camera settings:', error.message);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
function saveCameraSettings(settings) {
|
||||
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
|
||||
}
|
||||
|
||||
// Get camera settings
|
||||
app.get('/settings/:cameraId', authenticate, (req, res) => {
|
||||
const { cameraId } = req.params;
|
||||
const allSettings = loadCameraSettings();
|
||||
const settings = allSettings[cameraId] || {};
|
||||
|
||||
res.json({
|
||||
cameraId,
|
||||
settings: {
|
||||
focus_automatic_continuous: settings.focus_automatic_continuous ?? 0,
|
||||
focus_absolute: settings.focus_absolute ?? 30,
|
||||
exposure_auto: settings.exposure_auto ?? 1,
|
||||
exposure_absolute: settings.exposure_absolute ?? 200,
|
||||
brightness: settings.brightness ?? 0,
|
||||
contrast: settings.contrast ?? 32,
|
||||
...settings
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Update camera settings
|
||||
app.put('/settings/:cameraId', authenticate, express.json(), (req, res) => {
|
||||
const { cameraId } = req.params;
|
||||
const newSettings = req.body;
|
||||
|
||||
if (!newSettings || typeof newSettings !== 'object') {
|
||||
return res.status(400).json({ error: 'Settings object required in request body' });
|
||||
}
|
||||
|
||||
const allSettings = loadCameraSettings();
|
||||
allSettings[cameraId] = {
|
||||
...(allSettings[cameraId] || {}),
|
||||
...newSettings,
|
||||
updatedAt: new Date().toISOString()
|
||||
};
|
||||
|
||||
try {
|
||||
saveCameraSettings(allSettings);
|
||||
res.json({
|
||||
success: true,
|
||||
cameraId,
|
||||
settings: allSettings[cameraId]
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: 'Failed to save settings', details: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
// Error handling middleware
|
||||
app.use((error, req, res, next) => {
|
||||
if (error instanceof multer.MulterError) {
|
||||
|
||||
Reference in New Issue
Block a user