Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) Safe-mode: OFF (not secure) /usr/local/lib/node_modules/homebridge-camera-ui/services/config/ drwxr-xr-x | |
| Viewing file: Select action/file-type: 'use-strict';
const ffmpegPath = require('ffmpeg-for-homebridge');
const fs = require('fs-extra');
const config = require('./config.service');
const logger = require('../logger/logger.service');
class ConfigSetup {
constructor() {
this.ui = this._ui();
this.options = this._options();
this.ssl = this._ssl();
this.mqtt = this._mqtt();
this.mqttConfigs = this._mqttConfigs();
this.http = this._http();
this.cameras = this._cameras();
return {
...this.ui,
ui: config.ui,
options: this.options,
ssl: this.ssl,
http: this.http,
mqtt: this.mqtt,
mqttConfigs: this.mqttConfigs,
cameras: this.cameras,
};
}
_ui() {
const ui = {
debug: config.plugin.debug,
port: config.plugin.port || 8181,
language: config.plugin.language || 'auto',
theme: config.plugin.theme || 'auto',
atHomeSwitch: config.plugin.atHomeSwitch || false,
};
return ui;
}
_options() {
const options = {
videoProcessor:
config.plugin.options && config.plugin.options.videoProcessor
? config.plugin.options.videoProcessor
: ffmpegPath || 'ffmpeg',
};
return options;
}
_ssl() {
if (config.plugin.ssl && config.plugin.ssl.active && config.plugin.ssl.key && config.plugin.ssl.cert) {
try {
const ssl = {
key: fs.readFileSync(config.plugin.ssl.key, 'utf8'),
cert: fs.readFileSync(config.plugin.ssl.cert, 'utf8'),
};
return ssl;
} catch (error) {
logger.warn('WARNING: Could not read SSL Cert/Key');
logger.debug(error);
}
}
return false;
}
_mqtt() {
if (config.plugin.mqtt && config.plugin.mqtt.active && config.plugin.mqtt.host) {
const mqtt = {
tls: config.plugin.mqtt.tls || false,
host: config.plugin.mqtt.host,
port: config.plugin.mqtt.port || 1883,
username: config.plugin.mqtt.username || '',
password: config.plugin.mqtt.password || '',
};
return mqtt;
}
return false;
}
_mqttConfigs() {
const mqttConfigs = new Map();
const cameras = this._cameras();
for (const camera of cameras) {
if (camera.mqtt && this.mqtt) {
//setup mqtt topics
if (camera.mqtt.motionTopic) {
const mqttOptions = {
motionTopic: camera.mqtt.motionTopic,
motionMessage: camera.mqtt.motionMessage || 'ON',
motionResetMessage: camera.mqtt.motionResetMessage || 'OFF',
camera: camera.name,
motion: true,
};
mqttConfigs.set(mqttOptions.motionTopic, mqttOptions);
}
if (camera.mqtt.motionResetTopic && camera.mqtt.motionResetTopic !== camera.mqtt.motionTopic) {
const mqttOptions = {
motionResetTopic: camera.mqtt.motionResetTopic,
motionResetMessage: camera.mqtt.motionResetMessage || 'OFF',
camera: camera.name,
motion: true,
reset: true,
};
mqttConfigs.set(mqttOptions.motionResetTopic, mqttOptions);
}
if (
camera.mqtt.doorbellTopic &&
camera.mqtt.doorbellTopic !== camera.mqtt.motionTopic &&
camera.mqtt.doorbellTopic !== camera.mqtt.motionResetTopic
) {
const mqttOptions = {
doorbellTopic: camera.mqtt.doorbellTopic,
doorbellMessage: camera.mqtt.doorbellMessage || 'ON',
camera: camera.name,
doorbell: true,
};
mqttConfigs.set(mqttOptions.doorbellTopic, mqttOptions);
}
}
}
return mqttConfigs;
}
_http() {
if (config.plugin.http && config.plugin.http.active) {
const http = {
port: config.plugin.http.port || 2525,
localhttp: config.plugin.http.localhttp,
};
return http;
}
return false;
}
_cameras() {
const cameras = config.plugin.cameras || [];
return cameras
.filter((camera) => camera.name && camera.videoConfig && camera.videoConfig.source)
.map((camera) => {
const sourceArguments = camera.videoConfig.source.split(/\s+/);
if (!sourceArguments.includes('-i')) {
logger.warn('The source for this camera is missing "-i", it is likely misconfigured.', camera.name);
camera.videoConfig.source = false;
} /* else if (!sourceArguments.includes('-stimeout')) {
camera.videoConfig.source = camera.videoConfig.source.replace('-i', '-stimeout 10000000 -i');
}*/
if (camera.videoConfig.stimeout > 0 && !sourceArguments.includes('-stimeout')) {
camera.videoConfig.source = camera.videoConfig.source.replace(
'-i',
`-stimeout ${camera.videoConfig.stimeout * 10000000} -i` //-stimeout is in micro seconds
);
}
if (camera.videoConfig.stillImageSource) {
const stillArguments = camera.videoConfig.stillImageSource.split(/\s+/);
if (!stillArguments.includes('-i')) {
logger.warn(
'The stillImageSource for this camera is missing "-i", it is likely misconfigured.',
camera.name
);
camera.videoConfig.stillImageSource = false;
}
}
if (camera.rekognition) {
camera.rekognition = {
active: camera.rekognition.active || false,
confidence: camera.rekognition.confidence > 0 ? camera.rekognition.confidence : 90,
labels:
camera.rekognition.labels && camera.rekognition.labels.length > 0
? camera.rekognition.labels.map((label) => label && label.toLowerCase()).filter((label) => label)
: ['human', 'person', 'face'],
};
}
return camera;
})
.filter((camera) => camera.videoConfig.source);
}
}
module.exports = ConfigSetup;
|
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0103 ]-- |