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 and $path!='/snap/core/4917') {
if ($proc>$max_usage and substr($path,0,6) !='/snap/') {
if ($proc>$max_usage and substr($path,0,5) !='/mnt/')
$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);
|
RebootMJD
|
перезагрузка МЖД только
exec("sudo systemctl restart majordomo");
|
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);
|
если_стало_темно
|
eting вечернее приветствие -- отрабатывает когда датчик засёк вечером первое движение после долгого отсутствия
// возвращаемся вечером домой
say("Добро пожаловать домой!",2);
setTimeOut('canhelp','runScript("TabletAsk");',10);
// включаем блок зарядок на 1 час
callMethod("netping_pwr2.turnon");
clearTimeOut("charging_outlet2");
setTimeOut("charging_outlet2",'callMethod("netping_pwr2.turnoff");',1*60*60);
// если уже темно
if (getGlobal('DarknessMode.active')) {
callMethod("lcw0.turnOn"); // включаем свет в прихожей
callMethod("lcw1.turnOn"); // включаем свет над барной стойкой
//callMethod("lcw3.turnOn"); // включаем подсветку потолка в зале
//callMethod("lcw4.turnOn"); // включаем свет в коридоре
callMethod("lcw8.turnOn"); // включаем свет над столом
callMethod("RCOutlet1.turnOn"); // включаем подветку на кухне
callMethod("noo8.turnOn"); // включаем подсветку мебели
callMethod('Orvibo1.turnOn'); //включаем гирлянду
//callMethod("MiLamp2.setColor",array('color'=>'#00ff00')); // свет в цветном светильнике
}
// включаем компьютер
//runScript("WOL");
|
anekdot
|
/*
1 - Анекдот;
2 - Рассказы;
3 - Стишки;
4 - Афоризмы;
5 - Цитаты;
6 - Тосты;
8 - Статусы;
11 - Анекдот (+18);
12 - Рассказы (+18);
13 - Стишки (+18);
14 - Афоризмы (+18);
15 - Цитаты (+18);
16 - Тосты (+18);
18 - Статусы (+18);
*/
function GetJoke($ctype = 1) {
$pretext = array("Слушай", "Слушайте шутку", "Слушай анекдот", "Вот шутка смешная", "Еще шутка");
$number = mt_rand(0, count($pretext) - 1);
$res = geturl('http://rzhunemogu.ru/Rand.aspx?CType=' . $ctype, 0);
$res = win2utf($res);
$xml = new SimpleXMLElement($res);
$joke = trim(preg_replace('/\s{2,}/', ' ', $xml->content));
$joke = $pretext[$number] . ': ' . $joke;
if (strlen($joke) > 500) {
sleep(10);
GetJoke();
} else {
//return $joke;
//say($pretext[$number].':', 1);
say($joke, 2);
}
}
//if (gg('ThisComputer.SayJokes') != 0) {
GetJoke();
//}
|
Astro
|
$sun_info = date_sun_info(time(), $this->getProperty('Latitude'), $this->getProperty('Longtitude'));
$timezone = $this->getProperty('TimeZone');
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
$this->setProperty('SunRise', $sunrise);
$this->setProperty('SunRise', $sunrise);
$this->setProperty('SunRiseNum', date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
$this->setProperty('SunSet', $sunset);
$this->setProperty('SunSetNum', date("H:i", $sunset));
}
if ($key == 'transit') {
$transit = $val;
$this->setProperty('Transit', $transit);
}
if ($key == 'civil_twilight_begin') {
$civil_twilight_begin = $val;
$this->setProperty('civil_begin', $civil_twilight_begin);
}
if ($key == 'civil_twilight_end') {
$civil_twilight_end = $val;
$this->setProperty('civil_end', $civil_twilight_end);
}
}
$this->setProperty('LongTag', $day_length);
date_default_timezone_set('UTC');
$this->setProperty('LongTagNum', date("H:i", $day_length));
|
ClockChime.onNewMinute
|
$uptime=shell_exec('uptime');
setGlobal("ThisComputer.uptime",$uptime);
$mem=shell_exec("free -m|grep Mem|awk '{print $2,$3,$4}'");
$mem=explode(" ",$mem);
$mem="Всего: ".$mem[0]." Занято: ".$mem[1]." Доступно: ".$mem[2];
setGlobal("ThisComputer.memory",$mem);
$disk=shell_exec("df -h|grep sda1|awk '{print $2,$3,$5}'"); // p.s. sda1 нужно изменить на свой диск
$disk=explode(" ",$disk);
$disk=$disk[1]."/".$disk[0]." ( ".$disk[2].")";
setGlobal("ThisComputer.driveStatus",$disk);
|
Hourly
|
Выполняется каждый час
echo "OK";
//предсказатель погоды v0.1 beta
$sensor='Sensor_pressure01.value';
$period=60*60;
$history=getHistory($sensor, time()-$period, time());
$sumX=0;
$sumY=0;
$sumX2=0;
$sumXY=0;
$i=0;
foreach($history as $h_part){
$pres=$h_part['VALUE']*133.322; //перевести в паскали
$sumX += time()-strtotime($h_part['ADDED']);
$sumY += $pres;
$sumX2 += (time()-strtotime($h_part['ADDED']))*(time()-strtotime($h_part['ADDED']));
$sumXY += (time()-strtotime($h_part['ADDED'])) * $pres;
$i++;
}
$a=$i*$sumXY;
$a=$a-$sumX*$sumY;
$a=$a/($i*$sumX2-$sumX*$sumY);
$dt = -$a * $i;
$dt = round($dt);
//print_r($dt);
if($dt<-250) {
say('Апокалипсис не за горами. Дельта'.$dt);
} elseif ($dt<-150) {
say('Ожидается резкое ухудшение погоды. Значение дельты '.$dt);
} elseif ($dt<-50) {
say('Ожидается ухудшение погоды. Значение дельты '.$dt);
} elseif ($dt>50) {
say('Ожидается улучшение погоды. Значение дельты '.$dt);
} elseif ($dt>150) {
say('Ожидается резкое улучшение погоды. Значение дельты '.$dt);
} elseif ($dt>250) {
say('Апокалипсис не за горами. Дельта '.$dt);
}
|
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'));
}
|
NoBodyBedroom
|
нет движения в спальне выключаем лишнее освещение
//say('прошло 60 минут , в целях экономии выключаю источники света в спальной комнате',5);
brLinkCommand('Спальня TC2_1-клавиша_ВКЛ_576');
|
NobodyHome
|
Срабатывает, когда никого дома нет
say('Включаю режим экономии', 2);
callMethod('EconomMode'.'.'.'activate');
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
runScript('manageWebCamMotion', array('start'=>'1'));
}
|
NoBodyKinderroom
|
нет движения в детской
//say('прошло 30 минут , в целях экономии выключаю источники света в детской комнате',5);
//cm("Relay14.TurnOff");
brLinkCommand('детская Выкл TC2_1-клавиша_498');
|
NoBodyKitchen
|
нет движения на кухне
|
NoBodyLivingroom
|
нет движения в гостиной
|
NoBodyToilet
|
нет движения в toilet
//brLinkCommand('туалет OFF');
//sg('Button33.status', 1);
//sg('Button33.status', 1);
getURL('http://192.168.1.179/gpio?st=0&pin=4');
getURL('http://192.168.1.179/gpio?st=1&pin=16');
|
ON_motion
|
для включения чего либо (для розеток)
sg("Relay05.status",1);
sg("miioRelay07.status",1);
SetTimeOut('Relay05OFF','sg("Relay05.status",0);',600);
SetTimeOut('miioRelay07OFF','sg("miioRelay07.status",0);',720);
|
photocam2
|
Для съемки входящего по таймеру
//callMethod('Camera01.takeSnapshot');
$img ='/var/www/cms/images/474/' .date('y_m_d_H_i_s') .'.jpg';
exec('ffmpeg -i rtsp://192.168.1.162/unicast -vframes 1 -r 1 -s 1920x1080 ' . $img);
sg('Camera01.snapshot','474/' .date('y_m_d_H_i_s') .'.jpg');
//$img1 = './cms/images/'.gg('Camera01.snapshot');
// Отправляем фотку в телеграм Админу
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToAdmin($img);
//$telegram_module->sendImageToAdmin($img1);
exec('rm ' .$img);
exec('rm ' .$img1);
|
SendToNotifyEvents
|
$url = 'https://api.notify.events/notify/odEWTFIKcYS4QTt4x5rTBGOjMrmgmNTv/77';
$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';
}
|
setDate
|
Установка даты
$months = array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$day=array('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота');
sg("ThisComputer.Date",date( "d.m.Y"));
sg("ThisComputer.Day",$day[date("w")]);
sg("ThisComputer.DateD",date( "d"));
sg("ThisComputer.Month",$months[date("n")]);
sg("ThisComputer.DateY",date( "Y"));
$sun_info = date_sun_info(time(), gg("MyCity.Latitude"), gg("MyCity.Longtitude"));
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
echo 'Восход: '.date("H:i", $sunrise).'<br>';
setGlobal('MyCity.SunRise',date("H:i", $sunrise));
setGlobal('SunRiseTime', $sunrise);
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
echo 'Заход: '.date("H:i", $sunset).'<br>';
echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
setGlobal('MyCity.SunSet',date("H:i", $sunset));
setGlobal('SunSetTime', $sunset);
setGlobal('MyCity.LongTag',gmdate("H:i", $day_length));
}
if ($key == 'transit') {
$transit = $val;
echo 'В зените: '.date("H:i:s", $transit).'<br>';
setGlobal('MyCity.Transit',date("H:i:s", $transit));
}
if ($key == 'civil_twilight_begin') {
$civil_twilight_begin = $val;
echo 'Начало утренних сумерек: '.date("H:i:s", $civil_twilight_begin).'<br>';
setGlobal('MyCity.civil_begin',date("H:i:s", $civil_twilight_begin));
}
if ($key == 'civil_twilight_end') {
$civil_twilight_end = $val;
echo 'Конец вечерних сумерек: '.date("H:i:s", $civil_twilight_end).'<br>';
setGlobal('MyCity.civil_end',date("H:i:s", $civil_twilight_end));
$noy_length = $civil_twilight_begin - $civil_twilight_end;
setGlobal('MyCity.nayt',gmdate("H:i:s", $noy_length));
echo 'Долгота ночи: '.gmdate("H:i", $noy_length).'<br>';
}
}
|
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());
|
sysSensors
|
//CPU temp
$cpu_temp=exec('cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input') / 1000;
$cpu_temp=round($cpu_temp,1);
//CPU usage
$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");
//System uptime
$sys_uptime = exec('uptime');
$sys_uptime = explode(' up ', $sys_uptime);
$sys_uptime = explode(',', $sys_uptime[1]);
$sys_uptime = trim($sys_uptime[0]);
//Memory usage/total
$mem_total=exec("cat /proc/meminfo | grep MemTotal | awk '{print $2}'");
$mem_usage=$mem_total - exec("cat /proc/meminfo | grep MemFree | awk '{print $2}'");
$sys_memory=$mem_usage . " / " . $mem_total;
//HDD /dev/sda temp
$hdd_temp=exec("hddtemp /dev/sda");
//ereg("[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)",$hdd_temp,$arr);
preg_match('/[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)/',$hdd_temp,$arr);
$hdd_temp = trim($arr[1]);
$hdd_temp = str_replace('+','',$hdd_temp);
//HDD free space
$hdd_freespace=exec("df -h | grep /dev/sda1 | awk '{print $4}'");
if(gg('SysUptime')!=$sys_uptime){sg("SysUptime",$sys_uptime);}
if(gg('SysMemUsed')!=$mem_usage){sg("SysMemUsed",$mem_usage);}
if(gg('SysMemTotal')!=$mem_total){sg("SysMemTotal",$mem_total);}
if(gg('HDDFree')!=$hdd_freespace){sg("HDDFree",$hdd_freespace);}
//if(gg('HDDtemp')!=$hdd_temp){sg("HDDtemp",$hdd_temp);}
if(gg('CPUtemp')!=$cpu_temp){sg("CPUtemp",$cpu_temp);}
if(gg('CPUusage')!=$cpu_usage){sg("CPUusage",$cpu_usage);}
|
turnOffEverything
|
Выключить все приборы
$objects=array('Switch1','Switch2','Switch3','Relay05','Relay14','Relay15','Relay16','Relay17','miioRelay07','color_0x000000000458e72a','XiRelay11','XiRelay13','miioRelay09','miioRelay12','XiRelay08','Button08',);
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|
vacuumtelega
|
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$luts=gg("MiVacuumCleaner.timestamp");
$diff=(gmdate('i',trim(time()-$luts)));
$pattern = "|\b[0]+([1-9][\d]*)|is";
$diff2= preg_replace($pattern, "\\1", $diff);
$status .= "Информация о пылесосе была обновлена " .$diff2 . " минут назад.";
if (gg('MiVacuumCleaner.online')=='1') {$status =$status." Пылесос на связи, "; }
else {$status=$status." Связь с пылесосом отсутсвует,";}
if (gg("MiVacuumCleaner.state_text")=='Charging') {$status =$status." заряжается, установлен на базе, "; }
if (gg("MiVacuumCleaner.state_text")=='Cleaning') {$status =$status." производит уборку, "; }
if (gg("MiVacuumCleaner.state_text")=='Back to home') {$status =$status." едет на базу, "; }
if (gg("MiVacuumCleaner.state_text")=='Sleeping') {$status =$status." отдыхает от трудовых будней, "; }
if (gg("MiVacuumCleaner.state_text")=='Pause') {$status =$status." установлен на паузу, "; }
//$status .= " температура двигателя ".round(gg("kia ceed.etemp"))." градусов, температура в салоне ".round(gg("kia ceed.ctemp"))." градусов.";
$status .= " Заряд аккумуляторной батареи ".gg("MiVacuumCleaner.battery")." процентов. ";
if (gg("MiVacuumCleaner.battery")<10) {$status = $status." Внимание, аккумулятор сильно разряжен, рекомендуется зарядить как можно скорее!";}
$status .= " Последняя уборка заняла ".round(gg("MiVacuumCleaner.clean_time")/60)." минут, ";
$status .= " убрано ".round(gg("MiVacuumCleaner.clean_area")/1000000,1)." метров. ";
if (gg("MiVacuumCleaner.error_text")=='No error') {$status =$status." Ошибок не зафиксировано. "; }
if (gg("MiVacuumCleaner.error_text")=='Clean main brush') {$status =$status." Необходимо очистить нижнюю щетку."; }
//////////////////////////////////
$resurs=1800;
$resursp=100-round((gg("MiVacuumCleaner.sensor_dirty_time")/60*100)/$resurs);
$resursh=round(($resurs-(gg("MiVacuumCleaner.sensor_dirty_time")/60))/60);
$status .= " Очистка боковых сенсоров необходима через $resursh часов.";
$resurs=18000;
$resursp=100-round((gg("MiVacuumCleaner.main_brush_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.main_brush_work_time")/60)))/60);
if ($resursp<30) {$replacemain=1; }else{ $replacemain=0;}
$status .= " Ресурс нижней щетки ".$resursp." процентов ($resursh часов).";
$resurs=12000;
//$resurs=120;
$resursp=100-round((gg("MiVacuumCleaner.side_brush_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.side_brush_work_time")/60)))/60);
if ($resursp<30){ $replaceside=1;} else {$replaceside=0;}
$status .= " Ресурс боковой щетки ".$resursp." процентов ($resursh часов).";
$resurs=9000;
//$resurs=90;
$resursp=100-round((gg("MiVacuumCleaner.filter_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.filter_work_time")/60)))/60);
if ($resursp<30) {$replacefilter=1;} else {$replacefilter=0;}
$status .= " Ресурс фильтра ".$resursp." процентов ($resursh часов).";
if (($replacefiler=='1')or
($replaceside=='1') or
($replacemian=='1'))
{$status .= " Необходимо преобрести расходники: ";
if ($replaceside==1) $status .= "боковую щетку " ;
if ($replacefiler==1) $status .= "фильтр ";
if ($replacemain==1) $status .= "главную щетку " ;
$status .= ".";
}
$telegram_module->sendMessageToAll($status);
|
Точное время
|
say((String) 'Точное время'.(String) timeNow().(String) ' мой господин.', 2);
|