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);
|
IRRemoteCode
|
setGlobal('IRRemote.ir_code', 'Z6WHAPgBAABqAgAAywYAAHYRAADOEQAANLcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDICAgEBAQEBAgICAQEBAQEBAgEBAQEBAQIBAgICAgICBQQyAgIBAQEBAQICAgEBAQEBAQIBAQEBAQECAQICAgICAgAA==');
// Секундочку
Sleep(15);
// канал 401
setGlobal('IRRemote.ir_code', 'Z6XLAA4CAABUAgAAtQYAAI4RAAC5EQAANLcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDICAgEBAQEBAgICAQEBAQEBAQECAQEBAQICAgECAgICBQQyAgIBAQEBAQICAgEBAQEBAQEBAgEBAQECAgIBAgICAgUEMgICAQEBAQECAgIBAQEBAQEBAQIBAQEBAgICAQICAgIAA=');
Sleep(1);
setGlobal('IRRemote.ir_code', 'Z6XLAA0CAABVAgAAtwYAAI8RAAC6EQAANLcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDICAgEBAQEBAgICAQEBAQECAQEBAgEBAQECAgIBAgICBQQyAgIBAQEBAQICAgEBAQEBAgEBAQIBAQEBAgICAQICAgUEMgICAQEBAQECAgIBAQEBAQIBAQECAQEBAQICAgECAgIAA=');
Sleep(1);
setGlobal('IRRemote.ir_code', 'Z6WHAA0CAABVAgAAtQYAAI4RAAC6EQAANLcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDICAgEBAQEBAgICAQEBAQEBAQIBAQEBAQICAQICAgICBQQyAgIBAQEBAQICAgEBAQEBAQECAQEBAQECAgECAgICAgAA==');
|
IRRemoteCodeOff
|
setGlobal('IRRemote.ir_code', 'Z6WHAPgBAABqAgAAywYAAHYRAADOEQAANLcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDICAgEBAQEBAgICAQEBAQEBAgEBAQEBAQIBAgICAgICBQQyAgIBAQEBAQICAgEBAQEBAQIBAQEBAQECAQICAgICAgAA==');
|
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);
|
AlarmXiaomiGateway
|
/**
* Сценарий для Majordomo
* Световой индикатор для режима "Внимание" для Xiaomi Gateway
* @author Alex Sokolov <admin@gelezako.com>
* @copyright Alex Sokolov http://blog.gelezako.com (c)
**/
sg("RGB01.brightness","0");
sg("RGB02.color","");
sg("RGB02.color","ff000e");
sleep(3);
for($j = 1; $j <= 3; $j++){
for ($i = 2; ; $i=$i+5) {
sg("RGB01.brightness",$i);
usleep(50000);
if ($i >= 100)break;
}
for ($i = 100; ; $i=$i-5) {
sg("RGB01.brightness",$i);
usleep(50000);
if ($i <= 0)break;
}
}
|
manageConnectService
|
Включение/выключение сервиса синхронизации через облако
//include_once(DIR_MODULES.'connect/connect.class.php');
//$cn=new connect();
//$cn->getConfig();
//if ($params['start']) {
// $cn->config['CONNECT_SYNC']='1';
// $cn->saveConfig();
//}
//if ($params['stop']) {
// $cn->config['CONNECT_SYNC']='0';
// $cn->saveConfig();
//}
//echo $cn->config['CONNECT_SYNC'];
|
manageWebCamMotion
|
Включение/выключение детектора движений на камере
//if ($params['start']) {
// DebMes("Starting web-cam motion detection");
// getURL('http://localhost:8080/0/detection/start',0);
//}
//if ($params['stop']) {
// DebMes("Stopping web-cam motion detection");
// getURL('http://localhost:8080/0/detection/pause',0);
//}
|
manageWebCamService
|
Включение/выключение вебкамеры
//if ($params['start']) {
// safe_exec('cp /etc/motion/motion_enabled /etc/default/motion');
// safe_exec('service motion start');
//}
//if ($params['stop']) {
// safe_exec('cp /etc/motion/motion_disabled /etc/default/motion');
// safe_exec('service motion stop');
//}
|
SecurityArmedModeOn
|
Проверка нажатия 2 клик-отключение охраны, иначе аларм
if (getGlobal('SecurityArmedMode.active') == 1)
{
say("Внимание! Входная дверь открыта!",5);
sg('RGB01.ringtone','1,40'); // проиграть рингтон 10 с громкостью 100
runScript('AlarmXiaomiGateway');
runScript('SendToNotifyEvents', array('text' => 'Внимание! Входная дверь открыта!!!'));
include_once(DIR_MODULES . 'idevices/idevices.class.php');
$idevices_module = new idevices();
$idevices_module->sendMessage("iPhone (michail)", "Входная дверь открыта!!!", "Охрана", 1);
say("Внимание! Входная дверь открыта! Вторжение!",5);
//sg('RGB01.ringtone','1,10'); // проиграть рингтон 10 с громкостью 100
runScript('AlarmXiaomiGateway');
// runScript('SendToNotifyEvents', array('text' => 'Внимание! Входная дверь открыта!!!'));
//include_once(DIR_MODULES . 'idevices/idevices.class.php');
//$idevices_module = new idevices();
//$idevices_module->sendMessage("iPhone (michail)", "Входная дверь открыта!!!", "Охрана", 1);
say("Внимание! Входная дверь открыта! Вторжение!!!",5);
}
|
SecurityOff
|
Отключение режима охраны
//Включаем воду
sg('RGB01.ringtone','12,100'); // проиграть рингтон 12 с громкостью 100
callMethod('Switch15.turnOn');
clearTimeOut("RGBTimer02");
SetTimeOut("RGBTimer02","setGlobal('RGB02.color','000000');",30*1);
|
SecurityOn
|
Включить режим охраны
//задержка на выключене освещения и воды
sg('RGB01.ringtone','11,100'); // проиграть рингтон 10 с громкостью 100
clearTimeOut("SecurityTimer");
SetTimeOut("SecurityTimer","runScript('turnOffEverythingSecurity');",20*1);
clearTimeOut("RGBTimer02On");
SetTimeOut("RGBTimer02On","setGlobal('RGB02.color','000000');",60*1);
clearTimeOut("TimerSecurity5");
SetTimeOut("TimerSecurity5","sg('RGB01.ringtone','11,100');",5*1);
clearTimeOut("TimerSecurity10");
SetTimeOut("TimerSecurity10","sg('RGB01.ringtone','11,100');",10*1);
clearTimeOut("TimerSecurity15");
SetTimeOut("TimerSecurity15","sg('RGB01.ringtone','11,100');",15*1);
clearTimeOut("TimerSecurity18");
SetTimeOut("TimerSecurity18","sg('RGB01.ringtone','11,100');",18*1);
|
turnOffEverythingSecurity
|
Выключить все приборы
sg('RGB01.ringtone','13,100'); // проиграть рингтон 13 с громкостью 100
$objects=array('Switch01','Switch02','Switch03','Switch04','Switch05','Switch06','Switch07','Switch08','Switch10','Switch11','Switch14');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
//выключаем воду
callMethod('Switch16.turnOn');
getURL('http://192.168.100.115/radio?url=0', 0);
|
Hourly
|
Выполняется каждый час
|
IButton_clik
|
Постановка и снятие с охраны IButton
if (getGlobal('Ibutton.value') == getGlobal('IButton01.RCKod') or getGlobal('Ibutton.value') == getGlobal('IButton02.RCKod'))
{
if (getGlobal('SecurityArmedMode.active') == 1)
{
callMethod('SecurityArmedMode.deactivate');
say("Внимание! Охрана отключена",5);
clearTimeOut("SecurityTimer");
clearTimeOut("RGBTimer02On");
clearTimeOut("TimerSecurity5");
clearTimeOut("TimerSecurity10");
clearTimeOut("TimerSecurity15");
clearTimeOut("TimerSecurity18");
}
else
{
callMethod('SecurityArmedMode.activate');
say("Внимание! Охрана Включена",5);
}
}
|
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'));
}
|
RCswitch
|
Обработка кодов от приемника 433
$x = getGlobal('RCswitch01.status');
switch ($x):
case getGlobal('MotionSensor4.RCKod'):
// ДД01 кухня
sg('MotionSensor4.status',1);
break;
case getGlobal('RemoteController01.RCKodA'):
//callMethod('Switch14.turnOn');
//пульт1 А постановка на охрану
callMethod('SecurityArmedMode.activate');
break;
case getGlobal('RemoteController01.RCKodB'):
//callMethod('Switch14.turnOff');
//пульт1 В снятие с охраны
callMethod('SecurityArmedMode.deactivate');
break;
case getGlobal('RemoteController01.RCKodC'):
//пульт1 С свет кладовка вкл
callMethod('Switch10.turnOn');
break;
case getGlobal('RemoteController01.RCKodD'):
//пульт1 D свет кладовка выкл
callMethod('Switch10.turnOff');
break;
//case 5222114:
//пульт2 А
//sg('RGB01.ringtone','10,100'); // проиграть рингтон 12 с громкостью 50
//Say('Нажата кнопка AA второго пульта!',2);
//break;
//case 5222120:
//пульт2 В
// break;
//case 13368593:
//выключатель 1 Л
//Say('Нажата левая кнопка выключателя!',2);
//callMethod('Switch05.turnOn');
//break;
//case 13368596:
//выключатель 1 П
//Say('Нажата правая кнопка выключателя!',2);
//callMethod('Switch05.turnOff');
//break;
//case 5222113:
//пульт2 С
// break;
//case 5222116:
//пульт2 D
// break;
case getGlobal('MotionSensor5.RCKod'):
// ДД02 в ванной
sg('MotionSensor5.status',1);
break;
//case 4460736:
//пульт люстры кабинет кн. А
// break;
//case 4460592:
//пульт люстры кабинет кн. В
// break;
//case 4460556:
//пультлюстры кабинет кн. С
// break;
//case 4460547:
//пульт люстры кабинет кн. D
// break;
case getGlobal('OpenClose01.RCKod'):
// OpenClose01 кладовка
callMethod('Switch14.switch');
break;
case 5592323:
// ДД06 столовая
sg('MotionSensor6.status',1);
break;
default:
//echo "x не равен 0, 1 или 2";
endswitch;
|
SendToNotifyEvents
|
Простой вариант отправки уведомлений из Majordomo в телеграмм
$url = 'https://api.notify.events/notify/vfvdEgDg4gUOgp0cV3uS9gq-uFgfuDvf/266';
$text = isset($params['text']) ? $params['text'] : "Notification text not specified";
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query(array('text' => $text))
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === false) {
echo 'Error';
} else {
echo 'Done';
}
|
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());
|
test
|
$state = file_get_contents('http://192.168.100.124/gpioprint');
setGlobal('ThisComputer.yw_now',$state);
|
turnOffEverything
|
Выключить все приборы
$objects=array('Switch01','Switch02','Switch03','Switch04','Switch05','Switch06','Switch07','Switch08','Switch10','Switch11','Switch14');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|
turnOffTime
|
Выключить все приборы
$objects=array('Switch01','Switch02','Switch03','Switch04','Switch05','Switch06','Switch07','Switch08','Switch09','Switch10','Switch11');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|