homebidyoff
|
выключаем режим дома никого нет
callmethod('NobodyHomeMode.deactivate');
say('режим "никого нет дома" выключён',2);
|
homebodyon
|
включаем режим дома никого нет
callmethod('updateActivityStatus');
callmethod('NobodyHomeMode.activate');
say('режим "никого нет дома" включён',2);
|
rebootmajordomo
|
Перезагрузка majordomo
shell_exec("sudo service majordomo restart");
|
rebootSystem
|
презагрузка системы
$filename = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
say("Подготовка к перезагрузке",2);
setTimeout("shutdownTimer","safe_exec('shutdown -r now');",15);
|
shutDown
|
Выключение системы
$filename = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
say("Подготовка к выключению",2);
setTimeout("shutdownTimer","safe_exec('shutdown -h now');",15);
|
searchfunction
|
//Запишем все доступные функции в переменную
$arr=get_defined_functions();
// Отсортируем по алфавиту для читабельности
sort($arr['internal']);
sort($arr['user']);
$i=1;
echo ('<table><tr>');
foreach ($arr['user'] as $key => $name ) {
echo ('<td>'.$key.' --> '.$name.' </td>');
if (!($i%4)) {
echo ('</tr><tr>');
}
$i++;
}
if ($i%4) {echo ('</tr>');}
echo ('</table>');
|
EconomModePeriod
|
/* Данные истории находятся в таблице 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) );
echo $period;
setGlobal("EconomMode.period",$period); //запись значения в свойство объекта (поменять на свое!!!!!!!!!!!!!!)
|
goingOut
|
$confirm=$params['confirm'];
$timeoutValue=5*60;
if (timeOutExists('goingOutTimer') && !$confirm) {
say("Отменяю сценарий ухода из дома.",2);
clearTimeout('goingOutTimer');
return;
} elseif (!$confirm) {
say("Через 5 минут я перейду в режим экономии. Всего хорошего!",2);
setTimeout('goingOutTimer','runScript("goingOut",array("confirm"=>1));',$timeoutValue);
return;
}
say("Перехожу в режим экономии",2);
callMethod('EconomMode.activate');
rs(turnOffLights);
|
openweather
|
sg('ThisComputer.TempOutside',gg('ow_fact.temperature'));
sg('ThisComputer.SunSetTime',date("H:i",(gg('ow_day0.sunset'))));
sg('ThisComputer.SunRiseTime',date("H:i",(gg('ow_day0.sunrise'))));
$Now = " Температура: ".gg('ow_fact.temperature')."°C , ".gg('ow_fact.weather_type')." , Облачность: ".gg('ow_fact.clouds')."%, Давление: ".gg('ow_fact.pressure_mmhg')." мм.рт.ст, ветер: ".gg('ow_fact.wind_direction_full')." ".gg('ow_fact.wind_speed')." м/с, влажность: ".gg('ow_fact.humidity')."%, ";
$Tomorrowweather = " Температура: ".gg('ow_day1.temperature')."°C , ".gg('ow_day1.weather_type')." , Облачность: ".gg('ow_day1.clouds')."%, Давление: ".gg('ow_day1.pressure_mmhg')." мм.рт.ст, ветер: ".gg('ow_day1.wind_direction_full')." ".gg('ow_day1.wind_speed')." м/с, влажность: ".gg('ow_day1.humidity')."%, ";
sg('ThisComputer.weatherToday',$Now);
sg('ThisComputer.weatherTomorrow',$Tomorrowweather);
|
PingUsers
|
$users = "";
$objects = getObjectsByClass("Users");
foreach ($objects as $obj) {
$host = getGlobal($obj['TITLE'] . ".deviceip");
$mac = getGlobal($obj['TITLE'] . ".deviceMacAddr");
$fullname = getGlobal($obj['TITLE'] . ".fullName");
if ($host != '') {
$rec = SQLSelectOne("SELECT * FROM pinghosts WHERE HOSTNAME LIKE '" . DBSafe($host) . "' OR TITLE LIKE '" . DBSafe($host) . "'");
$hostname = $rec['HOSTNAME'];
$online = false;
$online = ping($hostname);
if (!$online) {
if($mac != '') {
$online = onlineLog($mac);
} else {
$online = onlineLog($hostname);
}
}
if ($online) {
if ($users != "") {
$users .= ", ";
}
$users .= $fullname;
setGlobal($obj['TITLE'] . ".deviceOnline", 1);
} else {
say('Оффлайн');
setGlobal($obj['TITLE'] . ".deviceOnline", 0);
}
}
}
if (!$params['SAY']) {
if ($users != "") {
say($users);
DebMes('Users:' . $users);
}
}
function onlineLog($addr) {
$debugInfo = '<html><b>start</b><br>';
var_dump($debugInfo);
$logString = shell_exec("sudo /usr/src/routerlog.sh");
if (isset($logString)) {
$online = false;
$ArrLogString = explode("\n", $logString);
var_dump(count($ArrLogString));
for ($i = 0; $i < count($ArrLogString); $i++) {
$tempStr = explode('router.asus.com', $ArrLogString[$i]);
$time = time() - strtotime($tempStr[0]);
$debugInfo .= $tempStr[0].'<br>';
$min = $time / 60;
$debugInfo .= $min.'<br>';
var_dump($min);
if ($min <= 30) {
$debugInfo .= $tempStr[1].'<br>';
if (substr_count($tempStr[1], $addr) > 0) {
var_dump(substr_count($tempStr[1], $addr));
$online = true;
var_dump($online);
}
}
}
} else {
$online = false;
}
if ($online) {
$debugInfo .= 'true<br></html>';
} else {
$debugInfo .= 'false<br><b>end</b></html>';
}
//file_put_contents('/media/d5c56356-c68d-4a48-8976-203b9de5448e/smarthome/debuginfo.html', $debugInfo);
return $online;
}
|
systemMaintenance
|
require(ROOT.'scripts/startup_maintenance.php');
//safe_exec("C:\\_majordomo\\apps\\curl.exe --max-time=1800 http://192.168.0.17/scripts/optimize_history.php");
// optimize gps
$records=SQLSelect("SELECT ID, DEVICEID, LOCATION_ID FROM gpslog ORDER BY DEVICEID, ADDED DESC");
$total=count($records);
$to_delete=array();
for($i=1;$i<$total-1;$i++) {
if (!$records[$i]['LOCATION_ID']) continue;
if ($records[$i]['LOCATION_ID']==$records[$i+1]['LOCATION_ID'] && $records[$i]['LOCATION_ID']==$records[$i-1]['LOCATION_ID']) {
//$to_delete[]=$records[$i]['ID'];
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
}
}
// optimize phistory
getURL('http://localhost/scripts/optimize_history.php',0);
|
turnOffLights
|
say('Выключаю всё освещение.', 2);
callMethod("Relay04.turnOff");
callMethod("Relay05.turnOff");
callMethod("Relay08.turnOff");
callMethod("Relay02.turnOff");
callMethod("Relay03.turnOff");
|
Watching movie
|
say(LANG_GENERAL_SETTING_UP_LIGHTS,2);
// to-do
|
WOL
|
magicPacket('C8:9C:DC:BD:08:E5');
function magicPacket($mac,$addr='255.255.255.255',$socket_number=7) { //split up the mac address based upon the colons in the string
$addr_byte = explode(':', $mac);
$hw_addr = '';
for ($a=0; $a <6; $a++)
$hw_addr .=chr(hexdec($addr_byte[$a])); //convert the hex to its decimal equivalent, encode as a character, and repeat 16 times
$msg = str_repeat(chr(255),6); //FF in decimal is 255, which is then encoded as a char as with our mac address
for ($a = 1; $a <= 16; $a++)
$msg .= $hw_addr;
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //create our socket
if ($s == false) { echo "Error creating socket!";
echo "Error code is '".socket_last_error($s)."'- " . socket_strerror(socket_last_error($s));
return false; }
else { // setting a broadcast option to socket:
$opt_ret = socket_set_option($s, 1, 6, TRUE);
$opt_ret = socket_set_option($s,SOL_SOCKET,SO_BROADCAST,true);
if($opt_ret <0) { echo "setsockopt() failed, error: " . strerror($opt_ret) ."";
return false; }
if(socket_sendto($s, $msg, strlen($msg), 0, $addr,$socket_number)) { socket_close($s);
return true; }
else {return false; }} }sayReply('Включаю компьютер в зале ...', 2);
|
WOL_server
|
magicPacket('00:13:D4:65:8D:FE');
function magicPacket($mac,$addr='255.255.255.255',$socket_number=7) { //split up the mac address based upon the colons in the string
$addr_byte = explode(':', $mac);
$hw_addr = '';
for ($a=0; $a <6; $a++)
$hw_addr .=chr(hexdec($addr_byte[$a])); //convert the hex to its decimal equivalent, encode as a character, and repeat 16 times
$msg = str_repeat(chr(255),6); //FF in decimal is 255, which is then encoded as a char as with our mac address
for ($a = 1; $a <= 16; $a++)
$msg .= $hw_addr;
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //create our socket
if ($s == false) { echo "Error creating socket!";
echo "Error code is '".socket_last_error($s)."'- " . socket_strerror(socket_last_error($s));
return false; }
else { // setting a broadcast option to socket:
$opt_ret = socket_set_option($s, 1, 6, TRUE);
$opt_ret = socket_set_option($s,SOL_SOCKET,SO_BROADCAST,true);
if($opt_ret <0) { echo "setsockopt() failed, error: " . strerror($opt_ret) ."";
return false; }
if(socket_sendto($s, $msg, strlen($msg), 0, $addr,$socket_number)) { socket_close($s);
return true; }
else {return false; }} }sayReply('Включаю сервер ...', 2);
|
2ip
|
say ('Про интернет к которому я подключена.',2);
$url="http://api.2ip.ua/provider.json";
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$ip=$data["ip"]; // что искали
$name_ripe=$data["name_ripe"];
$name_rus=$data["name_rus"];
$site=$data["site"];
echo $ip;
$msgtxt = "IP адрес ".$ip;
say ('Провайдер '.$name_rus ,1);
say ('Сайт провайдера '.$site,2);
say($msgtxt,9);
rs(SendSticker_v, array('stickerbody' => $msgtxt));
$url2="http://api.2ip.ua/geo.json?ip=".$ip;
echo $url2;
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url2), true);
$country_rus=$data["country_rus"]; // что искали
$region_rus=$data["region_rus"];
$city_rus=$data["city_rus"];
say ('Мое местонахождение по мнению других:',5);
say ($country_rus,5);
say ($region_rus,5);
say ($city_rus,5);
|
sayHook
|
/* Хук на функцию say() */
$level = $params['level'];
$ph = $params['ph'];
$out = '';
//echo "Привет, это Элис. С вами говорит шелезяка" | RHVoice-test -p Elena -o /tmp/test.wav
if ($level >= getGlobal('minMsgLevel')) {
//safe_exec('spd-say "'.$ph.'" -w -y anna+clb', 1, $out);
safe_exec('echo "'.$ph.'" | RHVoice-test -p Anna+CLB', 1, $out);
}
|
shutdownMyComp
|
Выключает мой компьютер
say('Выключаю компьютер');
safe_exec("smbclient //192.168.1.32/shutdown -U denis Nucleon18 -c 'prompt; mput 1.txt'");
|
test
|
setTimeOut('testTimer','say("Hello world!");',30);
|
timeNow
|
|