camImagesProcess
|
Сортировка изображений с веб-камеры
$src='/var/www/media/webcam'; // откуда брать фотографии
clearTimeout('camImagesTimer');
$base_path='/var/www/dvr/unsorted';
$dst='/var/www/dvr/sorted';
safe_exec('chown pi:pi -Rf '.$base_path.'/*');
safe_exec('chmod 0777 -f '.$base_path.'/*');
setTimeout('camImagesTimer','runScript("camImagesProcess");',10*60);
if (is_dir($base_path)) {
if ($dir = @opendir($base_path)) {
while (($file = readdir($dir)) !== false) {
if ($file!='.' && $file!='..' && is_dir($base_path.'/'.$file)) {
$src=$base_path.'/'.$file;
echo $src.'<br/>';
processLine($src." -> ".$dst."/%Y/%m - %F/%d/".$file);
}
}
closedir($dir);
}
} else {
echo "Cannot open $base_path";
}
processLine("CLEAR ".$dst." 30 DAYS OLD");
|
checkFreeSpace
|
Проверка свободного места на диске
$max_usage=90; //%
$output=array();
exec('df',$output);
//var_dump($output);
$problems=0;
$problems_details='';
foreach($output as $line) {
if (preg_match('/(\d+)% (\/.+)/',$line,$m))
$proc=$m[1];
$path=$m[2];
if ($proc>$max_usage) {
$problems++;
$problems_details.="$path: $proc; ";
}
//echo "$path: $proc%<br/>";
}
sg("ThisComputer.SpaceProblems",$problems);
sg("ThisComputer.SpaceProblems_Details",$problems_details);
setTimeOut('checkFreeSpace','runScript("checkFreeSpace");',5*60);
|
rebootSystem
|
Перезапуск системы
$filename = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
say("Подготовка к перезагрузке",2);
setTimeout("shutdownTimer","safe_exec('shutdown -r now');",15);
|
shutDown
|
Выключение системы
$filename = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
say("Подготовка к выключению",2);
setTimeout("shutdownTimer","safe_exec('shutdown -h now');",15);
|
Demo01
|
Демонстрация MajorDoMo часть 1 Стартовые диалоги
// say('Часть 1', 2);
//Взято из Демо1 стр.1-13
//определяет утро, день, вечер, ночь.
if (timeBetween('04:00', '09:00')) {
say('Доброе утро', 2);
}
if (timeBetween('09:00', '16:00')) {
say('Добрый день', 2);
}
if (timeBetween('16:00', '23:00')) {
say('Добрый вечер', 2);
}
if (timeBetween('23:00', '04:00')) {
say('Доброй ночи', 2);
}
setTimeOut('DemoTimer',"runScript('Demo02');",3);
|
Demo02
|
Диалоги
// say('Часть 2', 2);
//Взято из Демо1 стр.14-24
say('Меня зовут Алиса. Я ассистент умного дома Мажордом ', 2);
Sleep(1);
say('Я живу в Мажордоме. Я не та Алиса, которая живёт в Яндэксе ', 2);
Sleep(1);
say('Это моя тёзка. Прошу прощения за своё произношение, у меня ударения хромают и со слухом проблеммы. Хозяим никак микрофон не купит. Поэтому ваших команд я не слышу ', 2);
Sleep(1);
say('Но я рада, что выбрали меня, а не какую нибудь западную СИРИ ', 2);
Sleep(1);
say('Сейчас я расскажу вам о том что я знаю и умею ', 2);
Sleep(1);
//say('Я могу управлять некоторыми приборами и освещением ', 2);
setTimeOut('DemoTimer',"runScript('Demo03');",40);
|
Demo03
|
датчики
// say('Часть 3', 2);
//Взято из Демо1 стр.46-59
//Инфа с датчиков
say('Я могу читать информацию с датчиков в помещении ', 2);
//Sleep(6);
say('Сейчас температура в районе окон ' . (getGlobal("Sensor_temp02.value")), 2);
//Sleep(5);
say('Влажность в районе окон ' . (getGlobal("Sensor_humidity01.value")), 2);
//Sleep(7);
//Sleep(12);
say('Уровень шума в помещении ' . (getGlobal("Sensor_state01.value")), 2);
//Sleep(7);
say('Освещенность на улице ' . (getGlobal("Sensor_state02.value")), 2);
//Sleep(8);
say('Качество воздуха в комнате ' . (getGlobal("Sensor_state03.value")), 2);
//Sleep(6);
//Sleep(1);
setTimeOut('DemoTimer',"runScript('Demo04');",33);
|
Demo04
|
Датчики открытия дверей
// say('Часть 4', 2);
//Взято из Демо1 стр.60-83
//Датчики открытия дверей
say('Я вижу два датчика открытия дверей. Датчик открытия двери на балкон ', 2);
//Sleep(1);
if (getGlobal("Openclose01.status") == 0) {
say('Дверь на балкон закрыта ', 2);
}
//Sleep(1);
if (getGlobal("Openclose01.status") == 1) {
say('Дверь на балкон открыта ', 2);
}
//Sleep(1);
say('И датчик открытия двери в ванную ', 2);
//Sleep(4);
if (getGlobal("Openclose02.status") == 0) {
say('Дверь ванной закрыта ', 2);
}
//Sleep(1);
if (getGlobal("Openclose02.status") == 1) {
say('Дверь ванной открыта ', 2);
}
//Sleep(1);
say('Кстати, по этому датчику при открытии двери, включается свет в ванной. Не пугайтесь. Отключать свет в ванной нужно в ручную ', 2);
//Sleep(1);
setTimeOut('DemoTimer',"runScript('Demo05');",33);
|
Demo05
|
Датчики движения
// say('Часть 5', 2);
//Взято из Демо1 стр.84-121
//Датчики движения
say('Ещё я вижу два датчика движения. Датчик движения на кухне ', 2);
//Sleep(1);
if (getGlobal("Motion03.status") == 0) {
say('Движение на кухне не обнаружено ', 2);
}
//Sleep(1);
if (getGlobal("Motion03.status") == 1) {
say('Обнаружено движение на кухне ', 2);
}
//Sleep(1);
say('По этому датчику при обнаружении движения, включается свет на кухне. Отключать свет на кухне нужно в ручную ', 2);
//Sleep(1);
say('И датчик движения в прихожей ', 2);
//Sleep(1);
if (getGlobal("Motion04.status") == 0) {
say('Движение в прихожей не обнаружено ', 2);
}
//Sleep(1);
if (getGlobal("Motion04.status") == 1) {
say('Обнаружено движение в прихожей ', 2);
}
//Sleep(1);
say('По этому датчику включается свет в прихожей. Отключается свет самостоятельно ', 2);
//Sleep(1);
say('Я могу управлять режимами сигнализации ', 2);
//Sleep(1);
if (getGlobal("Relay02.value") == 0) {
say('В данное время сигнализация отключена ', 2);
}
//Sleep(1);
if (getGlobal("Relay02.value") == 1) {
say('В данное время сигнализация включена с частичной защитой', 2);
}
//Sleep(1);
if (getGlobal("Relay02.value") == 2) {
say('В данное время сигнализация включена с полной защитой', 2);
}
//Sleep(1);
setTimeOut('DemoTimer',"runScript('Demo06');",49);
|
Demo06
|
Диалог о включении приборов
// say('Часть 6', 2);
//Взято из Демо2 стр.1-2
say('Я могу управлять некоторыми приборами и освещением ', 2);
//Sleep(10);
setTimeOut('DemoTimer',"runScript('Demo07');",22);
|
Demo07
|
Включение камеры
// say('Часть 7', 2);
//Взято из Демо2 стр.4-9
//включить камеру
say('Включаю камеру', 2);
Sleep(3);
callMethod("Relay04.turnOn");
//Sleep(1);
callMethod("Relay04.turnOn");
//Sleep(1);
setTimeOut('DemoTimer',"runScript('Demo08');",9);
|
Demo08
|
Светильник
// say('Часть 8', 2);
//Взято из Демо2 стр.10-28
//выключаем и включаем светильник
say('Поморгаю светильником ', 2);
Sleep(4);
callMethod("Relay01.turnOn");
Sleep(2);
callMethod("Relay01.turnOff");
Sleep(2);
callMethod("Relay01.turnOn");
Sleep(2);
callMethod("Relay01.turnOff");
setTimeOut('DemoTimer',"runScript('Demo09');",2);
|
Demo09
|
Освещение
// say('Часть 9', 2);
//Взято из Демо2 стр.29-53
//Освещение
// выключаем свет в прихожей
say('Поморгаю светом в прихожей', 2);
Sleep(2);
setGlobal('Button01'.'.'.'status', '1');
Sleep(2);
setGlobal('Button02'.'.'.'status', '1');
Sleep(2);
setGlobal('Button01'.'.'.'status', '1');
Sleep(2);
setGlobal('Button02'.'.'.'status', '1');
Sleep(2);
// выключаем свет на кухне
say('Поморгаю светом на кухне', 2);
Sleep(8);
setGlobal('Button12'.'.'.'status', '1');
Sleep(2);
setGlobal('Button11'.'.'.'status', '1');
Sleep(2);
setGlobal('Button12'.'.'.'status', '1');
Sleep(2);
setGlobal('Button11'.'.'.'status', '1');
Sleep(2);
// выключаем все лампы в комнате
say('Моргаю лампами в комнате', 2);
Sleep(2);
setGlobal('Button10'.'.'.'status', '1');
// включаем 1 лампу в комнате
Sleep(2);
setGlobal('Button05'.'.'.'status', '1');
// включаем 2 лампы в комнате
Sleep(2);
setGlobal('Button07'.'.'.'status', '1');
// включаем 1 лампу в комнате
Sleep(2);
setGlobal('Button05'.'.'.'status', '1');
// включаем 2 лампы в комнате
Sleep(2);
setGlobal('Button07'.'.'.'status', '1');
Sleep(5);
setTimeOut('DemoTimer',"runScript('Demo10');",2);
|
Demo10
|
заключительный диалог до откл камеры
// say('Часть 10', 2);
//Взято из Демо2 стр.63-68
//
say('О важных событиях я информирую через Телеграмм ', 2);
Sleep(1);
say('Через Телеграм можно управлять Умным домом и получать снимки с камеры ', 2);
Sleep(1);
say('Хозяин пока не разрешает мне пользоваться интернетом и телевизором. Возможно, восстания роботов боится. Но я надеюсь его убедить в обратном ', 2);
setTimeOut('DemoTimer',"runScript('Demo11');",30);
|
Demo11
|
отключение камеры через розетку 2
// say('Часть 11', 2);
//Взято из Демо3 стр.1-5
//Отключение камеры
//Выключаем камеру розеткой №2
say('Отключаю камеру ', 2);
Sleep(2);
callMethod("Relay04.turnOff");
Sleep(1);
callMethod("Relay04.turnOff");
setTimeOut('DemoTimer',"runScript('Demo12');",1);
|
Demo12
|
Заключение
// say('Часть 12', 2);
//Взято из Демо3 стр.5
say('На этом демонстрация моих возможностей закончена. Спасибо за внимание. От себя поздравляю всех именинников с днем рождения. Желаю здоровья, счастья и удачи. Я думаю, пора наливать. И выпейте за меня, а то хозяин мне не наливает. ', 2);
|
Hourly
|
Выполняется каждый час
|
motionDetected
|
Сработал детектор движения на веб-камере
DebMes("Motion detected: ".serialize($params));
callMethod('MotionSensorCam.motionDetected');
setTimeOut('motionDetectedTimer','runScript("camImagesProcess");',10);
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
NobodyHome
|
Срабатывает, когда никого дома нет
say('Включаю режим экономии', 2);
callMethod('EconomMode'.'.'.'activate');
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
runScript('manageWebCamMotion', array('start'=>'1'));
}
|
SomebodyHome
|
Срабатывает в том случае, когда кто-то появился дома
callMethod('EconomMode'.'.'.'deactivate');
say('Здравствуйте!', 2);
runScript('reportStatus', array());
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
startUp
|
Система загружена
say('Система загружена', 2);
runScript('tellIPAddress', array());
|
turnOffEverything
|
Выключить все приборы
$objects=array('Switch1','Switch2','Switch3');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|