Баланс МТС
Pattern: Баланс (МТС|Водафон)
Code
// sayReply ('Отправляю запрос на проверку счета МТС',1);
$params = array (
"command" => "Command",
"option" => "dongle ussd dongle0 *110*10#",
);
$response = callMethod ('Asterisk.Action',$params);
/*
if ($response['Response'] != 'Success')
{
sayReply ('Не удалось отправить запрос',1);
} else
{
sayReply ("Запрос отправлен",1);
}
*/
|
Включи
Code
sayReply ("Что именно включить?",2);
|
Включи камеру
Pattern: (К|к)амеру|(В|в)ключи камеру
Code
sayReply ("Какую камеру включить?",2);
|
Включи камеру в коридоре
Pattern: (В|в)включ(и|ить) камеру в коридоре|(К|к)амеру в коридоре|(В|в) коридоре
Code
if (gg("CamCorridor.enabled")==1) {
sayReply ("Камера в коридоре уже включена",2);
}
else {
sayReply ("Включаю камеру в коридоре",2);
sg("CamCorridor.enabled",1);
runScript('CommandCam', array('cam'=>'4','function'=>'modect','enabled'=>'1'));
};
|
Включи камеру во дворе
Pattern: (В|в)включ(и|ить) камеру во дворе|(К|к)амеру во дворе|(В|в)о дворе
Code
if (gg("CamOutdoor2.enabled")==1) {
sayReply ("Камера во дворе уже включена",2);
}
else {
sayReply ("Включаю камеру во дворе",2);
sg("CamOutdoor2.enabled",1);
};
|
Включи камеру на заднем дворе
Pattern: (В|в)включ(и|ить) камеру на заднем дворе|(К|к)амеру на заднем дворе|(Н|н)а заднем дворе
Code
if (gg("CamOutdoor3.enabled")==1) {
sayReply ("Камера на заднем дворе уже включена",2);
}
else {
sayReply ("Включаю камеру на заднем дворе",2);
sg("CamOutdoor3.enabled",1);
};
|
Включи камеру на крыльце
Pattern: (В|в)включ(и|ить) камеру на крыльце|(К|к)амеру на крыльце|(Н|н)а крыльце
Code
if (gg("CamOutdoor1.enabled")==1) {
sayReply ("Камера на крыльце уже включена",2);
}
else {
sayReply ("Включаю камеру на крыльце",2);
sg("CamOutdoor1.enabled",1);
};
|
|
Включи режим
Pattern: Режим|Включи режим
Code
sayReply ("Какой режим включить?",2);
|
Включи режим охраны
Pattern: (В|в)ключи режим охраны|(Р|р)ежим охраны|(О|о)храны|(В|в)ключи режим безопасность|(Р|р)ежим безопасность|(Б|б)езопасность
Code
if (gg("SecurityArmedMode.active")==1) {
sayReply ("Режим охраны уже включен",2);
}
else {
sayReply ("Включаю режим охраны",2);
callMethod("SecurityArmedMode.activate");
};
|
Включи режим пуш-уведомлений
Pattern: (В|в)ключи режим уведомлений|(Р|р)ежим уведомлений|(У|у)ведомлений
Code
if (gg("ThisComputer.minPushLevel")<=5) {
sayReply ("Режим уведомлений уже включен",2);
}
else {
sayReply ("Включаю режим уведомлений",2);
sg("ThisComputer.minPushLevel", 2);
};
|
Включи режим тишины
Pattern: (В|в)ключ(и|ить) режим тишины|(В|в)ключ(и|ить) режим не беспокоить|(Р|р)ежим не беспокоить|(Н|н)е беспокоить|(Р|р)ежим тишин(а|ы)|(Т|т)ишин(а|ы)
Code
if (gg("QuietMode.active")==1) {
sayReply ("Режим тишины уже включен",2);
}
else {
sayReply ("Включаю режим тишины",2);
callMethod("QuietMode.activate");
};
|
Включи режим экономии
Pattern: (В|в)включи режим экономии|(Р|р)ежим экнономии|(Э|э)кономии
Code
if (gg("EconomMode.active")==1) {
sayReply ("Режим экономии уже включен",2);
}
else {
sayReply ("Включаю режим экономии",2);
callMethod("EconomMode.activate");
};
|
|
|
Выключи
Pattern: (В|в)ыключ(и|ить)|(О|о)тключ(и|ить)
Code
sayReply("Что именно выключить?",2);
|
Выключи камеру
Pattern: Камеру|Выключи камеру
Code
sayReply ("Какую камеру выключить?",2);
|
Выключи камеру в коридоре
Pattern: (В|в)ывключ(и|ить) камеру в коридоре|(К|к)амеру в коридоре|(В|в) коридоре
Code
if (gg("CamCorridor.enabled")==0) {
sayReply ("Камера в коридоре уже выключена",2);
}
else {
sayReply ("Выключаю камеру в коридоре",2);
sg("CamCorridor.enabled",0);
};
|
Выключи камеру во дворе
Pattern: (В|в)ывключ(и|ить) камеру во дворе|(К|к)амеру во дворе|(В|в)о дворе
Code
if (gg("CamOutdoor2.enabled")==0) {
sayReply ("Камера во дворе уже выключена",2);
}
else {
sayReply ("Выключаю камеру во дворе",2);
sg("CamOutdoor2.enabled",0);
};
|
Выключи камеру на заднем дворе
Pattern: (В|в)ывключ(и|ить) камеру на заднем дворе|(К|к)амеру на заднем дворе|(Н|н)а заднем дворе
Code
if (gg("CamOutdoor3.enabled")==0) {
sayReply ("Камера на заднем дворе уже выключена",2);
}
else {
sayReply ("Выключаю камеру на заднем дворе",2);
sg("CamOutdoor3.enabled",0);
};
|
Выключи камеру на крыльце
Pattern: (В|в)ывключ(и|ить) камеру на крыльце|(К|к)амеру на крыльце|(Н|н)а крыльце
Code
if (gg("CamOutdoor1.enabled")==0) {
sayReply ("Камера на крыльце уже выключена",2);
}
else {
sayReply ("Выключаю камеру на крыльце",2);
sg("CamOutdoor1.enabled",0);
};
|
|
Выключи режим
Pattern: (В|в)ыключи режим|(Р|р)ежим
Code
sayReply ("Какой режим выключить?",2);
|
Выключи режим охраны
Pattern: (В|в)ыключи режим охраны|(Р|р)ежим охраны|(О|о)охраны|(В|в)ыключи режим безопасность|(Р|р)ежим безопасность|(Б|б)безопасность
Code
if (gg("SecurityArmedMode.active")==0) {
sayReply ("Режим охраны уже выключен",2);
}
else {
sayReply ("Выключаю режим охраны",2);
callMethod("SecurityArmedMode.deactivate");
};
|
Выключи режим пуш-уведомлений
Pattern: (В|в)ыключи режим уведомлений|(Р|р)ежим уведомлений|(У|у)ведомлений
Code
if (gg("ThisComputer.minPushLevel")>=5) {
sayReply ("Режим уведомлений уже выключен",2);
}
else {
sayReply ("Выключаю режим уведомлений",2);
sg("ThisComputer.minPushLevel", 200);
};
|
Выключи режим тишины
Pattern: (В|в)ыключ(и|ить) режим тишины|(В|в)ыключ(и|ить) режим не беспокоить|(Р|р)ежим не беспокоить|(Н|н)е беспокоить|(Р|р)ежим тишин(а|ы)|(Т|т)ишин(а|ы)
Code
if (gg("QuietMode.active")==0) {
sayReply ("Режим тишины уже выключен",2);
}
else {
sayReply ("Выключаю режим тишины",2);
callMethod("QuietMode.deactivate");
};
|
Выключи режим экономии
Pattern: (В|в)ыключи режим экономии|(Р|р)ежим экономии|(Э|э)кономии
Code
if (gg("EconomMode.active")==0) {
sayReply ("Режим экономии уже выключен",2);
}
else {
sayReply ("Выключаю режим экономии",2);
callMethod("EconomMode.deactivate");
};
|
|
|
Закрой
Code
sayReply ("Что именно закрыть?",2);
|
Закрой ворота
Pattern: Закр(ой|ыть) ворота|(В|в)орота
Code
if (gg("Relay03.status")==0) {
sayReply ("Ворота уже закрыты",2);
}
else {
sayReply ("Закрываю ворота",2);
CallMethod ("Relay03.switch");
};
|
|
Который час
Pattern: который час|сколько времени
Code
sayReply ("Точное время ".timeNow().".", 2,'который час');
|
Кулинария
Pattern: (Д|д)авай приготовим (.+)
Code
$queryString = $matches[2];
/*
$findParams = array(
'aerogrill' => '22', // Рецепты для аэрогриля
'waffle' => '27', // Для вафельницы
'yoghurt' => '28', // Для йогуртиницы
'multivarka' => '25', //Рецепты для мультиварки
'steamer' => '15', //Для пароварки
'pressureCooker' => '46', //Для скороварки
'breadMaker' => '23', //Для хлебопечки
'fondue' => '24' //Рецепты фондю
);
*/
$findParams = array();
$recipeNumber = rand(0, 5);
$recipesList = findRecipes($queryString, $findParams);
if (!empty($recipesList)) {
$recipe = getRecipes($recipesList[$recipeNumber]['link']);
$recipe['link'] = $recipesList[$recipeNumber]['link'];
$recipe['name'] = $recipesList[$recipeNumber]['text'];
sayRecipe($recipe);
} else {
sayReply('Ничего не найдено.');
}
function OpenRecipeURL($link) {
$rec=array();
$rec['EVENT_TYPE']='openurl'; // команда может быть ещё newwindow
$rec['WINDOW']='alice';
$rec['TERMINAL_TO']='*'; //здесь можно конкретный терминал указать
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['EXPIRE']=date('Y-m-d H:i:s', time()+10);
$rec['DETAILS']=$link;
$rec['ID']=SQLInsert('events', $rec);
}
function sayRecipe($recipe) {
OpenRecipeURL($recipe['link']);
sayReply ($recipe['name']);
if (!empty($recipe['description'])) {
foreach ($recipe['description'] as $e) {
sayReply ($e);
}
}
$ingrstr = 'Нам понадобится: ';
foreach ($recipe['ingredients'] as $e) {
$ingrstr .= $e . ', ';
}
sayReply ($ingrstr);
sayReply('Способ приготовления:');
foreach ($recipe['preparing'] as $e) {
sayReply ($e);
}
}
function getRecipes($recipeLink) {
if (empty($recipeLink)) {
return FALSE;
}
$html = @file_get_contents($recipeLink);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$ingredients = array();
$description = array();
$ingredientsDom = $xpath->query('//table[@class="rec-ingred-table"]/tr');
if ($ingredientsDom->length > 0) {
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$descriptionDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($descriptionDom as $item) {
$description[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
} else {
$ingredientsDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
}
$preparingDom = $xpath->query('//div[@class="b-list__clause__text"]/p');
$preparing = array();
foreach ($preparingDom as $item) {
$preparing[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$recipe = array(
'description' => $description,
'ingredients' => $ingredients,
'preparing' => $preparing
);
return $recipe;
}
function findRecipes($queryString, $params) {
if (empty($queryString)) {
return FALSE;
}
$url = 'http://www.edimdoma.ru/search?utf8=%E2%9C%93&asset=recipes&index=title_search&query=' . urlencode($queryString) . '&search%5Bmain_category_id%5D=&search%5Bcuisine_id%5D=';
if (!empty($params)) {
foreach ($params as &$value) {
$url .= '&cooking_method_ids%5B%5D=' . $value;
}
}
$url .= '&user_name=';
$html = @file_get_contents($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$articles = $xpath->query('//div[@class="b-page_block__header"]');
$links = array();
foreach ($articles as $container) {
$arr = $container->getElementsByTagName("a");
foreach ($arr as $item) {
if ($item->parentNode->tagName == "h2") {
$href = $item->getAttribute("href");
$text = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
$links[] = array(
'link' => $href,
'text' => $text
);
}
}
}
return $links;
}
|
Напомни
Pattern: (Н|н)апомни через (\d+) минут (.+)
Code
//Тестовое
$rnumber = gg("ThisComputer.Reminders_count") + 1;
$rname = "Reminder_$rnumber";
setTimeOut($rname,'say("Напоминаю: '.$matches[4].'",2);sg("ThisComputer.Reminders_count", (gg("ThisComputer.Reminders_count") - 1));',$matches[2]*60);
sg("ThisComputer.Reminders_count", $rnumber);
sayReply ("Принято напоминание - через $matches[2] минут напомнить: $matches[4]",2,'напомни');
|
Общий контекст
|
Забудь
Pattern: Забудь|Отмен(и|а)|Отставь|Стоп
Code
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
sayReply ('Хорошо',2);
|
Помощь
Pattern: (П|п)омощь|(П|п)одска(жи|зка)
Code
$actions=$this->getAvailableActions();
$total=count($actions);
for($i=0;$i<$total;$i++) {
sayReply ($actions[$i],2);
}
|
|
Опусти
Code
sayReply('Что именно нужно опускать?',2);
|
Опусти влажность
Pattern: (О|о)пусти влажность|(В|в)лажность
|
Опусти температуру
Pattern: (О|о)пусти температуру|(Т|т)емпературу
|
|
Открой
Code
sayReply ("Что именно открыть?",2);
|
Открой ворота
Pattern: Откр(ой|ыть) ворота|(В|в)орота
Code
if (gg("Relay03.status")==1) {
sayReply ("Ворота уже открыты",2);
}
else {
sayReply ("Открываю ворота",2);
CallMethod ("Relay03.switch");
};
|
|
Подними
Code
sayReply('Что именно нужно поднять?',2);
|
Подними влажность
Pattern: (П|п)одними влажность|(В|в)лажность
|
Подними температуру
Pattern: (П|п)одними температуру|(Т|т)емпературу
|
|
Состояние системы
Pattern: Состояние системы
Code
// Доложить о состоянии
$details=array();
if (getGlobal("Energy.stateColor") != "green") {
$details[]="Обнаружены проблемы в энергообеспечении";
$details[]=getGlobal("Energy.stateDetails");
};
if (getGlobal("Server.stateColor") != "green") {
$details[]="Обнаружена ошибка работы сервера";
$details[]=getGlobal("Server.stateDetails");
};
if (getGlobal("System.stateColor") != "green") {
$details[]="Обнаружена ошибка работы системы";
$details[]=getGlobal("System.stateDetails");
};
if (getGlobal("Communication.stateColor") != "green") {
$details[]="Обнаружена ошибка работы коммуникаций";
$details[]=getGlobal("Communication.stateDetails");
};
if (getGlobal("Security.stateColor") != "green") {
$details[]="Обнаружена ошибка безопасности";
$details[]=getGlobal("Security.stateDetails");
};
if (getGlobal("Users.stateColor") != "green") {
$details[]="Обнаружены проблемы у пользователей";
$details[]=getGlobal("Users.stateDetails");
};
if (!$details) {
$details[]="Все системы функционируют без ошибок";
};
sayReply (implode(". ",$details),2,'состояние системы');
|
Сохрани
Code
sayReply ('Что сохранить?',2);
|
Сохрани координаты
Pattern: (С|с)охрани координаты|(К|к)оординаты
Code
sayReply ('Чьи координаты сохранить?',2);
|
Сохрани координаты Алены
Pattern: (С|с)охрани координаты .+?л(ё|е)ны|(К|к)оординаты .+?л(ё|е)ны|.+?л(ё|е)ны
Code
if (time()-getGlobal('Alena.CoordinatesUpdatedTimestamp')>30*60) {
sayReply ($add_word.'Текущие координаты неизвестны',2);
} else {
sayReply ($add_word.'Сохраняю координаты Алёны',2);
$tmp=explode(',',gg('Alena.Coordinates'));
$rec=array();
$rec['TITLE']='Координаты Алёны '.date('Y-d-m H:i');
$rec['LAT']=$tmp[0];
$rec['LON']=$tmp[1];
$rec['RANGE']=500;
SQLInsert('gpslocations',$rec);
}
|
Сохрани координаты Ильи
Pattern: (С|с)охрани координаты .+?льи|(К|к)оординаты .+?льи|.+?льи
Code
if (time()-getGlobal('Billy.CoordinatesUpdatedTimestamp')>60*60) {
sayReply ($add_word.'Текущие координаты неизвестны',2);
} else {
sayReply ($add_word.'Сохраняю координаты Ильи',2);
$tmp=explode(',',gg('Billy.Coordinates'));
$rec=array();
$rec['TITLE']='Координаты Ильи '.date('Y-d-m H:i');
$rec['LAT']=$tmp[0];
$rec['LON']=$tmp[1];
$rec['RANGE']=500;
SQLInsert('gpslocations',$rec);
}
|
Сохрани координаты Сергея
Pattern: (С|с)охрани координаты .+?ргея|(К|к)оординаты .+?ргея|.+?ргея
Code
if (time()-getGlobal('Alien.CoordinatesUpdatedTimestamp')>30*60) {
sayReply ($add_word.'Текущие координаты неизвестны',2);
} else {
sayReply ($add_word.'Сохраняю координаты Сергея',2);
$tmp=explode(',',gg('Alien.Coordinates'));
$rec=array();
$rec['TITLE']='Координаты Сергея '.date('Y-d-m H:i');
$rec['LAT']=$tmp[0];
$rec['LON']=$tmp[1];
$rec['RANGE']=500;
SQLInsert('gpslocations',$rec);
}
|
|
|
Установи
Pattern: (У|у)станови|(В|в)ыставь
Code
sayReply('Что именно установить?',2);
|
Установи влажность
Pattern: ((У|у)станови|(В|в)ыставь) влажность|(В|в)лажность
Code
sayReply("Где установить влажность?",2);
|
Установи влажность в зоне
Pattern: ((У|у)станови|(В|в)ыставь) влажность в (зоне|комнате)|(В|в)лажность в (зоне|комнате)|в (зоне|комнате)
Code
sayReply("В какой зоне установить влажность?",2);
|
Установи влажность в зоне детская
Pattern: ((У|у)станови|(В|в)ыставь) влажность в (зоне|комнате) детская|(В|в)лажность в (зоне|комнате)|в (зоне|комнате) детская|детская
Code
sayReply("Какую установить влажность?");
|
на
Code
sayReply("Устанавливаю влажность в зоне детская на $matches[1] процентов",2);
sg("Children.ControlHumidity", $matches[1]);
|
Установи влажность в зоне детская на
Pattern: ((У|у)станови|(В|в)ыставь) влажность в (зоне|комнате) детская на (\d+)
Code
sayReply("Устанавливаю влажность в зоне детская на $matches[8] процентов",2);
sg("Children.ControlHumidity", $matches[8]);
|
|
|
|
Установи минимальный уровень пуш-уведомлений
Pattern: (У|у)станови (режим|уровень) уведомлений (в|на) (\d+)
Code
sayReply ("Устанавливаю минимальный уровень для уведомлений на $matches[6].",2);
sg("ThisComputer.minPushLevel", $matches[6]);
|
Установи температуру
Pattern: ((У|у)станови|(В|в)ыставь) (Т|т)емпературу|(Т|т)емпературу
Code
sayReply("Где установить температуру?",2);
|
Установи температуру в зоне
Pattern: ((У|у)станови|(В|в)ыставь) (Т|т)емпературу в (зоне|комнате)|(Т|т)емпературу в (зоне|комнате)|в (зоне|комнате)
Code
sayReply ("В какой зоне установить температуру?",2);
|
Установи температуру в зоне детская
Pattern: ((У|у)станови|(В|в)ыставь) температуру в (зоне|комнате) детская|(Т|т)емпературу в (зоне|комнате)|в (зоне|комнате) детская|детская
Code
sayReply ("Какую установить температуру?",2);
|
на
Code
sayReply ("Устанавливаю температуру в зоне детская на $matches[1] градусов",2);
sg("Children.ControlTemperature", $matches[1]);
|
Установи температуру в зоне детская на
Pattern: ((У|у)станови|(В|в)ыставь) температуру в (зоне|комнате) детская на (\d+)
Code
sayReply("Устанавливаю температуру в зоне детская на $matches[8] градусов",2);
sg("Children.ControlTemperature", $matches[8]);
|
|
|
|
|