((А|а)лиса|(А|а)лиска|(Э|э)лис|(А|а)лисочка)
Шаблон: ((А|а)лиса|(А|а)лиска|(Э|э)лис|(А|а)лисочка)
Код
say("Да. Чем я могу помочь?",2);
|
поздоровайся
Шаблон: (поздоровайся)|(скажи привет)|(представься)
Код
say("Меня зовут Алиса. Я являюсь программой управления этим домом. Всегда к вашим услугам.",2);
|
помощь
Код
$actions=$this->getAvailableActions();
$total=count($actions);
for($i=0;$i<$total;$i++) {
say($actions[$i]);
}
|
проверка связи
Код
say("Да слышу я. Слышу...",2);
|
|
(Р|р)асскажи|(С|с)кажи|(К|к)ак(ой|ая)|Сколько
Шаблон: (Р|р)асскажи|(С|с)кажи|(К|к)ак(ой|ая)|Сколько
|
день недели
Шаблон: день недели|сегодня день недели
Код
$days=array('воскресенье','понедельник','вторник','среда','четверг','пятница','суббота');
$day_num=(int)date('w');
$day_of_week=$days[$day_num];
say("Сегодня - ".$day_of_week, 1);
|
курс валют
Код
|
Погода голосом
Шаблон: (О|о) погоде|пого(ду|да)
Код
$status="";
$status.="Сегодня ".gg("ow_fact.weather_type").".";
say($status,1);
$status="";
$w=round(gg("ow_fact.temperature"));
$tempw=$w;
if($tempw >= 11 and $tempw <= 14){
$tempcels=" градусов ";
}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}
if($tempw == 0 or $tempw >= 5 and $tempw <= 9){
$tempcels= градусов ; }
if($tempw == 1){
$tempcels= градус ; }
if($tempw >= 2 and $tempw <= 4){
$tempcels= градуса ; }
}
$tNew = abs((float)getGlobal('ow_fact.temperature'));
$status.=' Температура '.getGlobal('ow_fact.temperature')." ".$tempcels." цельсия";
say($status,1);
$tempw="";
$tempcels="";
$status="";
$h=round(gg("ow_fact.humidity"));
$tempw=$h;
if($tempw >= 11 and $tempw <= 14){
$tempcels=" процентов ";
}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}
if($tempw == 0 or $tempw >= 5 and $tempw <= 9){
$tempcels= процентов ; }
if($tempw == 1){
$tempcels= процент ; }
if($tempw >= 2 and $tempw <= 4){
$tempcels= процента ; }
}
$status.="Относительная влажность ".gg("ow_fact.humidity")." ".$tempcels. ".";
say($status,1);
$tempw="";
$tempcels="";
$status="";
$pressure=(float)gg("ow_fact.pressure_mmhg");
if ($pressure<728) {
$status.=' Атмосферное давление пониженное';
} elseif ($pressure>768) {
$status.=' Атмосферное давление повышенное.';
} else {
$status.=' Атмосферное давление нормальное.';
}
say($status,1);
$status="";
//ветер
$WindSpeed=(float)gg("ow_fact.wind_speed");
if ($WindSpeed<1) {
$status.=' Ветра нет.';
} elseif ($WindSpeed<3) {
$status.=' Ветер слабый.';
} elseif ($WindSpeed<6) {
$status.=' Ветер сильный.';
} elseif ($WindSpeed<9) {
$status.=' Ветер очень сильный.';
} else {
$status.=' Ветер очень! Очень сильный.';
}
say($status,1);
|
расскажи анекдот
Код
|
Сколько времени
Шаблон: время|часов|времени
Код
say('Сейчас '.timeNow(),5);
|
|
Википедия
Код
$keywords = preg_split("/[\s,]+/",$original);
$total=count($keywords);
for($i=0;$i<$total;$i++) {
$message_text=$message_text." \nСлово №".$i.": ".$keywords[$i];
}
// Получаем переменные из шаблона с помощь встроенных функций.
$total=count($matches);
$message_text="Вся строка с переменными: ".$matches[0] . "
Количество переменных: ".$total."
Переменная №1: ".$matches[1];
say("$matches[1],секунду,ищу по википедии ",2);
// Установка свойства объекта на основании полученной переменной
sg("Объект.Свойство",$matches[1]);
context_getuser();
context_clear();
context_activate(ID);
$zap="$matches[1]";
$zapurl=urlencode($zap);
$url='http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->Section->Item->Description;
echo $otvet;
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
say($otvet,2);
|
Включи или выключи
Шаблон: (^включи|^выключи)
Код
say('Что именно '.$original.'ть?',1);
|
музык
Код
say('Включаю музыку',1);
runScript('playFavoriteMusic');
|
Свет
Шаблон: (Люстру|лампочку|(с|ц)вет|освещение)
Код
|
В детской
Код
if (preg_match('/включи/uis',$original)) {
say('Включаю свет в детской',1);
sleep(3);
callMethod('Relay16.turnOn');
} elseif (preg_match('/выключи/uis',$original)) {
say('Выключаю свет в детской',1);
sleep(3);
callMethod("Relay16.turnOff");
} else {
say('Непонятно что со светом в детской: '.$original,1);
}
|
В зале
Код
if (preg_match('/включи/uis',$original)) {
say('Включаю свет в зале',1);
sleep(3);
callMethod('Relay18.turnOn');
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто вкл'));
} elseif (preg_match('/выключи/uis',$original)) {
say('Выключаю свет в зале',1);
sleep(3);
callMethod("Relay18.turnOff");
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто выкл'));
} else {
say('Непонятно что со светом в зале: '.$original,1);
}
|
В коридоре
Код
if (preg_match('/включи/uis',$original)) {
say('Включаю свет в коридоре',1);
// sleep(3);
// callMethod('Relay18.turnOn');
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто вкл'));
} elseif (preg_match('/выключи/uis',$original)) {
say('Выключаю свет в коридоре',1);
// sleep(3);
// callMethod("Relay18.turnOff");
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто выкл'));
} else {
say('Непонятно что со светом в коридоре: '.$original,1);
}
|
В спальне
Код
if (preg_match('/включи/uis',$original)) {
say('Включаю свет в спальне',1);
sleep(3);
callMethod('Relay12.turnOn');
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто вкл'));
} elseif (preg_match('/выключи/uis',$original)) {
say('Выключаю свет в спальне',1);
sleep(3);
callMethod("Relay12.turnOff");
// cm('RelayHallLight2.sendMessage', array('whosent'=>'авто выкл'));
} else {
say('Непонятно что со светом в спальне: '.$original,1);
}
|
|
|
Включи радио
Шаблон: (включи радио|переключи радио*|смени радио|другая радио* станция)
Код
say("Какую станцию вы хотели бы послушать: Ретро фм, Авторадио, или другую");
|
|
Выключи радио
|
Где (сейчас)
Шаблон: (где сейчас)|(где)
Код
//say ("Место положение кого именно интересует? Хотя пока я знаю только о Славе!",1);
//setTimeOut("answer_","runScript('AutoRemoteMessage');",3);
|
Андрей
Шаблон: (андрей(.*)|андрюша(.*)|хозяин)
Код
if (time()-gg('Andrey.CoordinatesUpdatedTimestamp')>2*60*60) {
say("Извините, координаты устарели. Последне место нахождения Андрея - ".gg('Andrey.Location'),1);
} elseif (gg('Andrey.seenAt')!='') {
say("Место нахождения Андрея - ".gg('Andrey.seenAt'),1);
} else {
say("Место нахождения Андрея - ".gg('Andrey.Location'),1);
}
|
Анжела
Шаблон: (анжела(.*)|анжелика(.*)|анжелочка)
Код
if (time()-gg('Angela.CoordinatesUpdatedTimestamp')>2*60*60) {
say("Извините, координаты устарели. Последне место нахождения Анжелы - ".gg('Angela.Location'),1);
} elseif (gg('Angela.seenAt')!='') {
say("Место нахождения Анжелы - ".gg('Angela.seenAt'),1);
} else {
say("Место нахождения Анжелы - ".gg('Angela.Location'),1);
}
|
Лена
Шаблон: (лена(.*)|леночка(.*)|дочка)
Код
if (time()-gg('Lena.CoordinatesUpdatedTimestamp')>2*60*60) {
say("Извините, координаты устарели. Последне место нахождения Лены - ".gg('Lena.Location'),1);
} elseif (gg('Lena.seenAt')!='') {
say("Место нахождения Лены - ".gg('Lena.seenAt'),1);
} else {
say("Место нахождения Лены - ".gg('Lena.Location'),1);
}
|
|
говор(и|ит)
|
голосом
Код
setGlobal('minMsgLevel',1);
say('Окей',1);
|
|
давай приготовим
Шаблон: (Д|д)авай приготовим (.+)
Код
require_once './lib/simple_html_dom.php';
$queryString = $matches[2];
$queryString='пиво';
/*
$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']);
echo $recipesList[$recipeNumber]['text']."";
$recipe['link'] = $recipesList[$recipeNumber]['link'];
$recipe['name'] = $recipesList[$recipeNumber]['text'];
sayRecipe($recipe);
} else {
say('Ничего не найдено.',1);
}
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']);
say($recipe['name'],1);
if (!empty($recipe['description'])) {
foreach ($recipe['description'] as $e) {
say($e,1);
}
}
$ingrstr = 'Нам понадобится: ';
foreach ($recipe['ingredients'] as $e) {
$ingrstr .= $e . ', ';
}
say($ingrstr,1);
say('Способ приготовления:',1);
foreach ($recipe['preparing'] as $e) {
say($e,1);
}
}
function getRecipes($recipeLink) {
if (empty($recipeLink)) {
return FALSE;
}
$ingredients = array();
$html = @file_get_html($recipeLink);
//kolvo definition-list-table__td definition-list-table__td_value
$ingredientsdom=($html->find(".definition-list-table__tr span span"));
$ingskolvodom=($html->find(".definition-list-table__td_value"));
//$ingredientsdom=($html->find("a"));
$count=count($ingredientsdom);
echo "Count=".$coun."";
for ($i = 1; $i <= $count; $i++)
{
echo "Count member:".$i."";
$ingr= $ingredientsdom[$i]->outertext;
$ingrkolvo=$ingskolvodom[$i]->outertext;
$ingredients[]=strip_tags($ingr." ".$ingrkolvo);
var_dump($ingr);
var_dump($ingrkolvo);
}
$description = array();
$descriptiondom=($html->find(".content-box__content .plain-text p"));
foreach($descriptiondom as $descdom)
{$description[] = strip_tags($descdom->outertext);}
$preparing=array();
$preparingdom=$html->find(".js-mediator-article .plain-text");
$i=0;
foreach($preparingdom as $prepdom)
{if($i>0) {$preparing[]=strip_tags($prepdom->outertext);}
$i++;
}
echo "Prepairing..";
var_dump($preparing);
$recipe = array(
'description' => $description,
'ingredients' => $ingredients,
'preparing' => $preparing
);
return $recipe;
}
function findRecipes($queryString, $params) {
if (empty($queryString)) {
return FALSE;
}
$addurl="http://www.edimdoma.ru";
$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_html($url);
//$articles=$html->find('main.card__content') ;
$articles=$html->find('div.card__description') ;
$links = array();
foreach ($articles as $container) {
$linkss=array();
$intext=$container->innertext;
$sub=' ';
$text=strip_tags(substr($intext,0,strpos($intext,$sub)));
preg_match_all('/href="([^"]+)"/', $intext, $linkss);
$href= str_replace('"','',$addurl .str_replace('href=','',$linkss[0][0]));
$links[] = array(
'link' => $href,
'text' => $text
);
}//foreach ($articles as $container)
unset($articles);
return $links;
}
|
Доброе утро
Код
callMethod('NightMode.deactivate');
say('Доброе утро!',1);
|
ёлочка зажгись
Шаблон: елочка зажгись|ёлочка зажгись|елочка гори|ёлочка гори
Код
callMethod('Relay22.turnOn'); // включаем ёлку
say('Да прибудет с вами праздник и хорошее настроение',2);
|
ёлочка потухни
Шаблон: ёлочка потухнет|ёлочка патухни|ёлочка погасни
Код
say('Как жалко, ладно и я отдохну',2);
callMethod("Relay22.turnOff");
|
Забудь
Шаблон: (^забудь$)|(^отменить$)
Код
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
say('Контекст забыт.');
|
Запомни
Код
$text = $matches[1];
$filename = "/media/pi/3A30B60230B5C4E3/Dropbox/memory.txt";
say(getRandomLine('ok')." Всё запоминаю в Dropbox, в файл memory.txt",1);
runScript("InFile",array("subject"=>"Текст:", "body"=>$text, "filename"=>$filename ));
|
Кто дома
Шаблон: (кто|кто сейчас) дома
Код
$user=getObjectsByClass("Users");
$total=count($user);
for($i=0;$i<$total;$i++) {
$user[$i]['atHome']=getGlobal($user[$i]['TITLE'].'.atHome');
$user[$i]['user']=getGlobal($user[$i]['TITLE'].'.fullName');
if ($user[$i]['atHome']) {
$res_user[]=$user[$i]['user'];
}
}
if ($res_user){
$isHomeText="Сейчас дома: ".implode(" и ",$res_user);
}else{
$isHomeText="Из тех, кого я знаю, здесь никого нет.";
}
sayReply($isHomeText,1);
|
Молчи
Шаблон: (молчи)|(замолкни)|(закрой рот)
Код
setGlobal('minMsgLevel',2);
say('Окей',2);
|
Мы пришли
Код
ClearTimeOut("nobodyHome");
SetTimeOut("nobodyHome","callMethod('NobodyHomeMode.activate');", 30*60);
if (getGlobal('NobodyHomeMode.active')) {
callMethod('NobodyHomeMode.deactivate');
}
|
Мы уезжаем
Шаблон: (мы|все) (уехали|уезжаем)
Код
callMethod('NobodyHomeMode.activate');
|
Напоминание
Шаблон: Напомни через (\d+) минут(|у|ы) (.+)
Код
$rnumber = 1;
while (1) {
$rname = "Reminder_$rnumber";
if (!timeOutExists($rname))
break;
$rnumber++;
}
setTimeOut($rname,'say("Напоминаю: '.$matches[3].'", 2);',$matches[1]*60);
sayReply("Принято напоминание - напомнить через $matches[1] минут: $matches[3]", 2);
sayReply("Постараюсь не забыть!", 2);
|
Повтори
Шаблон: (^повтори|^скажи)(\s*)(.+)
Код
|
Поставь будильник
Шаблон: ((В|в)ключи|(П|п)оставь|(У|у)станови|(З|з)аведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
Код
$h=$matches[6];
$m=$matches[10];
$hh=$h;
if ($h<10) {$h="0".$h;}
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",1);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",1);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",1);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
|
сдела(й|ть)
|
громче
Шаблон: (громче)|(погромче)
Код
$vol = gg("ThisComputer.volumeLevel");
if ($vol < 100){
sg("ThisComputer.volumeLevel",$vol+10);
say("Делаю громче",1);
} else {
sg("ThisComputer.volumeLevel",100);
say("Громкость 100%",1);
}
|
тише
Код
$vol = gg("ThisComputer.volumeLevel");
if ($vol > 10){
sg("ThisComputer.volumeLevel",$vol-10);
say("Делаю тише",1);
} else {
sg("ThisComputer.volumeLevel",0);
say("Громкость 0%",1);
}
|
|
Состояние системы
Шаблон: ((^состояние).*)|(^статус$)|(^как ты)|((^как).*(дела))|(^что у нас)
|
Спокойной ночи
Код
say('И Вам Спокойной ночи!',1);
callMethod('NightMode.activate');
|
Что запомнила
Шаблон: (что запомнила|из файла|что помнишь)
Код
$arr = file("/media/pi/3A30B60230B5C4E3/Dropbox/memory.txt");
for($i = 0; $i < count($arr); $i++)
{
sayReply($arr[$i],5);
}
|