ArmedMode ON/OFF
|
Если режим "Охрана"
if (getGlobal('ManualMode.active') == 0) {
setGlobal('ManualMode.active', '1');
}
if (getGlobal('SecurityArmedMode.active') == 1) {
runScript('MotionSensorRest');
getURL((String) 'http://'.(String) getGlobal('Controller00.ip').(String) '/?ARM=on', 0);
} else {
setGlobal('Corridor.light1', '1');
runScript('LightAll');
getURL((String) 'http://'.(String) getGlobal('Controller00.ip').(String) '/?ARM=off', 0);
}
// Меняем громкость и уровень важности сообщений
rs(WakeUp, array('msg' => 'Охрана'));
|
Auto ON/OFF
|
Включает/Выключает режим Автоматика
if (getGlobal('SecurityArmedMode'.'.'.'active') == 1) {
setGlobal('ManualMode'.'.'.'active', '1');
say('Система работает в автоматическом режиме, так как включена сигнализация', 2);
} else {
if (getGlobal('ManualMode'.'.'.'active') == 0) {
say('Система работает в ручном режиме.', 2);
} else {
say('Система работает в автоматическом режиме.', 2);
}
}
|
DarknessMode ON/OFF
|
Включает/Выключает режим Темно
if (gg('DebugMode.active') == 1) {
DebMes('Скрипт DarknessModeONOFF');
}
if (gg('ManualMode.active') == 1) {
if (gg('SecurityArmedMode.active') == 0) {
if (gg('isDark') == 1) {
//Включить ночной режим
say ("-Ночной режим-", 1);
// getURL((String) 'http://'.(String) getGlobal('Chumby.ip').(String) '/cgi-bin/custom/setday.sh?30', 0);
// getURL((String) 'http://'.(String) getGlobal('Chumby.ip').(String) '/cgi-bin/widget_refresh.sh', 0);
}else{
//Выключить ночной режим
say ("-Дневной режим-", 1);
// getURL((String) 'http://'.(String) getGlobal('Chumby.ip').(String) '/cgi-bin/custom/setday.sh?80', 0);
// getURL((String) 'http://'.(String) getGlobal('Chumby.ip').(String) '/cgi-bin/widget_refresh.sh', 0);
}
}
}else{ //Если сигнализация то выкл ночной
say ("Включаю ночной режим информатора", 1);
// sg("Chumby.Nightmode",1);
// getURL((String) 'http://'.(String) getGlobal('Chumby.ip').(String) '/cgi-bin/zmote_on.sh', 0);
}
|
Econom ON/OFF
|
Включает/Выключает режим Econom
if (gg('DebugMode.active') == 1) {
DebMes('Скрипт EconomONOFF');
}
if (getGlobal('NobodyHomeMode.lock') == 0) {
if (getGlobal('ManualMode.active') == 1) {
if (getGlobal('EconomMode.active') == 1) {
setGlobal('ThisComputer.Econom', '1');
//Если режим включен
} else {
setGlobal('ThisComputer.Econom', '0');
//Если режим выключен
}
}else{
setGlobal('EconomMode.active', '0');
say('Режим "Экономия" выключен, так как система в ручном режиме.',5);
}
if (getGlobal('EconomMode.ReportSms') == 1) {//Если отправлять СМС о переключении режима
// Готовим сообщение
if (getGlobal('myreport.on') == 1) {
if (getGlobal('EconomMode.active') == 1) {
$msg = date("H:i",time())." Вкл режим «Экономия».";
}else{
$msg = date("H:i",time())." Выкл режим «Экономия».";
}
setGlobal("myreport.title", $msg);
if (getGlobal('myreport.sms') == 1) {
setGlobal("myreport.sms_outbox", $msg);
// Отправить сообщения всем подписаным
runScript(SmsSend, array("value" => $msg) );
}
}
}
}
|
EconomModePeriod
|
Данные истории находятся в таблице phistory
http://majordomo.smartliving.ru/forum/viewtopic.php?f=18&t=2105#p18498
/* Данные истории находятся в таблице phistory. Чтобы их от туда взять, нужно знать VALUE_ID нашего Объект.Свойства
Получить его можно разными путями в зависимости от ситуации. Приведу общий способ, который будет работать в любом месте.
Например из сценария, где нет такого указателя как $this. Еще этот код немного расскажет про связь между таблицами в базе данных.
*/
$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0; //накопитель времени в секундах
// Мы знаем имя объекта и имя свойства.
// Имена объектов находятся в таблице objects и они должны быть уникальными
// Для начала нам нужно получить id нашего объекта и id класса которому принадлежит объект
$obj_title = 'EconomMode'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];
/* Имена свойств находятся в таблице properties
с указанием id класса если свойство заданно на уровне класса,
или id объекта если свойство принадлежит объекту лично.
*/
// Получим id свойства по его имени И (id класса ИЛИ id объекта)
$prop_title = 'active'; //имя свойства (поменять на свое!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND (CLASS_ID='".$class_id."' OR OBJECT_ID='".$obj_id."')");
$prop_id = $arr_s['ID'];
// значения свойств находятся в таблице pvalues
// Нам нужен id. (уточнить необходимость сортировки по UPDATED)
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];
/* Зная $pvalue можно слазать за данными истории в таблицу phistory
Для нашей задачи нужно получить все записи по времени >= началу суток + 1 запись
*/
// Получить количество записей за нужный период времени
$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID=".$pvalue." AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");
// Взять это количество записей +1
$arr_s = SQLSelect("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));
$tmr2 = $tmr_now;
// Переберем весь массив
foreach($arr_s as $s) {
$tmr1 = $tmr2;
$tmr2 = strtotime($s['ADDED']);
// Ограничить началом суток
if ($tmr2<$tmr_start) { $tmr2=$tmr_start; }
// Двигаясь вниз по массиву времени складывать отрезки если режим включен
if ($s['VALUE']) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }
}
$period = round( $tmr_mem * 100 / ($tmr_now - $tmr_start) );
setGlobal("EconomMode.period",$period); //запись значения в свойство объекта (поменять на свое!!!!!!!!!!!!!!)
|
eveningGreeting
|
вечернее приветствие - отрабатывает когда датчик засёк вечером первое движение после долгого отсутствия
// возвращаемся вечером домой
say("Добро пожаловать домой!",2);
//setTimeOut('canhelp','runScript("TabletAsk");',10);
// включаем блок зарядок на 1 час
/*callMethod("netping_pwr2.turnon");
clearTimeOut("charging_outlet2");
setTimeOut("charging_outlet2",'callMethod("netping_pwr2.turnoff");',1*60*60);
*/
// если уже темно
if (getGlobal('DarknessMode.active')) {
sleep(5);
say("Темно однако!",2);
/* callMethod("lcw0.turnOn"); // включаем свет в прихожей
callMethod("lcw1.turnOn"); // включаем свет над барной стойкой
*/
//callMethod("lcw3.turnOn"); // включаем подсветку потолка в зале
//callMethod("lcw4.turnOn"); // включаем свет в коридоре
/*callMethod("lcw8.turnOn"); // включаем свет над столом
callMethod("RCOutlet1.turnOn"); // включаем гирлянду в коридоре
callMethod("noo8.turnOn"); // включаем подсветку мебели
callMethod('Orvibo1.turnOn'); //включаем гирлянду
*/
//callMethod("MiLamp2.setColor",array('color'=>'#00ff00')); // свет в цветном светильнике
}
// включаем компьютер
//runScript("WOL");
|
goingIn
|
Сообщил что Кто-то пришел домой
say('Подготавливаю помещение.', 2);
if (gg('ESP826600112836.vdd')<500)
{
say('Я включила на кухне свет потому, что темно.', 2);
RunScript('SwitchKitchen');
}
if (gg('EconomMode.active'==1)) sg('EconomMode.active',0);
// else RunScript('RunAllAfterEconom');
//Say('Включить телевизор?', 1);
//runScript(AlarmSend, array("value" => 'Кто-то дома', "level" => 2) );
callMethod('SecurityArmedMode.deactivate');
callMethod('NobodyHomeMode.deactivate');
|
goingOut
|
Уходим из дома
$confirm=$params['confirm'];
$timeoutValue=5*60;
if (timeOutExists('goingOutTimer') && !$confirm) {
say("Отменяю сценарий ухода из дома.", 2);
clearTimeout('goingOutTimer');
return;
} elseif (!$confirm) {
say("Через $timeoutValue секунд я перейду в режим экономии. Всего хорошего!",2);
setTimeout('goingOutTimer','runScript("goingOut",array("confirm"=>1));',$timeoutValue);
return;
}
say("Перехожу в режим экономии", 2);
callMethod('NobodyHomeMode.activate');
sg('SecurityArmedMode.status', 1);
RunScript('TurnOffLights');
|
GuestsMode
|
Включает/Выключает режим Гости
if (gg('DebugMode.active') == 1) {
DebMes('Скрипт GuestsMode');
}
set_time_limit(120);
//Отключаем ручной режим управления светом
rs('HandSwitchLightModeOff');
if (gg('GuestsMode.lock') == 0) {
if (gg('ManualMode.active') == 1) {
if (gg('GuestsMode.active') == 1) {
sg('ThisComputer.GuestsMode', '1');
//Если режим включен
//Включаем свет везде
rs('LightAllOn');
//Сбрасываем громкость и важность
if (gg('SleepMode.active') == 0) {
rs(WakeUp, array('msg' => 'У нас гости'));
}
//Включаю музыку
rs('playFavoriteMusic');
} else {
sg('ThisComputer.GuestsMode', '0');
//Если режим выключен
}
}else{
sg('GuestsMode.active', '0');
say('Режим "Гости" выключен, так как система в ручном режиме.',10);
}
if (gg('GuestsMode.ReportSms') == 1) {//Если отправлять СМС о переключении режима
// Готовим сообщение
if (gg('myreport.on') == 1) {
if (gg('GuestsMode.active') == 1) {
$msg = date("H:i",time())." Вкл режим «Гости».";
}else{
$msg = date("H:i",time())." Выкл режим «Гости».";
}
sg("myreport.title", $msg);
if (gg('myreport.sms') == 1) {
sg("myreport.sms_outbox", $msg);
// Отправить сообщения всем подписаным
rs(SmsSend, array("value" => $msg) );
}
}
}
}
|
HandSwitchLightModeOff
|
Выключает все флаги HandSwitchMode в помещениях
if (gg('DebugMode.active') == 1) {
say('scripts HandSwitchModeOff');
}
$Rooms=getObjectsByClass("Rooms");
$total=count($Rooms);
for($i=0;$i<$total;$i++) {
if (gg($Rooms[$i]['TITLE'].'.HandSwitchLightMode')=='1') {
sg($Rooms[$i]['TITLE'].'.HandSwitchLightMode',0);
}
}
|
hello_world
|
вместо будильника
say('Утро доброе!');
sleep(3);
say('Сейчас '.timeNow());
sleep(5);
RunScript('readWeatherToday'); //о погоде
sleep(15);
if (gg('RMPro.state')==0) {
CallMethod('AutoMode.activate');
Say('Открываем шторы');
// RunScript('Zhaluzion');
sleep(3);
Say('Включаем телевизор');
// RunScript('WatchTV');
sleep(1);
if (gg('DarknessMode.active')==1) {
Say('Включаем подсветку');
// RunScript('TurnLightsOn');
}
//callMethod('MS1.play');
CallMethod('AutoMode.deactivate');
} else Say('RM Pro недоступен');
|
isWorking
|
рабочий день или выходной
//$i = 0 — рабочий день;
//$i = 2 — праздничный/нерабочий день;
//$i = 3 — сокращенный на 1 час рабочий день.
$json = file_get_contents('http://basicdata.ru/api/json/calend/');
$array = json_decode($json, true);
$year = idate(Y);
$month = idate(m);
$day = idate(d);
$weekend = idate(w);
$i = $array["data"][$year][$month][$day]["isWorking"];
$w=0;
$param = 'Рабочий день';
if($i==3) $param = 'Cокращенный рабочий день';
if ($weekend==6 || $weekend==0) {
$param = 'Выходной день';
$w=1;
}
if($i==2) {
$param = 'Праздник';
$w=1;
}
setGlobal('ThisComputer.isWorking',$param);
if ($w==1 && !getGlobal('WeekendMode.active')) callMethod('WeekendMode.activate');
if ($w<>1 && getGlobal('WeekendMode.active')) callMethod('WeekendMode.deactivate');
|
NobodyHome
|
say('Включаю режим экономии', 2);
callMethod('EconomMode'.'.'.'activate');
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
runScript('manageWebCamMotion', array('start'=>'1'));
}
|
SecurityArmed
|
Включает режим "Тревога"
http://connect.smartliving.ru/profile/572/scripts.html#
if (gg('DebugMode.active') == 1) {
DebMes('Сценарий SecurityArmed');
//say('Включаю режим Тревога',0);
}
// Меняем громкость и уровень важности сообщений
rs(WakeUp, array('msg' => 'Охрана'));
$rooms=getObjectsByClass("Rooms");
$total=count($rooms);
for($i=0;$i<$total;$i++) {
$rooms[$i]['room']=gg($rooms[$i]['TITLE'].'.Title');
if (!$rooms[$i]['room']) {
$rooms[$i]['room']=$rooms[$i]['TITLE'];
}
$rooms[$i]['active']=gg($rooms[$i]['TITLE'].'.SomebodyHere');
$rooms[$i]['time']=gg($rooms[$i]['TITLE'].'.LatestActivity');
$rooms[$i]['diff']=time()-$rooms[$i]['time'];
$rooms[$i]['Armed']=gg($rooms[$i]['TITLE'].'.Armed'); ;
// Проверяем наличие свойства Armed для помещения. Это свойство указывает на уровень охраняемости помещения
if ($rooms[$i]['Armed']==""){
SetGlobal($rooms[$i]['TITLE'].'.Armed',0); // Устанавливаем 0 если нету Armed
say("Установленно свойство \"охрана\" для помещения ".$rooms[$i]['room'],0);
say("По умолчанию помещение ".$rooms[$i]['room']." не охраняется",0);
}
// Если свойство Armed для помещения 0 то завершаем.
if ($rooms[$i]['Armed']==0){
if ($rooms[$i]['active']==1) {
say("Внимание! Движение вне охраняемой зоны. ".$rooms[$i]['room'],0);
runScript(MotionSensorRest);// Сбрасываем состояние датчиков
return;
}
}
}
if (!function_exists('cmp')) {
function cmp($a, $b)
{
if ($a['diff'] == $b['diff']) {
return 0;
}
return ($a['diff'] < $b['diff']) ? -1 : 1;
}
}
usort($rooms,"cmp");
if (!$rooms[0]['active']) {
// $ArmedText="Никого нет дома. Были в ".date('H:i',$rooms[0]['time'])." (".$rooms[0]['room'].")";
} else {
$res_rooms=array();
for($i=0;$i<$total;$i++) {
if ($rooms[$i]['active']) {
$res_rooms[]=$rooms[$i]['room'];
}
}
$ArmedText=" Тревога! Движение ".implode(", ",$res_rooms);
setGlobal('SecurityArmedMode.ArmedRooms', $ArmedText);
rs(MotionSensorRest);// Сбрасываем состояние датчиков
// Готовим сообщение
//if (getGlobal('myreport.on') == 1) {
//$msg = date("H:i",time()).$ArmedText;
//}
//setGlobal("myreport.title", $msg);
//if (gg('myreport.sms') == 1) {
// setGlobal("myreport.sms_outbox", $msg);
// Отправить сообщения всем подписаным
//rs(SmsSend, array("value" => $msg) );
//}
}
|
SleepMode
|
Включает|Выключает режим "Все спят"
if (gg('DebugMode.active') == 1) {
say('scripts SleepMode');
}
set_time_limit(120);
//Отключаем ручной режим управления светом
rs('HandSwitchLightModeOff');
if (gg('SleepMode.lock') == 0) {
if (gg('ManualMode.active') == 1) {
if (gg('SleepMode.active') == 1) {
sg('ThisComputer.somebodyHomeText', 'Похоже все спят');
sg('ThisComputer.somebodyHome', '1');
sg('ThisComputer.nobodyHome', '0');
// Отправляем стикер
rs('SendSticker',array('Sticker'=>'good_night'));
//Переключаем розетки
$ESocket=getObjectsByClass("ElectricSocket");
$total=count($ESocket);
for($i=0;$i<$total;$i++) {
$ESocket[$i]['Sleep']=getGlobal($ESocket[$i]['TITLE'].'.react_to_SleepMode');
$ESocket[$i]['esstatus']=getGlobal($ESocket[$i]['TITLE'].'.esstatus');
if ($ESocket[$i]['Sleep']) {
SetGlobal($ESocket[$i]['TITLE'].'.esstatus',0);
}
}
rs('LightAllOff');
}else{
// Отправляем стикер
rs('SendSticker',array('Sticker'=>'hello'));
callMethod('EconomMode.deactivate'); //Отключаем режим экономии
sg('ThisComputer.somebodyHome', '1');
sg('ThisComputer.nobodyHome', '0');
//Переключаем розетки
$ESocket=getObjectsByClass("ElectricSocket");
$total=count($ESocket);
for($i=0;$i<$total;$i++) {
$ESocket[$i]['Sleep']=gg($ESocket[$i]['TITLE'].'.react_to_SleepMode');
$ESocket[$i]['esstatus']=gg($ESocket[$i]['TITLE'].'.esstatus');
if ($ESocket[$i]['Sleep']) {
sg($ESocket[$i]['TITLE'].'.esstatus',1);
}
}
}
//система в ручном режиме
}else{
sg('SleepMode.active', '0');
say('Режим "Все спят" игнорирован, так как система в ручном режиме.',2);
sg('ThisComputer.somebodyHomeText', 'Система в ручном режиме');
}
// Меняем громкость и уровень важности сообщений
if (gg('SleepMode.active') == 0) {
rs(WakeUp, array('msg' => 'Все спят'));
}
if (gg('SleepMode.ReportSms') == 1) {//Если отправлять СМС о переключении режима
// Готовим сообщение
if (gg('myreport.on') == 1) {
if (gg('SleepMode.active') == 1) {
$msg = date("H:i",time())." Вкл режим «Все спят».";
}else{
$msg = date("H:i",time())." Выкл режим «Все спят».";
}
sg("myreport.title", $msg);
if (gg('myreport.sms') == 1) {
sg("myreport.sms_outbox", $msg);
// Отправить сообщения всем подписаным
rs(SmsSend, array("value" => $msg) );
}
}
}
}
|
SomebodyHome
|
callMethod('EconomMode'.'.'.'deactivate');
//say('Здравствуйте!', 2);
runScript('reportStatus', array());
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
ControlGPS
|
проверка и слежение за пользователями при выставленном флаге
Пока у меня андройд
if ($params['tm0'] == "0") { return; } // не следим совсем
$tm0 = (isset($params['tm0']) && ($params['tm0'] != 0)) ? $params['tm0'] : 1; // @tm0 - период времи обновления при нахождении вне установленных тут мест, в минутах
$tm1 = (isset($params['tm1']) && ($params['tm1'] != 0)) ? $params['tm1'] : 1; // @tm1 - период времи обновления при нахождении дома
$tm2 = (isset($params['tm2']) && ($params['tm2'] != 0)) ? $params['tm2'] : 1; // @tm2 - период времи обновления при нахождении в хостеле
$tm3 = (isset($params['tm3']) && ($params['tm3'] != 0)) ? $params['tm3'] : 1; // @tm3 - период времи обновления при нахождении в офисе
$m = date('i',time());
// переберем пользователей для проверки включенно ли слежение GPS
$objects = getObjectsByClass("Users");
foreach($objects as $obj) {
$user = $obj['TITLE'];
// Если нужно следить за User через GPS по iCloud
if (gg($user.'.monitor') == 1) {
$AppleDevNum = (gg($user.'.AppleDevNum')=='') ? 0 : gg($user.'.AppleDevNum');
// если не дома то проверим где
if (gg($user.'.atHome') == 0) {
switch (gg($user.'.seenAt')) {
case "Автотаун":
if (!($m%$tm3)) {
findMyiPhone(gg($user.'.AppleID'), dsCrypt(gg($user.'.ApplePass'),true));
}
say("Автотаун");
break;
case "хостел КЛЮЧЕВОЙ":
if (!($m%$tm2)) {
findMyiPhone(gg($user.'.AppleID'), dsCrypt(gg($user.'.ApplePass'),true));
}
//say("Хостел");
break;
default:
if (!($m%$tm0)) {
findMyiPhone(gg($user.'.AppleID'), dsCrypt(gg($user.'.ApplePass'),true));
}
//say("не дома");
}
// если дома то через $tm1 минут
} else {
if (!($m%$tm1)) {
findMyiPhone(gg($user.'.AppleID'), dsCrypt(gg($user.'.ApplePass'),true));
}
}
}
}
|
if_user_enter_or_exit
|
если пользователь пришел/ушел куда-либо, и приложение IF создало файл в Dropbox вида: _user_enter/exit_home
// установим внутреннюю кодировку символов
mb_internal_encoding("UTF-8");
$fn = explode("_", $params['FILENAME']); // раскладываем имя файла в массив
//say ("0 - ".$fn[0],-1); // путь к файлу
//say ("1 - ".$fn[1],-1); // имя User
//say ("2 - ".$fn[2],-1); // что сделал: enter/exit
//say ("3 - ".$fn[3],-1); // куда пришел/ушел
$user='unknown';
// переберем всех пользователей
$objects=getObjectsByClass("Users");
foreach($objects as $obj) {
// проверим, может это главное имя и перебирать альтернативы имён тогда не надо!
if (gg($obj['TITLE'].".fullName")==$fn[1]) {
$user=$obj['TITLE'];
} else {
$altName=gg($obj['TITLE'].'.altName');
// проверим - а есть-ли в альтернативных именах такая подстрока?
$inc = mb_stripos($altName,$fn[1]);
$user = ($inc === false) ? $user : $obj['TITLE'];
}
}
$gender=gg($user.'.gender');
$ending1=($gender<>'ж') ? 'ёл' : 'ла';
if ($fn[2]=='enter') {
switch ($fn[3]) {
case 'home':
callMethod($user.'.gotHome');
say (gg($user.'.fullName').' приш'.$ending1.' домой.',-1);
sg ($user.'.seenAt',"Дом");
// отключим слежение - раз USER дома (экономия батареи)
sg ($user.'.monitor',0);
break;
case 'office':
say (gg($user.'.fullName').' приш'.$ending1.' в офис.',-1);
sg ($user.'.seenAt',"Офис");
// отключим слежение - раз USER в офисе (экономия батареи)
sg ($user.'.monitor',0);
break;
default:
//say ("А куда пришел?", -1);
}
} elseif ($fn[2]=='exit') {
switch ($fn[3]) {
case 'home':
callMethod($user.'.outOfHome');
say (gg($user.'.fullName').' уш'.$ending1.' из дома.',-1);
// Включим слежение - раз USER ушел
// sg ($user.".monitor",1);
break;
case 'office':
say (gg($user.'.fullName').' уш'.$ending1.' из офиса.',-1);
// отключим слежение - раз USER в офисе (экономия батареи)
// sg ($user.".monitor",0);
break;
default:
//say ("А от куда ушел?", -1);
}
} else {
//say ("А что сделал-то?", -1);
}
|
whoWhere
|
смотрим кто где
$objects=getObjectsByClass("Users");
$text = "";
foreach($objects as $obj) {
if (getGlobal($obj['TITLE'].".seenAt")<>"") {
$text .= getGlobal($obj['TITLE'].".fullName")." находится в ".getGlobal($obj['TITLE'].".seenAt")." на ".getGlobal($obj['TITLE'].".CoordinatesUpdated").". \n";
} else {
$text .= getGlobal($obj['TITLE'].".fullName")." неизвестно. \n";
}
}
//runScript('sendUserTelegram',$text);
sayReply($text,1);
|
Demo01
|
Здравствуйте, меня зовут Алиса. Я представляю систему умного дома Мажордомо и сейчас расскажу о том, что я знаю и умею.
say('Здравствуйте, меня зовут Алиса.');
say('Я представляю систему умного дома Мажордомо.');
say('И сейчас расскажу о том, что я знаю и умею.');
sleep(1);
setTimeOut('DemoTimer',"runScript('Demo02')",1);
|
Demo02
|
Во-первых, я в курсе того, какая температура в разных комнатах и могу регулировать систему отопления, в зависимости от ваших предпочтений. ХХ градусов цельсия -- это оптимальная температура и я отключила подогрев для экономии расхода газа (или: это немного прохладно и я включила подогрев). Влажность воздуха ХХ процентов. Если дома будет сухо, то я включу увлажнитель воздуха. Так же я знаю, что на улице сегодня ХХ дождь,снег, а завтра будет ХХ ясно. Я обязательно предупрежу об этом утром.
//прихожая
$t1=round(gg('ESP82660013d833.dhtt1'));
$h1=round(gg('ESP82660013d833.dhth1'));
//зал
$t2=round(gg('ESP826600112836.dhtt1'));
$h2=round(gg('ESP826600112836.dhth1'));
say('Во-первых, я в курсе того, какая температура и влажность в разных комнатах.');
say('Посмотрите на график в Зале.');
runScript('runCommandHP',array('cmd'=>'explorer "http://192.168.0.10/jpgraph/?p=sensorZal.temp&type=24h&width=1500&height=500"'));
say('Например, сейчас в Зале '.$t2.' градусов цельсия -- это оптимальная температура');
say('Влажность '.$h2.' %.');
say('Если дома будет сухо, то я включу увлажнитель воздуха.');
$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
|
В мои обязанности входит наблюдение за тем, где находятся мои хозяева. Я знаю, что Admin сейчас …, а его жена … Уровень заряда телефона Admin ХХ процентов, а телефона жены ХХ процентов. Если телефон будет разряжен, то я об этом предупрежу. Так же я знаю, когда дома никого нет и когда кто-то приходит домой, чтобы рационально управлять домашними системами.
rs('DemoSay','В мои обязанности входит наблюдение за тем, где находятся мои хозяева.');
//rs('DemoSay','I can show you where they have been for past 24 hours.');
runScript('runCommandHP',array('cmd'=>'explorer http://192.168.1.10/popup/app_gpstrack.html'));
$sergei_location=gg('admin.seenAt');
$sergei_steps=gg('admin.moves_walk_distance');
$sergei_level=gg('admin.BattLevel');
$alesya_location=gg('Svet04ek.seenAt');
$alesya_level=gg('Svet04ek.BattLevel');
$alesya_steps=gg('Svet04ek.moves_walk_distance');
$sergei_location='home';
if ($sergei_location!='') {
rs('DemoSay','Я знаю, что Admin сейчас '.$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','Уровень заряда телефона Admin '.$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','Кстати, об управлении...');
rs('DemoSay','Я могу управлять различными приборами или, например, светом.');
rs('DemoSay','Вот смотрите, я сейчас немного поиграю с освещением.');
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','Кроме управления механизмами, я могу помочь и с развлечением.');
rs('DemoSay',' Например, сейчас включу какую-нибудь музыку из вашей коллекции.');
runScript('playFavoriteMusic');
sleep(15);
runScript('playPause');
sleep(2);
rs('DemoSay',' Или, например, радио.');
runScript('playSomethingCool');
sleep(16);
runScript('playPause');
sleep(2);
rs('DemoSay',' Ну или даже поставить мультфильм для ребёнка.');
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','Ну как, понравилось?');
rs('DemoSay',' А ещё вы можете у меня что-нибудь спросить.');
rs('DemoSay','Я могу найти ответы на вопросы “что такое” или “кто такой”. Попробуйте, спросите!');
sleep(8);
context_activate(62); // ID: из шаблона поведения
|
Demo07
|
Спасибо за внимание и всегда к вашим услугам
rs('DemoSay','Спасибо за внимание и всегда к вашим услугам!');
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, 'ru');
say ($ph,1);
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);
|
runCommandHP
|
выполнение команды на удалённом windows-компьютере
if (is_array($params)) {
$cmd=($params['cmd']);
} else {
$cmd=$params;
}
//$cmd=utf2win($cmd);
//$cmd='"c:\windows\notepad.exe"';
$app='C:\\_majordomo\\apps\PSTools\\PsExec '.getGlobal('ThisComputer.HPNoteCredentials').' '.$cmd;
safe_Exec($app);
|
Тестовый
|
/*
При склонении числа 26 , 36 выводит 2 6, 3 6...
function chti($string, $ch1, $ch2, $ch3){
$ff=Array('0','1','2','3','4','5','6','7','8','9');
if(substr($string,-2, 1)==1 AND strlen($string)>1) $ry=array("0 $ch3","1 $ch3","2 $ch3","3 $ch3" ,"4 $ch3","5 $ch3","6 $ch3","7 $ch3","8 $ch3","9 $ch3");
else $ry=array("0 $ch3","1 $ch1","2 $ch2","3 $ch2","4 $ch2","5 $ch3"," 6 $ch3","7 $ch3","8 $ch3"," 9 $ch3");
$string1=substr($string,0,-1).str_replace($ff, $ry, substr($string,-1,1));
return $string1;
}
*/
// Функция склонения значений чисел на PHP (дни, минуты, часы и тд)...
function chti($num,$period)
{ $numret = $num;
$month = array("месяц","месяца","месяцев");
$day = array("день","дня","дней");
$hour = array("час","часа","часов");
$min = array("минуту","минуты","минут");
$grad = array("градус", "градуса", "градусов");
$proc = array("процент", "процента", "процентов");
$metr = array("метр", "метра", "метров");
if ($period=='month') $titles = $month;
if ($period=='day') $titles = $day;
if ($period=='hour') $titles = $hour;
if ($period=='min') $titles = $min;
if ($period=='grad') $titles = $grad;
if ($period=='proc') $titles = $proc;
if ($period=='metr') $titles = $metr;
$cases = array (2, 0, 1, 1, 1, 2);
return $numret." ".$titles[ ($num%100>4 && $num%100<20)? 2 : $cases[min($num%10, 5)] ];
}
// просто температура
$curtemp = 0;
sayReply(chti(round($curtemp),"grad"), 1);
|
SwitchKitchen
|
if ((getGlobal('ESP826600112836.gpiout12')) =="0")
{
getURL('http://192.168.1.31/gpio?st=1&pin=12', 0);
} else {
getURL('http://192.168.1.31/gpiout?st=0&pin=12', 0);
}
|
SwithHall1
|
if ((getGlobal('ESP826600112836.gpiout13')) =="0")
{
getURL('http://192.168.1.31/gpio?st=1&pin=13', 0);
} else {
getURL('http://192.168.1.31/gpiout?st=0&pin=13', 0);
}
|
SwithHall2
|
if ((getGlobal('ESP826600112836.gpiout14')) =="0")
{
getURL('http://192.168.1.31/gpio?st=1&pin=14', 0);
} else {
getURL('http://192.168.1.31/gpiout?st=0&pin=14', 0);
}
|
SwithHall3
|
if ((getGlobal('ESP826600112836.gpiout16')) =="0")
{
getURL('http://192.168.1.31/gpio?st=1&pin=16', 0);
} else {
getURL('http://192.168.1.31/gpiout?st=0&pin=16', 0);
}
|
TurnOffLights
|
Выключает все освещение
//say('1',1);
if ((getGlobal('ESP826600112836.gpiout12')) =="1")
{
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=12', 0);
}
if ((getGlobal('ESP826600112836.gpiout13')) =="1")
{
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=13', 0);
}
if ((getGlobal('ESP826600112836.gpiout14')) =="1")
{
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=14', 0);
}
if ((getGlobal('ESP826600112836.gpiout16')) =="1")
{
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=16', 0);
}
|
WaterClose
|
Закрывает клапан на полив
if ((getGlobal('ESP826600112836.nasos')) =="1")
{
sg ('ESP826600112836.nasos',"0");
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=1&pin=4', 0);
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=5', 0);
sleep(1);
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=4', 0);
sayReply('Насос закрыла', 1);
runScript(AlarmSend, array("value" => 'Насос закрыла', "level" => 3) );
}else
{
sayReply('Насос закрыт, вы можете открыть его', 1);
runScript(AlarmSend, array("value" => 'Насос закрыт, вы можете открыть его', "level" => 3) );
}
|
WaterOpen
|
Открывает клапан на полив
if ((gg('ESP826600112836.nasos')) =="0")
{
sg ('ESP826600112836.nasos',"1");
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=1&pin=5', 0);
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=4', 0);
sleep(1);
getURL('http://'.gg('ESP826600112836.wanip').'/gpiout?st=0&pin=5', 0);
sayReply('Насос открыла', 1);
runScript(AlarmSend, array("value" => 'Насос открыла', "level" => 3) );
}else
{
sayReply('Насос открыт, закройте его', 1);
runScript(AlarmSend, array("value" => 'Насос был открыт ', "level" => 3) );
}
|
forecast_my_city
|
О погоде на сегодня и завтра
// все работает! с Яндекс погодой
function getconditionrusincl($conditioneng)
{
$condition=$conditioneng;
if ($conditioneng=="overcast") {$condition="пасмурно";}
if ($conditioneng=="clear") {$condition="ясно";}
if ($conditioneng=="cloudy-and-light-rain") {$condition="пасмурно и небольшой дождь";}
if ($conditioneng=="cloudy-and-rain") {$condition="пасмурно и дождь";}
if ($conditioneng=="cloudy") {$condition="облачно";}
if ($conditioneng=="overcast-and-light-rain") {$condition="моросящий дождь";}
if ($conditioneng=="overcast-and-light-snow") {$condition="небольшой снег";}
if ($conditioneng=="partly-cloudy-and-light-rain") {$condition="переменная облачность и небольшой дождь";}
if ($conditioneng=="partly-cloudy-and-light-snow") {$condition="переменная облачность и небольшой снег";}
if ($conditioneng=="partly-cloudy-and-rain") {$condition="переменная облачность с дождем";}
if ($conditioneng=="partly-cloudy-and-snow") {$condition="переменная облачность со снегом";}
if ($conditioneng=="partly-cloudy") {$condition="переменная облачность";}
if ($conditioneng=="overcast-and-rain") {$condition="ливень";}
if ($conditioneng=="overcast-thunderstorms-with-rain") {$condition="гроза";}
return $condition;
}
// Функция склонения значений чисел на PHP (дни, минуты, часы и тд)...
function chti($num,$period)
{ $numret = $num;
$month = array("месяц","месяца","месяцев");
$day = array("день","дня","дней");
$hour = array("час","часа","часов");
$min = array("минуту","минуты","минут");
$grad = array("градус", "градуса", "градусов");
$proc = array("процент", "процента", "процентов");
$metr = array("метр", "метра", "метров");
$milimetr = array("миллиметр", "миллиметра", "миллиметров");
if ($period=='month') $titles = $month;
if ($period=='day') $titles = $day;
if ($period=='hour') $titles = $hour;
if ($period=='min') $titles = $min;
if ($period=='grad') $titles = $grad;
if ($period=='proc') $titles = $proc;
if ($period=='metr') $titles = $metr;
if ($period=='millimetr') $titles = $millimetr;
$cases = array (2, 0, 1, 1, 1, 2);
return $numret." ".$titles[ ($num%100>4 && $num%100<20)? 2 : $cases[min($num%10, 5)] ];
}
$condition=getconditionrusincl(gg('yw_mycity.condition'));
$status .= "Сейчас на улице по данным метеослужб " .$condition . ", ";
$w = round(gg("yw_mycity.temp"));
$status .= "температура ".chti($w, 'grad')." цельсия, ";
$w = gg("yw_mycity.temp");
if ($w < -40) {
$status .= 'мы морозов не боимся! ';
} elseif ($w < -30) {
$status .= 'одевайтесь теплее, очень холодно, ';
} elseif ($w < -20) {
$status .= 'самое время есть мороженое, ';
} elseif ($w < -10) {
$status .= 'холодновато, ';
} elseif ($w <- 3) {
$status .= 'не особо холодно, ';
} elseif ($w < 3) {
$status .= 'значит, возможно, гололёд, ';
} elseif ($w < 10) {
$status .= 'прохладно, ';
} elseif ($w < 22) {
$status .= 'тепло, ';
} elseif ($w < 30) {
$status .= 'жарко, ';
} elseif ($w > 30) {
$status .= 'ташкент, ';
}
// Сравнение со вчерашним днем
$tNew = round((float) getGlobal('yw_mycity.temp'));
$tOld = round((float) getHistoryAvg("yw_mycity.temp", strtotime("-1 day")));
$tDelta = abs($tNew - $tOld);
if ($tNew > $tOld) {
$status .= "теплее, чем вчера на " .chti($tDelta, 'grad'). ". ";
} elseif ($tNew < $tOld) {
$status .= "холоднее, чем вчера на " .chti($tDelta, 'grad'). ". ";
} elseif ($tNew == $tOld) {
$status .= "так же как и вчера. ";
}
//Влажность
$h = round(gg("yw_mycity.humidity"));
$status .= "Относительная влажность " .chti($h, 'proc'). ". ";
//Давление
$pressure = (float) gg("yw_mycity.pressure_mm");
if ($pressure < 738) {
$status .= 'Атмосферное давление пониженное';
} elseif ($pressure > 768) {
$status .='Атмосферное давление повышенное';
} else {
$status .= 'Атмосферное давление в пределах нормы';
}
$status .= " ".chti(round($pressure), 'millimetr')." ртутного столба. ";
//Ветер
$WindSpeed = (float) gg("yw_mycity.wind_speed");
if ($WindSpeed < 1) {
$status .= "Ветра нет";
} elseif ($WindSpeed < 2) {
$status .= "Легкий ветер, ";
} elseif ($WindSpeed < 5) {
$status .= "Слабый ветер";
} elseif ($WindSpeed < 8) {
$status .= "Умеренный ветер";
} elseif ($WindSpeed < 10) {
$status .= "Свежий ветер";
} elseif ($WindSpeed < 14) {
$status .= "Сильный ветер";
} elseif ($WindSpeed < 17) {
$status .= "Очень сильный ветер";
} elseif ($WindSpeed < 21) {
$status .= "Ветер очень-очень сильный";
} elseif ($WindSpeed < 28) {
$status .= "Шторм";
} else {
$status .= "Ураган";
}
if ($WindSpeed >= 1) {
$status .= chti(round($WindSpeed), 'metr')." в секунду), ";
//направление ветра
if (gg('yw_mycity.wind_dir')=='n') {$degree = 'севера';}
if (gg('yw_mycity.wind_dir')=='ne') {$degree = 'северо-востока';}
if (gg('yw_mycity.wind_dir')=='e') {$degree = 'востока';}
if (gg('yw_mycity.wind_dir')=='se') {$degree = 'юго-востока';}
if (gg('yw_mycity.wind_dir')=='s') {$degree = 'юга';}
if (gg('yw_mycity.wind_dir')=='sw') {$degree = 'юго-запада';}
if (gg('yw_mycity.wind_dir')=='w') {$degree = 'запада';}
if (gg('yw_mycity.wind_dir')=='nw') {$degree = 'северо-запада';}
$status .= " дующий с " . $degree;
}
$status .= ". ";
// Прогноз погоды на сегодня
if (timeBetween("01:00", "10:00")) {
$status .= "Сегодня утром ожидается ";
$w = round(gg("yw_mycity.forecast_0_morning_temp_avg"));
$condition=$this->getconditionrus(gg('yw_mycity.forecast_0_morningcondition'));
} elseif (timeBetween("10:00", "14:00")) {
$status .= "Сегодня днем ожидается ";
$w = round(gg("yw_mycity.forecast_0_day_temp_avg"));
$condition=getconditionrusincl(gg('yw_mycity.forecast_0_daycondition'));
} elseif (timeBetween("14:00", "20:00")) {
$status .= "Сегодня вечером ожидается ";
$w = round(gg("yw_mycity.forecast_0_evening_temp_avg"));
$condition=getconditionrusincl(gg('yw_mycity.forecast_0_eveningcondition'));
} else {
$status .= "Сегодня ночью ожидается ";
$w = round(gg("yw_mycity.forecast_0_night_temp_avg"));
$condition=getconditionrusincl(gg('yw_mycity.forecast_0_nightcondition'));
}
$status .= chti($w, 'grad')." цельсия, " . $condition . ". ";
// Погода на завтра
$w = round(gg("yw_mycity.forecast_1_day_temp_avg"));
$status .= 'Завтра ожидается ' . chti($w, 'grad'). " цельсия, ";
$condition=getconditionrusincl(gg('yw_mycity.forecast_1_daycondition'));
$status .= $condition . ".";
//$cmd_rec = SQLSelectOne("SELECT VALUE FROM yaweather_config where parametr='MSG_LEVEL'");
//$msglevel=$cmd_rec['VALUE'];
say($status, 2);
|
forecast_my_city_now
|
О погоде только на сегодня
// не работает! с Яндекс погодой
say("о погоде");
function getconditionrusincl($conditioneng2){
$condition=$conditioneng;
if ($conditioneng=="overcast") {$condition="пасмурно";}
if ($conditioneng=="clear") {$condition="ясно";}
if ($conditioneng=="cloudy-and-light-rain") {$condition="пасмурно и небольшой дождь";}
if ($conditioneng=="cloudy-and-rain") {$condition="пасмурно и дождь";}
if ($conditioneng=="cloudy") {$condition="облачно";}
if ($conditioneng=="overcast-and-light-rain") {$condition="моросящий дождь";}
if ($conditioneng=="overcast-and-light-snow") {$condition="небольшой снег";}
if ($conditioneng=="partly-cloudy-and-light-rain") {$condition="переменная облачность и небольшой дождь";}
if ($conditioneng=="partly-cloudy-and-light-snow") {$condition="переменная облачность и небольшой снег";}
if ($conditioneng=="partly-cloudy-and-rain") {$condition="переменная облачность с дождем";}
if ($conditioneng=="partly-cloudy-and-snow") {$condition="переменная облачность со снегом";}
if ($conditioneng=="partly-cloudy") {$condition="переменная облачность";}
if ($conditioneng=="overcast-and-rain") {$condition="ливень";}
if ($conditioneng=="overcast-thunderstorms-with-rain") {$condition="гроза";}
return $condition;
}
function getconditionrus($conditioneng)
{
$condition2=getconditionrusincl($conditioneng2);
return $condition2;
}
$text='Сегодня хорошая погода';
$return_full="";
$status="";
$condition=$this->getconditionrus(gg('yw_mycity.condition'));
$status.="Сейчас ".$condition.".";
$return_full.=$status." ";
$status="";
$w=round(gg("yw_mycity.temp"));
$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)gg('yw_mycity.temp'));
$status.='По данным метеослужб температура воздуха '.gg('yw_mycity.temp')." ".$tempcels." цельсия. ";
$return_full.=$status." ";
$tempw="";
$tempcels="";
$status="";
$h=round(gg("yw_mycity.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("yw_mycity.humidity")." ".$tempcels. ".";
$return_full.=$status." ";
$tempw="";
$tempcels="";
$status="";
$pressure=round(gg("yw_mycity.pressure_mm"));
if ($pressure<728) {
$status.=' Атмосферное давление пониженное';
} elseif ($pressure>768) {
$status.=' Атмосферное давление повышенное.';
} else {
$status.=' Атмосферное давление нормальное.';
}
$return_full.=$status." ";
$status="";
//ветер
$WindSpeed=(float)gg("yw_mycity.wind_speed");
if ($WindSpeed<1) {
$status.='Ветра нет.';
} elseif ($WindSpeed<4) {
$status.='Ветер слабый.';
} elseif ($WindSpeed<6) {
$status.='Ветер сильный.';
} elseif ($WindSpeed<9) {
$status.='Ветер очень сильный.';
} else {
$status.='Ветер очень! Очень сильный.';
}
$return_full.=$status." ".round(gg("yw_mycity.wind_speed"))." метра в секунду. ";
$cmd_rec = SQLSelectOne("SELECT VALUE FROM yaweather_config where parametr='MSG_LEVEL'");
$msglevel=$cmd_rec['VALUE'];
say($return_full,$msglevel);
|
say_forecast_all
|
О погоде развернуто (работает)
// Функция склонения значений чисел на PHP (дни, минуты, часы и тд)...
function chti($num,$period)
{ $numret = $num;
$month = array("месяц","месяца","месяцев");
$day = array("день","дня","дней");
$hour = array("час","часа","часов");
$min = array("минуту","минуты","минут");
$grad = array("градус", "градуса", "градусов");
$proc = array("процент", "процента", "процентов");
$metr = array("метр", "метра", "метров");
if ($period=='month') $titles = $month;
if ($period=='day') $titles = $day;
if ($period=='hour') $titles = $hour;
if ($period=='min') $titles = $min;
if ($period=='grad') $titles = $grad;
if ($period=='proc') $titles = $proc;
if ($period=='metr') $titles = $metr;
$cases = array (2, 0, 1, 1, 1, 2);
return $numret." ".$titles[ ($num%100>4 && $num%100<20)? 2 : $cases[min($num%10, 5)] ];
}
// просто температура
$curtemp = 0;
//sayReply(chti(round($curtemp),'grad'), 1);
// про температуру
$w = round(gg("yw_mycity.temp"));
if ($w < -40) {
$stgr.='но, мы морозов не боимся!';
} elseif ($w < -30) {
$stgr.='одевайтесь теплее, очень холодно.';
} elseif ($w < -20) {
$stgr.='самое время есть мороженое.';
} elseif ($w < -10) {
$stgr.='холодновато.';
} elseif ($w <- 3) {
$stgr.='не особо холодно.';
} elseif ($w < 3) {
$stgr.='значит, возможно, гололёд.';
} elseif ($w < 10) {
$stgr.='прохладно.';
} elseif ($w < 22) {
$stgr.='тепло.';
} elseif ($w < 30) {
$stgr.='жарко.';
} elseif ($w > 30) {
$stgr.='ташкент.';
}
$status="Сейчас, около ".chti(round($w), 'grad')." цельсия, ".gg("yw_mycity.conditionrus").", ".$stgr." ";
/*
// Сравнение со вчерашним днем
$tNew = round((float) getGlobal('ow_fact.temperature'));
$tOld = round((float) getGlobal('ow_fact.tempYesterday'));
$tDelta = abs($tNew - $tOld);
if ($tNew > $tOld) {
$status=$status.="теплее, на ".chti($tDelta, 'градус', 'градуса', 'градусов').". ";
} elseif ($tNew < $tOld) {
$status=$status.="холоднее, на ".chti($tDelta, 'градус', 'градуса', 'градусов').". ";
} elseif ($tNew == $tOld) {
$status=$status.= "так же как и вчера. ";
}
*/
// Влажность
$h=round(gg("yw_mycity.humidity"));
$status=$status."Относительная влажность около ".chti(round($h), 'proc').".";
// Давление
$pressure=(float)gg("yw_mycity.pressure_mm");
if ($pressure<738) {
$status=$status.' Атмосферное давление пониженное. ';
} elseif ($pressure>768) {
$status=$status.' Атмосферное давление повышенное. ';
} else {
$status=$status.' Атмосферное давление нормальное. ';
}
// Ветер
$WindSpeed = (float) gg("yw_mycity.wind_speed");
if ($WindSpeed < 1) {
$status=$status."Ветра нет ";
} elseif ($WindSpeed < 2) {
$status=$status."Легкий ветер ";
} elseif ($WindSpeed < 5) {
$status=$status."Слабый ветер ";
} elseif ($WindSpeed < 8) {
$status=$status."Умеренный ветер ";
} elseif ($WindSpeed < 10) {
$status=$status."Свежий ветер ";
} elseif ($WindSpeed < 14) {
$status=$status."Сильный ветер ";
} elseif ($WindSpeed < 17) {
$status=$status."Очень сильный ветер ";
} elseif ($WindSpeed < 21) {
$status=$status."Ветер очень-очень сильный ";
} elseif ($WindSpeed < 28) {
$status=$status."Шторм ";
} else {
$status=$status."Ураган ";
}
// Направление ветра
if ($WindSpeed >= 1) {
$status=$status.= chti(round($WindSpeed), 'metr')." в секунду, ";
//направление ветра
if (gg('yw_mycity.wind_dir')=='n') {$degree = 'севера';}
if (gg('yw_mycity.wind_dir')=='ne') {$degree = 'северо-востока';}
if (gg('yw_mycity.wind_dir')=='e') {$degree = 'востока';}
if (gg('yw_mycity.wind_dir')=='se') {$degree = 'юго-востока';}
if (gg('yw_mycity.wind_dir')=='s') {$degree = 'юга';}
if (gg('yw_mycity.wind_dir')=='sw') {$degree = 'юго-запада';}
if (gg('yw_mycity.wind_dir')=='w') {$degree = 'запада';}
if (gg('yw_mycity.wind_dir')=='nw') {$degree = 'северо-запада';}
$status=$status.= " дующий с " . $degree;
}
$status=$status.= ". ";
sayReply("$status",1);
|
say_forecast_my
|
О погоде кратко (работает)
// Функция склонения значений чисел на PHP (дни, минуты, часы и тд)...
function chti($num,$period)
{ $numret = $num;
$month = array("месяц","месяца","месяцев");
$day = array("день","дня","дней");
$hour = array("час","часа","часов");
$min = array("минуту","минуты","минут");
$grad = array("градус", "градуса", "градусов");
$proc = array("процент", "процента", "процентов");
$metr = array("метр", "метра", "метров");
if ($period=='month') $titles = $month;
if ($period=='day') $titles = $day;
if ($period=='hour') $titles = $hour;
if ($period=='min') $titles = $min;
if ($period=='grad') $titles = $grad;
if ($period=='proc') $titles = $proc;
if ($period=='metr') $titles = $metr;
$cases = array (2, 0, 1, 1, 1, 2);
return $numret." ".$titles[ ($num%100>4 && $num%100<20)? 2 : $cases[min($num%10, 5)] ];
}
// про температуру
$status="Сейчас, около ".chti(round(gg('yw_mycity.temp')), 'grad')." цельсия. ";
// Влажность
$h=round(gg("yw_mycity.humidity"));
$status=$status."Относительная влажность около ".chti(round($h), 'proc').".";
// Давление
$pressure=(float)gg("yw_mycity.pressure_mm");
if ($pressure<738) {
$status=$status.' Атмосферное давление пониженное. ';
} elseif ($pressure>768) {
$status=$status.' Атмосферное давление повышенное. ';
} else {
$status=$status.' Атмосферное давление нормальное. ';
}
// Ветер
$WindSpeed = (float) gg("yw_mycity.wind_speed");
if ($WindSpeed < 1) {
$status=$status."Ветра нет ";
} elseif ($WindSpeed < 2) {
$status=$status."Легкий ветер ";
} elseif ($WindSpeed < 5) {
$status=$status."Слабый ветер ";
} elseif ($WindSpeed < 8) {
$status=$status."Умеренный ветер ";
} elseif ($WindSpeed < 10) {
$status=$status."Свежий ветер ";
} elseif ($WindSpeed < 14) {
$status=$status."Сильный ветер ";
} elseif ($WindSpeed < 17) {
$status=$status."Очень сильный ветер ";
} elseif ($WindSpeed < 21) {
$status=$status."Ветер очень-очень сильный ";
} elseif ($WindSpeed < 28) {
$status=$status."Шторм ";
} else {
$status=$status."Ураган ";
}
if ($WindSpeed >= 1) {
$status=$status.= chti(round($WindSpeed), 'metr')." в секунду, ";
//направление ветра
if (gg('yw_mycity.wind_dir')=='n') {$degree = 'севера';}
if (gg('yw_mycity.wind_dir')=='ne') {$degree = 'северо-востока';}
if (gg('yw_mycity.wind_dir')=='e') {$degree = 'востока';}
if (gg('yw_mycity.wind_dir')=='se') {$degree = 'юго-востока';}
if (gg('yw_mycity.wind_dir')=='s') {$degree = 'юга';}
if (gg('yw_mycity.wind_dir')=='sw') {$degree = 'юго-запада';}
if (gg('yw_mycity.wind_dir')=='w') {$degree = 'запада';}
if (gg('yw_mycity.wind_dir')=='nw') {$degree = 'северо-запада';}
$status=$status.= " дующий с " . $degree;
}
$status=$status.= ". ";
sayReply("$status",1);
|
BatteryLow
|
/* BatteryLow&Name=%MyName
*/
say($params['Name'].", поставь телефон на зарядку.",1);
sg($params['Admin'].'.BattLevel', $params['battlevel']);
|
birthday
|
Проверка и поздравление пользователей с ДР
//say ("Проверим, есть ли сегодня дни рождения у кого-нибудь из пользователей.");
$TCd = gg("ThisComputer.OfDateNum");
$TCm = gg("ThisComputer.OfMonthNum");
$fullName = 'unknown';
$objects = getObjectsByClass("Users");
foreach($objects as $obj) {
$user = $obj['TITLE'];
list($USd, $USm, $USy) = explode(".", gg($user.".birthday"));
if (($USd == $TCd)&($USm == $TCm)) {
$fullName = gg($user.".fullName");
$bodytext = $fullName.": ";
$bodytext .= getRandomLine(birthday);
$bodytext .= " С днем рождения! (Алиса)";
say($bodytext,1);
runScript('send_mes', array('to'=>$fullName,'subj'=>"- HappyBirthday -",'msg'=>$bodytext,'what'=>"Email"));
}
}
if ($fullName == 'unknown') {
// say ("На сегодня я дней рождения не обнаружила.");
}
|
kinopoisk
|
О Фильме
$film=$params['film'];
say('Запрашиваю у kinopoisk информацию о '.$film);
$url="https://www.kinopoisk.ru/index.php?first=no&what=&kp_query=" . $film;
$data = json_decode(file_get_contents($url), true);
$pagesCount = $data["pagesCount"];
if ($pagesCount > 0) {
$keyword = $data["keyword"]; // что искали
$id = $data["searchFilms"][0]["id"]; // ид на кинопоиске
$nameRU = $data["searchFilms"][0]["nameRU"]; // название в рус
$nameEN = $data["searchFilms"][0]["nameEN"]; //англ название
$description = $data["searchFilms"][0]["description"];
$year = $data["searchFilms"][0]["year"];
$genre = $data["searchFilms"][0]["genre"]; //жанр
$rating = explode(" ", $data["searchFilms"][0]["rating"]); //рейтинг
$img = "http://st.kp.yandex.net/images/film/".$id.".jpg";
//Рассказываем о фильме
$mes = 'Найден фильм "'.$nameRU.'" '.$year.' года. ';
if ($nameEN != '') {
$mes .= 'Оригинальное название ' . $nameEN . '. ';
}
$mes .= $description . '.';
if (is_array($rating) && isset($rating[1])) {
$mes .= ' Рейтинг фильма ' . $rating[0] . '.';
}
say($mes);
//скачиваем картинку
/*
$url=$img;
$jpg="./cached/film/".$id.".jpg";
$dest_file = @fopen($jpg, "w");
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_FILE, $dest_file);
curl_setopt($resource, CURLOPT_HEADER, 0);
curl_exec($resource);
curl_close($resource);
fclose($dest_file);
*/
} else {
say('Не знаю такого фильма.');
}
|
SayJokes
|
Рассказ анекдота.
/*
1 - Анекдот;
2 - Рассказы;
3 - Стишки;
4 - Афоризмы;
5 - Цитаты;
6 - Тосты;
8 - Статусы;
11 - Анекдот (+18);
12 - Рассказы (+18);
13 - Стишки (+18);
14 - Афоризмы (+18);
15 - Цитаты (+18);
16 - Тосты (+18);
18 - Статусы (+18);
*/
if ($params['Jokes'] == 0) {
$ctype = 1 ;
} else {
$ctype = $params['Jokes'];
}
echo "-$ctype-";
function GetJoke($ctype = 1) {
$pretext = array("Слушай", "Слушайте шутку", "Слушай анекдот", "Вот шутка смешная", "Еще шутка");
$number = mt_rand(0, count($pretext) - 1);
$res = geturl('http://rzhunemogu.ru/Rand.aspx?CType=' . $ctype, 0);
$res = win2utf($res);
$xml = new SimpleXMLElement($res);
$joke = trim(preg_replace('/\s{2,}/', ' ', $xml->content));
$joke = $pretext[$number] . ': ' . $joke;
if (strlen($joke) > 500) {
sleep(2);
GetJoke();
} else {
//return $joke;
//say($pretext[$number].':', 1);
sayReply($joke,1);
}
}
//if (gg('ThisComputer.SayJokes') != 0) {
GetJoke();
//}
|
sayTodayAgenda
|
проговаривает события из календаря
if (file_exists('./modules/app_calendar/app_calendar.class.php')) {
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar=new app_calendar();
$calendar->usual($out);
$events=$out['EVENTS_TODAY'];
$say_phrase='';
if (is_array($events)) {
$total=count($events);
$tasks=array();
$cals=array();
for($i=0;$i<$total;$i++) {
if ($events[$i]['IS_TASK']=='1' && $events[$i]['IS_DONE']!='1') {
$tasks[]=$events[$i]['TITLE'];
} elseif ($events[$i]['IS_TASK'] !='1') {
$cals[]=$events[$i]['TITLE'];
}
}
// Tasks
$total_tasks=count($tasks);
if ($total_tasks) {
$say_phrase.="У вас на сегодня запланированы задачи. ";
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$tasks[$i].". ";
}
} else {
say("Никаких дел не запланировано.");
}
// Events
$total_cals=count($cals);
if ($total_cals) {
$say_phrase.=("Сегодняшние события. ");
for($i=0;$i<$total_cals;$i++) {
$say_phrase.=$cals[$i].'. ';
}
}
}
$events=$out['EVENTS_PAST'];
if ($events[0]['TITLE']) {
$say_phrase.=" Так же напоминаю о пропущенных задачах. ";
$total_tasks=count($events);
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$events[$i]['TITLE'].". ";
}
}
}
if ($say_phrase) {
say($say_phrase,3);
}
|
sayUnknow
|
если не расслышала команду через микрофон
|
speechyandexcurl
|
function generateRandomSelection($min, $max, $count)
{
$result=array();
if($min>$max) return $result;
$count=min(max($count,0),$max-$min+1);
while(count($result)<$count) {
$value=rand($min,$max-count($result));
foreach($result as $used) if($used<=$value) $value++; else break;
$result[]=dechex($value);
sort($result);
}
shuffle($result);
return $result;}
$key="c3aedb53-44a7-455c-843d-97c6c328d3fb";
//$key="bc684279-961e-465b-bf9e-67bdd4eefd56";
$filename="@".$params['fn'];
//say ($params['fn'], 0);
//say ($filename, 0);
if (($filename=="@") or ($filename=="") )
{$filename='@/var/www/cached/rec/1496508766.wav';}
//$filename='@/var/www/cached/voice/probki.wav';
//echo substr($filename,-5);
$ras=explode(".",substr($filename,-5));
if ($ras[1]=="wav"){$tip="audio/x-wav";}
else if ($ras[1]=="mp3"){$tip="audio/x-mpeg-3";}
$uuid=generateRandomSelection(0,30,64);
$uuid=implode($uuid);
$uuid=substr($uuid,1,32);
//$url="curl -v -4 \"asr.yandex.net\/asr_xml?key=".$key."&uuid=".$uuid."&topic=notes&lang=ru-RU\" -H \"Content-Type: audio/x-mpeg-3\" --data-binary \"".$filename."\"";
// curl -X POST -H "Content-Type: audio/x-wav" --data-binary "@/var/www/cached/voice/probki.wav" "https://asr.yandex.net/asr_xml?uuid=1d7433151a61a8216f157c131a171d1e&key=c3aedb53-44a7-455c-843d-97c6c328d3fb&topic=queries"
$url="curl -X POST -H \"Content-Type: ".$tip."\" --data-binary \"".$filename."\" \"https://asr.yandex.net/asr_xml?uuid=".$uuid."&key=".$key."&topic=queries\"";
//echo $url;
//say ($url, 0);
//say('Пытаюсь распознать файл '.$filename,1);
$answ=shell_exec($url);
//echo "answ:".$answ;
//$xml = simplexml_load_file($answ);
//$xml =new SimpleXMLElement($answ);
// раскладываем xml на массив
//$otv=$xml->recognitionResults;
//$otv= $xml->asXML();
//$pattern='<variant confidence=\"1\">(.+?)<\/variant>';
$pattern='<variant confidence="1"\>(.+?)\<\/variant>';
preg_match_all ($pattern,$answ,$otv);
//echo "otv0:".$otv[0][0];
//echo "otv1:".$otv[1][0];
$otv1=$otv[1][0];
echo $otv1."\n\r";
sg("test.speech", $otv1);
//processCommand($otv);
say($otv1,2,1);
//say($otv1,2);
runScript('sendemail', array(
'to' => 'sannikovdi@ya.ru',
'subj'=>'образец голосовой команды',
'text'=>$otv1 ,
'attch'=>str_replace('@','',$filename)));
|
VkMusic
|
Включение музыки ВК не работает по причине https://vk.com/dev/audio_api
if ($params['VALUE']) {
getURL('http://127.0.0.1/rc/?command=vlc_close', 0);
$token = '2c1eab00bd50ecc97c84a1a7e58e7845aa368b3fc5a9848b04d004d4a886e7e73084d35f39c35294ba2ef';
if (isset($params['COUNT'])) {
$trackCount = $params['COUNT'];
} else {
$trackCount = 1;
}
if ($params['MODE'] == 0) {
$uid = $params['VALUE'];
$link = 'https://api.vk.com/method/audio.get.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token;
} elseif ($params['MODE'] == 1) {
$trackName = $params['VALUE'];
$link = 'https://api.vk.com/method/audio.search.xml?q=' . urlencode($trackName) . '&count=' . $trackCount . '&auto_complete=1&sort=2&access_token=' . $token;
} elseif ($params['MODE'] == 2) {
$performerName = $params['VALUE'];
$link = 'https://api.vk.com/method/audio.search.xml?q=' . urlencode($performerName) . '&count=' . $trackCount . '&auto_complete=1&performer_only=1&sort=2&access_token=' . $token;
} else {
if (isset($params['ALBUM'])) {
$uid = $params['VALUE'];
$link = 'https://api.vk.com/method/audio.getAlbums.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token;
$res = getURL($link,0);
$xml = new SimpleXMLElement($res);
foreach ($xml->album as $item) {
if ($item->title == $params['ALBUM']) {
$albumId = $item->album_id;
break;
}
}
$link = 'https://api.vk.com/method/audio.get.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token . '&album_id=' . $albumId;
}
}
$res = getURL($link,0);
$xml = new SimpleXMLElement($res);
$tempPlaylist = sys_get_temp_dir() .DIRECTORY_SEPARATOR. "playlist.m3u";
$fp = fopen($tempPlaylist, "w");
fwrite($fp, '#EXTM3U' . "\r\n");
foreach ($xml->audio as $item) {
fwrite($fp, '#EXTINF:' . $item->duration . ', ' . $item->artist . ' - ' . $item->title . "\r\n");
fwrite($fp, $item->url . "\r\n");
fwrite($fp, "\r\n");
}
fclose($fp);
getURL('http://127.0.0.1/rc/?command=vlc_play¶m='.$tempPlaylist, 0);
}
|
wiki
|
$zap=$params['zapros'];
if ($zap==""){
say('ищем-то что?');
// $zap="путин";
}
else
{
//say('Запрашиваю у Wikipedia информацию о '.$zap,2);
$zapurl=urlencode($zap);
//echo $zapurl;
//$url='http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=json&inprop=url';
$url='http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
//echo $url;
$answ=file_get_contents($url);
//echo $answ;
//echo "-----------------------";
//$data=json_decode($content,true, JSON_UNESCAPED_UNICODE);
// $data=json_encode($answ, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
//$data=json_encode($answ, true);
//$objn=$data[0]['id'];
//$objn=$data[0]['code'];
//echo $data;
//echo $objn.'----------------';
//addClassObject('livegpstracks',$objn);
//$src=$data[2];
//sg( $objn.'.json',$content);
// sg( $objn.'.link','https://livegpstracks.com/dv_'.$objn.'.html');
//foreach ($src as $key=> $value ) {
//echo $key.':'.$value;
//}
$xml = simplexml_load_string($answ);
$otvet=$xml->Section->Item->Description;
//С ударениями
//$otvet2=urlencode($otvet);
//$otvet=urldecode($otvet2);
//без ударений
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
//echo $otvet;
say($otvet);
//sg('temp', $otvet);
//say(gg('temp'));
}
|
wiki2
|
//устанавливаем кодировки
header("Content-type: text/html;charset=utf-8");
mb_internal_encoding("UTF-8");
//$word = $request = $matches[1]; //получаем искомое слово
$word=$params['zapros'];
say('Запрашиваю у Wikipedia информацию о '.$word );
$space_replace = preg_match_all("#\s#isu", $request, $s); //проверяем, есть ли пробелы в запросе
if ($space_replace === 1) { //если есть
$request = preg_replace("#\s#", '_', $request); //меняем их на _
}
$url = 'https://ru.wikipedia.org/w/api.php?action=opensearch&search='.$request.'&format=xml'; //формируем запрос
$ch = curl_init(); //инициируем curl
curl_setopt($ch, CURLOPT_URL, $url); //передаем url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //возвращаем результат в виде строки
curl_setopt($ch, CURLOPT_USERAGENT, 'MyBot/1.0 (http://www.mysite.com/)'); //имитируем браузер
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //отключаем проверку ssl-сертификата узла
$result = curl_exec($ch); //выполяем curl
$data = fopen('test.xml', 'w'); //открываем файл для записи
fputs($data, $result); //записываем результат выполнения
fclose($data); //закрываем
$file = 'test.xml'; //указываем файл
$data_xml = simplexml_load_file($file); //загружаем его и раскладываем на массив
$text = $text1 = $data_xml->Section[0]->Item[0]->Text[0]; //получаем первый найденный вариант
$description = $data_xml->Section[0]->Item[0]->Description[0]; //получаем определение слова
$description = mb_convert_encoding($description, 'UTF-8', 'UTF-8'); //конвертируем utf-8 без bom в простой utf-8
if (empty($description)) { //если ничего не нашлось
say ("Я не знаю такого слова.");
} elseif (!empty($description)) { //иначе
$text = preg_replace("#ё#", 'е', $text); //меняем "ё" на "е"
$text = mb_strtolower($text, 'utf-8'); //меняем регистр всех букв на нижний
if ($word === $text) { //если первый результат равен введенному слову
function utf8_str_split($str) {
// переводим каждый символ в массив строк
$split=1;
$array = array();
for ( $i=0; $i < strlen( $str ); ){
$value = ord($str[$i]); //возвращаем ASCII-код сиволов и проверяем их на корректность
if($value > 127){
if($value >= 192 && $value <= 223)
$split=2;
elseif($value >= 224 && $value <= 239)
$split=3;
elseif($value >= 240 && $value <= 247)
$split=4;
}else{
$split=1;
}
$key = NULL;
for ( $j = 0; $j < $split; $j++, $i++ ) {
$key .= $str[$i];
}
array_push( $array, $key );
}
return $array;
}
/**
* Функция вырезки
* @param <string> $str
* @return <string>
*/
function clearstr($str){
$sru = 'ёйцукенгшщзхъфывапролджэячсмитьбю';
$s1 = array_merge(utf8_str_split($sru), utf8_str_split(strtoupper($sru)), range('A', 'Z'), range('a','z'), range('0', '9'), array('&',' ','#',';','%','?',':','(',')','-','_','=','+','[',']',',','.','/','\\'));
$codes = array();
for ($i=0; $i<count($s1); $i++){
$codes[] = ord($s1[$i]);
}
$str_s = utf8_str_split($str);
for ($i=0; $i<count($str_s); $i++){
if (!in_array(ord($str_s[$i]), $codes)){
$str = str_replace($str_s[$i], '', $str);
}
}
return $str;
}
$res = clearstr($description); //удаляем спецсимволы
$res = preg_replace("#ё#isu", 'е', $res); //меняем ё на е
//делаем первую букву большой
$first = mb_substr($word, 0,1, 'utf-8'); //возвращаем 1 букву искомой фразы
$last = mb_substr($word,1); //возвращаем остальное
$first = mb_strtoupper($first, 'utf-8'); //переводим первую букву в верхний регистр
$last = mb_strtolower($last, "utf-8"); //все остальное - в нижний
$word = $first.$last; //склеиваем
$rep = $word .", это "; //искомое слово + фраза замены
$tracking = preg_replace("#".$word."#isum", $rep, $res,1); //заменяем первое слово определения нашим словом поиска и замены
$tracking = preg_replace("#\s\(.*?\)#isu", '', $tracking); //удаляем все остальные круглые скобки и их содержимое
say($tracking);
} elseif ($word != $text){ //если искомое слово не найдено в первом варианте
$text2 = $data_xml->Section[0]->Item[1]->Text[0]; //получаем второе совпадение
$text3 = $data_xml->Section[0]->Item[2]->Text[0]; //получаем третье совпадение
$say = "По Вашему запросу совпадений не найдено. Похожие результаты: ";
//$say.=$text1 .", " .$text2 ." и " .$text3 .".";
$say.=$text1; //первый похожий резальтат
if ($text2 ==='') { //если во втором результате пусто
$say.="."; //ставим точку
} else { //иначе
$say.= ", " .$text2; //ставим запятую и дописываем второй вариант
if ($text3 === '') { //если в третьем результате пусто
$say.="."; //ставим точку
} else { //иначе
$say.=" и " .$text3; //ставим запятую и дописываем третий вариант
}
}
say($say);
}
}
|
IPadr
|
определяет IP адрес подключенного
global $ipadr;
$ipadr = $_SERVER["REMOTE_ADDR"];
|
OHM_data
|
получение данных о текущем состоянии железа
// https://connect.smartliving.ru/profile/136/scripts.html
// и https://www.youtube.com/watch?v=dvFlaHdZul8
// Версия от 06.02.2018
$ch = curl_init('http://127.0.0.1:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные ----------------------------------------------------
//$mb_fan='';
//$cpu_tip='';
//$cpu_temp='';
//$cpu_load='';
//$disk_used='';
$mb_fan =(float) $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$cpu_tip = $json -> {'Children'}[0] -> {'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'};
$disk_used = (float) $json -> {'Children'}[0] -> {'Children'}[4] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
//----------------------- Присваеваем данные ----------------------------------------------------
$color = "grey";
sg('ThisComputer.CPUtip', $cpu_tip);
// -------------------- Использование диска -------------------------------------------------------------
setGlobal('ThisComputer.DISKused', $disk_used);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ThisComputer.DISKused_color', $color);
//---------------------- загрузка процессора -----------------------------------------------------
sg('ThisComputer.CPUload', $cpu_load);
// и цвет для неё
if (($cpu_load >= 0) && ($cpu_load < 30)) {
$color = 'lime';
} else if (($cpu_load >= 30) && ($cpu_load < 55)) {
$color = 'greenyellow';
} else if (($cpu_load >= 55) && ($cpu_load < 80)) {
$color = 'yellow';
} else if ($cpu_load >= 80) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ThisComputer.CPUload_color', $color);
// -------------------- Температура процессора --------------------------------------------------------
sg('ThisComputer.CPUtemp', $cpu_temp);
// и цвет для неё
if (($cpu_temp >= 0) && ($cpu_temp < 45)) {
$color = 'lime';
} else if (($cpu_temp >= 45) && ($cpu_temp < 65)) {
$color = 'greenyellow';
} else if (($cpu_temp >= 65) && ($cpu_temp < 70)) {
$color = 'yellow';
} else if ($cpu_temp >= 70) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ThisComputer.CPUtemp_color', $color);
//--------------------- скорость вентилятора ----------------------------------------------------
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);
// и цвет для неё, для каждого куллера индивидуально
if ($mb_fan == 0) {
$color = 'red';
} else if (($mb_fan > 0) && ($mb_fan < 1500)) {
$color = 'yellow';
} else if (($mb_fan >= 1500) && ($mb_fan < 2500)) {
$color = 'greenyellow';
} else if (($mb_fan >= 2500) && ($mb_fan < 3200)) {
$color = 'lime';
} else if ($mb_fan >= 3200) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ThisComputer.MBfan1_color', $color);
|
OHM_timer_10s
|
для запуска OHM_data
//-----------------------Выполнение скрипта раз в 10 сек. (OHM_timer_5s)
runScript('OHM_data');
setTimeOut("OHM_timer_v10s", "runScript('OHM_timer_10s');", 10);
|
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("Подготовка к перезагрузке",0);*/
//setTimeout("shutdownTimer","safe_exec('shutdown -r now');",15);
say("Backing up files...",0);
if (!is_dir($target_dir . '/cms')) {
mkdir($target_dir . '/cms',0777);
}
$cms_dirs = scandir(ROOT . 'cms');
foreach ($cms_dirs as $d) {
if ($d == '.' ||
$d == '..' ||
$d == 'cached' ||
$d == 'debmes' ||
$d == 'saverestore'
) continue;
say("Backing up dir ".ROOT . 'cms/' . $d. ' to ' . $target_dir . '/cms/' . $d,'backup', 0);
copyTree(ROOT . 'cms/' . $d, $target_dir . '/cms/' . $d , 1);
}
if (defined('PATH_TO_MYSQLDUMP'))
$mysqlDumpPath = PATH_TO_MYSQLDUMP;
if ($mysqlDumpPath == '') {
if (substr(php_uname(), 0, 7) == "Windows")
$mysqlDumpPath = SERVER_ROOT . "/server/mysql/bin/mysqldump";
else
$mysqlDumpPath = "/usr/bin/mysqldump";
}
$mysqlDumpParam = " -h " . DB_HOST . " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
$mysqlDumpParam .= " > " . $target_dir . "/" . DB_NAME . ".sql";
DebMes("Backing up database ".DB_NAME. ' to ' . $target_dir . "/" . DB_NAME . ".sql",'backup');
exec($mysqlDumpPath . $mysqlDumpParam);
say("Подготовка к перезагрузке ". $mysqlDumpParam, 0);
say("OK ".$cms_dirs, 0);
|
startUp
|
Система загружена
say('Система загружена', 2);
runScript('tellIPAddress', array());
|
SystemHi
|
Система громче
$value = gg("ThisComputer.MasterVolumeLevel");
if ($value < 100){
cm('ThisComputer.MasterVolumeLevel',array('VALUE'=> $value+5 ));
} else {
cm('ThisComputer.MasterVolumeLevel',array('VALUE'=> 100 ));
}
|
SystemLow
|
Система тише
$value = gg("ThisComputer.MasterVolumeLevel");
if ($value > 5){
cm('ThisComputer.MasterVolumeLevel',array('VALUE'=> $value-5 ));
} else {
cm('ThisComputer.MasterVolumeLevel',array('VALUE'=> 0 ));
}
|
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,0);
|
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);
}
|