backup
|
бэкап системы в 2 ночи
//http://connect.majordomohome.com/profile/602/scripts.html
include(DIR_MODULES . 'backup/backup.class.php');
$backup_module = new backup();
$backup_module->create_backup($out);
//include(DIR_MODULES . 'backup/backup.class.php');
//$backup_module = new backup();
//$backup_module->create_backup();
|
backup_notify
|
//http://connect.majordomohome.com/profile/602/scripts.html
$state=$params['STATE'];
$desc=$params['DESCRIPTION'];
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$message = "Резервное копирование\nСтатус: <b>".$state."</b>";
if ($desc)
$message .= "\nОписание:".$desc;
$telegram_module->sendMessageToAdmin($message);
|
maintenance
|
Автоматическое обслуживание системы
require(ROOT.'scripts/startup_maintenance.php');
|
PowerSupply
|
Чтение состояния батареи Linux
/*$batpath = '/sys/class/power_supply/BAT1/';
// Контроль параметров батареи
$capacity = mb_substr(file_get_contents($batpath.'capacity'), 0, -1); // процент батареи
$statusBAT = mb_substr(file_get_contents($batpath.'status'), 0, -1); // текущий статус батареи [Full/Charge/Discharge]
setGlobal("ThisComputer.BatPresent", $capacity);
setGlobal("ThisComputer.BatState", $statusBAT);
*/
/*
//System uptime
$sys_uptime=shell_exec("uptime");
$sys_uptime = explode(" up ", $sys_uptime);
$sys_uptime = explode(",", $sys_uptime[1]);
$sys_uptime = $sys_uptime[0].", ".$sys_uptime[1];
setGlobal("ThisComputer.System_uptime",$sys_uptime);
//Status battery
$sys_bat=shell_exec("acpi");
$sys_bat = explode("0: ", $sys_bat);
$sys_bat = explode(",", $sys_bat[1]);
setGlobal("ThisComputer.System_battery",$sys_bat[0]);
setGlobal("ThisComputer.Battery_Charge",$sys_bat[1]);
//AC_adapter status
$sys_ac=shell_exec("acpi -a");
$sys_ac = explode("0: ", $sys_ac);
$sys_ac = explode(",", $sys_ac[1]);
$sys_ac = $sys_ac[0];
setGlobal("ThisComputer.AC_adapter",$sys_ac);
*/
|
rebootRoter
|
перезагрузка роутера
say('Произвожу перезагрузку роутера...');
exec('/var/www/restart_router.sh');
|
rebootSystem
|
перезагрузка малины
// дописать в конце файла: sudo nano /etc/sudoers
// www-data ALL=(ALL) NOPASSWD:/sbin/reboot, /sbin/shutdown
//say("Подготовка к перезагрузке",2);
say("Сервер будет перезагружен через 15 секунд",1);
//say("Сохранение БД",1);
$filename = ROOT . '/backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=root" . DB_USER . " --password=akmS78492" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
setTimeout("shutdownTimer","safe_exec('sudo shutdown -r now');",15); //перезагрузка через 15 сек. (если сервер слабый меняйте на больше чтобы успевал сделать бэкап)
|
reportStatus
|
$res='';
if (gg('Security.stateColor')=='green' && gg('System.stateColor')=='green' && gg('Communication.stateColor')=='green') {
$res='Все системы работают в штатном режиме';
} else {
if (gg('Security.stateColor')!='green') {
$res.=" Проблема безопасности: ".getGlobal('Security.stateDetails');
}
if (gg('System.stateColor')!='green') {
$res.=" Системная проблема: ".getGlobal('System.stateDetails');
}
if (gg('Communication.stateColor')!='green') {
$res.=" Проблема связи: ".getGlobal('Communication.stateDetails');
}
}
say($res,5);
|
restartCycles
|
перезапуск циклов
//https://mjdm.ru/forum/viewtopic.php?t=2945
//echo shell_exec( 'sudo /var/www/restart.sh' );
//say ("Произошло падение системы, произвожу рестарт циклов!", 2);
say ("Произвожу рестарт циклов!", 2);
safe_exec('sudo restart majordomo');
|
shutDown
|
выключение
// дописать в конце файла: sudo nano /etc/sudoers
// www-data ALL=(ALL) NOPASSWD:/sbin/reboot, /sbin/shutdown
//say("Подготовка к перезагрузке",2);
say("Сервер будет выключен через 15 секунд",1);
//say("Сохранение БД",1);
$filename = ROOT . '/backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=root" . DB_USER . " --password=akmS78492" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
setTimeout("shutdownTimer","safe_exec('sudo shutdown -h now');",15); //выключение через 15 сек. (если сервер слабый меняйте на больше чтобы успевал сделать бэкап)
|
UPS_Script
|
//http://connect.majordomohome.com/profile/33/scripts.html
/*
$cmdUrl = 'http://127.0.0.1:8081/ups.txt';
if(!$cmdUrl)
return;
$ctx = stream_context_create(array(
'http' => array('timeout'=>1)
)
);
$state = file_get_contents($cmdUrl, 0, $ctx);
$value = explode("\r\n",$state);
*/
$value = getURL('http://127.0.0.1:8081/ups.txt', 0);
if(!$value)
return;
$value = explode("\r\n", $value);
sg('UPS.inVoltage',$value[0]); // UPS.inVoltage -входящие вольты/ = 240 V
sg('UPS.outVoltage',$value[1]); // UPS.outVoltage -выходящие Вольты. = 220 V
sg('UPS.load',$value[2]); // UPS.load - Уровень загрузки ИБП в процентах. = 15 %
sg('UPS.Frequency',$value[3]); // UPS.frequency - Цифровой индикатор частоты тока. = 50 Hz
sg('UPS.inTemp',$value[4]); // UPS.inTemp - Цифровой индикатор температуры ИБП. = 53 °C
sg('UPS.batCharge',$value[5]); // UPS.batCharge - Уровень заряда батареи в процентах. = 100 %
sg('UPS.status',$value[7]); // UPS.status - Комплексное значение статусов ИБП. 1 сеть / 2 батарея
sg("UPS.updatedTime",date("d-m-Y H:i:s",time()));
setTimeOut('UPS_ScriptTimer',"runScript('UPS_Script');",10);
|
Check_Battery
|
Проверка уровня батареек и отправка по необходимости сообщения
//https://connect.mjdm.ru/profile/2678/blog/zapros-v-telegu-dannyh-o-sostoyanie-akkamulyatorov-ustroystv.html
$classes_to_check = array('SButtons', // список классов в которых есть датчики с батарейками, добавить свои можно
'SCO2Sensors',
'SCurrentSensors',
'SGeneralSensors',
'SHumSensors',
'SLeak',
'SLightSensors',
'SMoistureSensors',
'SMotions',
'SMotions2',
'SOpenClose',
'SPercentageSensors',
'SPowerSensors',
'SPressureSensors',
'SRadiationSensors',
'SSmoke',
'SStateSensors',
'STempHumSensors',
'STempSensors',
'SVoltageSensors');
$res_objects = array(); //перебор всех записанных классов и получение объектов из них
foreach ($classes_to_check as $class_name) {
$objects = getObjectsByClass($class_name);
foreach ($objects as $obj) {
$res_objects[] = $obj;
}
}
$total = count ($res_objects); //перебор объектов полученных и запись их значений в отчет
for ($i = 0; $i < $total; $i++) {
$updated = getGlobal($res_objects[$i]['TITLE'].'.levelBatt'); // получение данных из свойства к которому привязана батарейка
if ($updated != '') { //проверка что свойство не пустое, так бывает у если кнопка через ПУ заведена как 2 объекта, а батарейка только к одному привязана
$object_rec = SQLSelectOne("SELECT objects.DESCRIPTION, classes.title FROM `objects` LEFT JOIN classes ON objects.CLASS_ID = classes.id WHERE objects.ID=" . $res_objects[$i]['ID']); //получение описания и класса объекта
if ($updated < 20) {
$batt = "ВНИМАНИЕ!!! ".$object_rec['DESCRIPTION']." разряжена ".hex2bin('F09F948B').$updated."%";
// echo $batt;
// $telegram_module->sendMessageToAdmin($batt);
rs("send_Telegram", array("admin"=>$chat_id, "message"=>$batt));
} else if ($updated < 40) {
$batt = $object_rec['DESCRIPTION'].hex2bin('F09F948B').$updated."%";
// echo $batt;
// $telegram_module->sendMessageToAdmin($batt);
rs("send_Telegram", array("admin"=>$chat_id, "message"=>$batt));
}
}
}
|
easyRF
|
$device_id=$params['did'];
$destination_id=$params['dest'];
$packet_id=$params['pid'];
$command_id=$params['c'];
$data=$params['d'];
if ($device_id==0) {
if ($command_id==10) {
//temp
setGlobal('ws.tempInside',round($data/100));
} elseif ($command_id==12) {
//motion
callMethod('intSensor.statusChanged',array('status'=>1));
clearTimeOut($id.'_move');
setTimeOut($id.'_move',"callMethod('intSensor.statusChanged',array('status'=>0));",20);
}
}
|
RCSwitch
|
$id=$params['rcswitch'];
if ($id=='12345') {
//sensor 1
}
|
tempOutsideDinamic
|
покажем динамику уличной температуры
$data1 = getHistoryValue("ow_fact.temperature", strtotime("-1 hour"));
$data2 = gg("ow_forecast_2.temperature");
$data3 =round($data2 - $data1,2);
if ($data1 > $data2) sg('ws.tempOutside_d',"▼ ".abs($data3));
if ($data1 < $data2) sg('ws.tempOutside_d',"▲ ".abs($data3));
if ($data1 == $data2) sg('ws.tempOutside_d',"≡");
$data1 = getHistoryValue("ws.pressureRt", strtotime("-1 hour"));
$data2 = gg("ws.pressureRt");
$data3 =round($data2 - $data1,2);
if ($data1 > $data2) sg('ws.pressureRt_d',"▼ ".abs($data3));
if ($data1 < $data2) sg('ws.pressureRt_d',"▲ ".abs($data3));
if ($data1 == $data2) sg('ws.pressureRt_d',"≡");
|
ручное обновление OpenWeater
|
ручное обновление OpenWeater. подписан на ежечасное "HOURLY" обновление.
include_once(DIR_MODULES . 'app_openweather/app_openweather.class.php');
$openweather = new app_openweather();
$openweather->processSubscription('HOURLY');
|
CPU_temp
|
проверка температуры процессора
//CPU temp for Raspberry
//$cpu_temp=shell_exec('cat /sys/class/thermal/thermal_zone0/temp') / 1000;
//$cpu_temp=round($cpu_temp, 1);
//setGlobal("TempCPUcore.Temperature", $cpu_temp); // запишем значение
//CPU temp for PC ubuntu
$acsi_temp=shell_exec('cat /sys/class/thermal/thermal_zone0/temp') / 1000;
$acsi_temp=round($acsi_temp, 1);
setGlobal("TempACSI.value", $acsi_temp); // запишем значение
$cpu_core0_temp=shell_exec('cat /sys/class/hwmon/hwmon1/temp2_input') / 1000;
$cpu_core0_temp=round($cpu_core0_temp, 1);
setGlobal("TempCPUcore0.value", $cpu_core0_temp); // запишем значение
$cpu_core1_temp=shell_exec('cat /sys/class/hwmon/hwmon1/temp3_input') / 1000;
$cpu_core1_temp=round($cpu_core1_temp, 1);
setGlobal("TempCPUcore1.value", $cpu_core1_temp); // запишем значение
//CPU usage
$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");
setGlobal("ThisComputer.CPUusage",$cpu_usage); // запишем значение
|
PowerSupply
|
Чтение состояния батареи Linux
/*$batpath = '/sys/class/power_supply/BAT1/';
// Контроль параметров батареи
$capacity = mb_substr(file_get_contents($batpath.'capacity'), 0, -1); // процент батареи
$statusBAT = mb_substr(file_get_contents($batpath.'status'), 0, -1); // текущий статус батареи [Full/Charge/Discharge]
setGlobal("ThisComputer.BatPresent", $capacity);
setGlobal("ThisComputer.BatState", $statusBAT);
*/
/*
//System uptime
$sys_uptime=shell_exec("uptime");
$sys_uptime = explode(" up ", $sys_uptime);
$sys_uptime = explode(",", $sys_uptime[1]);
$sys_uptime = $sys_uptime[0].", ".$sys_uptime[1];
setGlobal("ThisComputer.System_uptime",$sys_uptime);
//Status battery
$sys_bat=shell_exec("acpi");
$sys_bat = explode("0: ", $sys_bat);
$sys_bat = explode(",", $sys_bat[1]);
setGlobal("ThisComputer.System_battery",$sys_bat[0]);
setGlobal("ThisComputer.Battery_Charge",$sys_bat[1]);
//AC_adapter status
$sys_ac=shell_exec("acpi -a");
$sys_ac = explode("0: ", $sys_ac);
$sys_ac = explode(",", $sys_ac[1]);
$sys_ac = $sys_ac[0];
setGlobal("ThisComputer.AC_adapter",$sys_ac);
*/
|
System_info
|
получение информации с системных датчиков
//CPU temp
$cpu_temp=shell_exec('cat /sys/class/thermal/thermal_zone0/temp') / 1000;
$cpu_temp=round($cpu_temp, 1);
setGlobal("TempCPUcore0.value", $cpu_temp); // запишем значение
//CPU usage
$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");
setGlobal("ThisComputer.CPUusage",$cpu_usage); // запишем значение
//System uptime
//$sys_uptime=shell_exec("uptime");
//$sys_uptime = explode(" up ", $sys_uptime);
//$sys_uptime = explode(",", $sys_uptime[1]);
//$sys_uptime = $sys_uptime[0].", ".$sys_uptime[1];
//setGlobal("ThisComputer.System_uptime",$sys_uptime); // запишем значение
//Memory usage/total
$mem_total=exec("cat /proc/meminfo | grep MemTotal | awk '{print $2}'");
$mem_usage=$mem_total - exec("cat /proc/meminfo | grep MemFree | awk '{print $2}'");
$sys_memory=round($mem_usage * 100 / $mem_total, 1);
setGlobal("ThisComputer.SystemMemory",$sys_memory); // запишем значение
////////////////////////////////////////////////////////////////
$mem=shell_exec("free -m|grep Mem|awk '{print $2,$3,$4}'");
$mem=explode(" ",$mem);
$mem="Всего: ".$mem[0]." Занято: ".$mem[1]." Доступно: ".$mem[2];
setGlobal("ThisComputer.memory",$mem);
////////////////////////////////////////////////////////////////
//Memory Card
$bytes = disk_free_space(".");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
$temp = round($bytes / pow($base,$class)) . ' ' . $si_prefix[$class];
setGlobal('SystemFreespace',$temp); // запишем значение
|
sendTelegram
|
Сценарий для упрощения работы с модулем Telegram
// Сценарий для упрощения работы с модулем Telegram
// Примеры использования:
// runScript("sendTelegram",array("msg"=>'ТекстСообщения'));
// ИмяПользователя - название объекта пользователя с заполненым свойством TelegramID
// НазваниеКоманды - название существующей команды из модуля Telegram
// ТекстСообщения - сообщение для отправки
// params message, img
$message = $params['message'];
$img = $params['img'];
$video = $params['video'];
$album = $params['album'];
$description = $params['description'];
$addr = $params['to'];
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//Если текст
if ($message){
$telegram_module->sendAction($chat_id, "typing");
// $telegram_module->sendMessageToAdmin($message);
$telegram_module->sendMessageToUser($chat_id, $message);
}
//Если картинка
if ($img) {
$telegram_module->sendAction($chat_id, "upload_photo");
// $telegram_module->sendImageToAdmin($img, $description);
$telegram_module->sendImageToUser($chat_id, $img, $description);
}
//Если кино
if ($video) {
$telegram_module->sendAction($chat_id, "upload_video");
// $telegram_module->sendVideoToAdmin($video);
$telegram_module->sendVideoToUser($chat_id, $video);
}
//Если альбом
if ($album) {
$telegram_module->sendAction($chat_id, "upload_photo");
// $telegram_module->sendAlbumToAdmin($album, $description);
$telegram_module->sendAlbumToUser($chat_id, $album, $description);
}
|
send_Telegram
|
NEW Сценарий для упрощения работы с модулем Telegram
// runScript("send_tme",array("user"=>'ИмяПользователя',"cmd"=>'НазваниеКоманды'));
// runScript("send_tme",array("user"=>'ИмяПользователя',"msg"=>'ТекстСообщения'));
// ИмяПользователя - название объекта пользователя с заполненым свойством TelegramID
// Чтобы заработало нужно в классе User создать параметр TelegramID и вбить в него значения
// НазваниеКоманды - название существующей команды из модуля Telegram
// ТекстСообщения - сообщение для отправки
$T_msg = $params['message']; //получаем текст отправляемого сообщения переданное через параметр запуска
$T_img = $params['img']; //получаем картинку отправляемого сообщения переданное через параметр запуска
$T_video = $params['video']; //получаем видео отправляемого сообщения переданное через параметр запуска
$T_album = $params['album']; //получаем альбом отправляемого сообщения переданное через параметр запуска
$T_descr = $params['description']; //получаем описание отправляемого сообщения переданное через параметр запуска
$T_addr = $params['to']; //получаем ??? отправляемого сообщения переданное через параметр запуска
$T_cmd = $params['cmd']; //получаем имя команды переданной через параметр запуска
$T_user = $params['user']; //получаем имя пользователя переданное через параметр запуска
if ($T_user == '') {return;} //если имя пользователя не заданно - прекращаем выполнение сценария
$T_delete = $params['delete']; //получаем команду на удаление сообщения
include_once(DIR_MODULES.'telegram/telegram.class.php'); //подключаем модуль Telegram
$telegram_module = new telegram(); //активируем модуль Telegram
$T_id = gg($T_user.'.TelegramID'); //считываем id пользователя в переменную из свойства TelegramID
if ($T_msg != "") { //если сообщение не пустое
$telegram_module->sendAction($T_user, "typing");
$T_user = mb_strtolower($T_user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($T_user == 'all') {$telegram_module->sendMessageToAll($T_msg);} //если имя пользователя all, то шлём сообщение всем
if ($T_user == 'admin') {$telegram_module->sendMessageToAdmin($T_msg);} //если имя пользователя ADMIN, то шлём сообщение только ему
// if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendMessageToUser($T_id, $T_msg);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendMessageToUser($T_user, $T_msg);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
if ($T_img != "") { //если сообщение не пустое
$telegram_module->sendAction($T_user, "upload_photo");
$T_user = mb_strtolower($T_user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($T_user == 'all') {$telegram_module->sendImageToAll($T_img, $T_descr);} //если имя пользователя all, то шлём сообщение всем
if ($T_user == 'admin') {$telegram_module->sendImageToAdmin($T_img, $T_descr);} //если имя пользователя ADMIN, то шлём сообщение только ему
// if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendImageToUser($T_id, $T_img);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendImageToUser($T_user, $T_img, $T_descr);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
if ($T_video != "") { //если сообщение не пустое
$telegram_module->sendAction($T_user, "upload_video");
$T_user = mb_strtolower($T_user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($T_user == 'all') {$telegram_module->sendVideoToAll($T_video);} //если имя пользователя all, то шлём сообщение всем
if ($T_user == 'admin') {$telegram_module->sendVideoToAdmin($T_video);} //если имя пользователя ADMIN, то шлём сообщение только ему
// if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendVideoToUser($T_id, $T_video);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendVideoToUser($T_user, $T_video);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
if ($T_album != "") { //если сообщение не пустое
$telegram_module->sendAction($T_user, "upload_photo");
$T_user = mb_strtolower($T_user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($T_user == 'all') {$telegram_module->sendAlbumToAll($T_album);} //если имя пользователя all, то шлём сообщение всем
if ($T_user == 'admin') {$telegram_module->sendAlbumToAdmin($T_album);} //если имя пользователя ADMIN, то шлём сообщение только ему
// if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendAlbumToUser($T_id, $T_album);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
if ($T_user != 'all' or $T_user != 'admin') {$telegram_module->sendAlbumToUser($T_user, $T_album);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
if ($cmd != "") { //если сообщение не пустое
$telegram_module->sendAction($T_user, "typing");
// $telegram_module->execCommand($T_id, $cmd); //выполняем указанную команду от имени указанного пользователя
$telegram_module->execCommand($T_user, $cmd); //выполняем указанную команду от имени указанного пользователя
return; //прекращаем выполнение сценария
}
|
tlg_deleteMessage
|
ну и не забывать про ограничение в тлг на удаление не старше 2 суток
if (isset($params['chat_id']) && isset($params['message_id'])) {
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->deleteMessage($params['chat_id'], $params['message_id']);
}
|
tlg_editMessageText
|
правка закрепленного сообщения в группе
$drop = hex2bin('F09F92A7');
$tmp = hex2bin('F09F8CA1');
$walk = json_decode('"'.'\ud83d\ude42'.'"');
$nomove = json_decode('"'.'\ud83d\udeb7'.'"');
$green = json_decode('"'.'\ud83d\udc9a'.'"');
$yellow = json_decode('"'.'\ud83d\udc9b'.'"');
$red = json_decode('"'.'\ud83d\udc94'.'"');
$message = $tmp.(gg('Kitchen.Temperature')).$green.$walk.'Кухня '.date('H:i');
$chat_id = -1001348416906;
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//$res = $telegram_module->sendMessageToUser($chat_id,$message);
//$message_id = $res["result"]["message_id"];//7037
$message_id = 10080;
$res = $telegram_module->editMessage($chat_id,$message_id,$message);
echo '<pre>';
print_r($res);
echo '</pre>';
|
tst_tele_pchart
|
график в телеграмм
$p = 'eur.value'; //объект.свойство
$title = ''; //заголовок (без_пробелов), по умолчанию объект.свойство
$unit = 'rur'; //единицы измерения, по умолчанию °C
$gcolor = 'brown'; //цвет графика (red, brown, blue, green, orange), бесцветный по умолчанию
$bg = 'light'; //фон графика (может быть light, dark), по умолчанию dark
$gtype = 'bar'; //тип графика (может быть: curve, bar, line - ступенчатый, столбцы, плавная линия)
$fil01 = '0'; //сглаживание, по умолчанию = 0 (отсутствует)
$type = '2d'; //Период (8h = 8 часов, 8d = 8 дней, 8m = 8 месяцев)
//$this->sendAction($chat_id, 'upload_photo');
$url = BASE_URL . '/pChart/?p='.$p.'&title='.$title.'&unit='.$unit.'&gcolor='.$gcolor.'&bg='.$bg.'&fil01='.$fil01.'&type='.$type.'>ype=bar';//&op=debug';
//echo($url);
$path = DOC_ROOT . '/cms/cached/pChart.png';
file_put_contents($path, file_get_contents($url));
//$this->sendImageToAll($chat_id, $path);
rs('sendTelegram',array('img'=>$path));
|
Demo01
|
Здравствуйте, меня зовут Алиса. Я представляю систему умного дома Мажордомо и сейчас расскажу о том, что я знаю и умею.
say('Здравствуйте, меня зовут Алиса.');
say('Я представляю систему умного дома Мажордомо.');
say('И сейчас расскажу о том, что я знаю и умею.');
sleep(1);
setTimeOut('DemoTimer',"runScript('Demo02')",1);
|
Demo02
|
Во-первых, я в курсе того, какая температура и влажность в разных комнатах. Например, сейчас в Зале ХХ градусов цельсия -- это оптимальная температура. Влажность воздуха ХХ процентов. Если дома будет сухо, то я включу увлажнитель воздуха. Так же я знаю, что на улице сегодня ХХ дождь,снег, а завтра будет ХХ ясно. Я обязательно предупрежу об этом утром.
say('Во-первых, я в курсе того, какая температура и влажность в разных комнатах.');
$t=gg('Livingroom.Temperature');
say('Посмотрите на график в Зале.');
runScript('runCommandHP',array('cmd'=>'explorer "http://192.168.0.17/jpgraph/?p=sensorZal.temp&type=24h&width=1500&height=500"'));
say('Например, сейчас в Зале '.$t.' градусов цельсия -- это оптимальная температура');
$h=gg('sensorHumidityRemote3.humidity');
say('Humidity is '.$h.' %.');
say('When the air is dry I turn on the humidifier.');
$t=gg('ws.tempOutside');
$forecast=gg('WeatherTomorrow');
$forecast=str_replace('°','',$forecast);
$forecast=str_replace('...',' ',$forecast);
runScript('runCommandHP',array('cmd'=>'explorer http://pogoda.by/'));
say('Also I do know that temperature outside is '.$t.' degrees.');
say('Forecast for tomorrow is '.$forecast.' degrees.');
say('Have a look at the detailed forecast on the screen.');
say('I will remind about it in the morning.');
sleep(2);
setTimeOut('DemoTimer',"rs('Demo03')",1);
|
Demo03
|
В мои обязанности входит наблюдение за тем, где находятся мои хозяева. Я знаю, что Сергей сейчас …, а Алеся … Уровень заряда телефона Сергея ХХ процентов, а телефона Алеси ХХ процентов. Если телефон будет разряжен, то я об этом предупрежу. Так же я знаю, когда дома никого нет и когда кто-то приходит домой, чтобы рационально управлять домашними системами.
rs('DemoSay','One of my duties is locaiton tracking of family members.');
rs('DemoSay','I can show you where they have been for past 24 hours.');
runScript('runCommandHP',array('cmd'=>'explorer http://192.168.0.17/popup/app_gpstrack.html'));
$sergei_location=gg('Serge.seenAt');
$sergei_steps=gg('Serge.moves_walk_distance');
$sergei_level=gg('Serge.BattLevel');
$alesya_location=gg('Alesya.seenAt');
$alesya_level=gg('Alesya.BattLevel');
$alesya_steps=gg('Alesya.moves_walk_distance');
$sergei_location='home';
if ($sergei_location!='') {
rs('DemoSay','I do know that Sergei is in the place called '.$sergei_location);
}
/*
if ($sergei_location==$alesya_location) {
rs('DemoSay','Alice is in the same place');
} elseif ($alesya_location!='') {
rs('DemoSay','Alice is in the place called '.$alesya_location);
}
*/
//rs('DemoSay','Сергей прошёл вчера пешком '.$sergei_steps.' километров.');
rs('DemoSay','Battery level of his smartphone is at '.$sergei_level.' %.');
rs('DemoSay','I will notify when the phone\'s batter level will be running out.');
rs('DemoSay','Also I do know when nobody\'s home so I can set some appliences in a green mode.');
sleep(2);
setTimeOut('DemoTimer',"rs('Demo04')",1);
|
Demo04
|
Кстати, об управлении. Я могу управлять различными приборами или, например, светом. Вот смотрите, я сейчас немного поиграю с освещением. (переключает свет cветильников, меняет освещение) У меня записано несколько световых сцен под различные обстоятельства. Ещё по утрам я поднимаю шторы и закрываю их вечером, посмотрите как это происходит (в спальне поднимаются/опускаются шторы). Ко мне можно обратиться и через Интернет, так что вы можете меня попросить открыть ворота, даже если никого нет дома и с помощью системы видео-наблюдения контролировать, что происходит. (открывает ворота, выводит на компьютер картинку с камеры)
rs('DemoSay','Talking about control...');
rs('DemoSay','I can control different appliences and lights.');
rs('DemoSay','This is how I can play with lights.');
sleep(4);
cm('lcw1.switch');
sleep(1);
cm('lcw7.switch');
sleep(1);
cm('lcw8.switch');
sleep(1);
cm('lcw1.switch');
sleep(1);
cm('lcw2.switch');
sleep(1);
cm('lcw3.switch');
sleep(1);
cm('lcw4.switch');
callMethod("MiLamp2.setRandomColor");
rs('DemoSay','I have several scenarios for the lights and can run them autmatically.');
rs('DemoSay','Also I can close down the curtains in the evening and open them up in the morning.');
rs('DemoSay','This is how I do it.');
sleep(2);
callMethod('BedroomCurtains.open');
sleep(10);
rs('DemoSay','You can talk to me by the Internet so I can open the entry gates remotely.');
cm('EntryGates.open');
sleep(20);
cm('EntryGates.Close');
setTimeOut('DemoTimer',"rs('Demo05')",1);
|
Demo05
|
Кроме управления механизмами, я могу помочь и с развлечением. Например, сейчас включу какую-нибудь музыку из вашей коллекции. (включает музыку) Или, например, радио (включает радио). Ну или даже поставить мультфильм для ребёнка. (включает фильм на мониторе)
rs('DemoSay','Beside that I can help with entertainment.');
rs('DemoSay','For example, I can turn on some music from the list of your favorites.');
runScript('playFavoriteMusic');
sleep(15);
runScript('playPause');
sleep(2);
rs('DemoSay','Or I can play radio');
runScript('playSomethingCool');
sleep(16);
runScript('playPause');
sleep(2);
rs('DemoSay','And I can start some movie for the kids.');
runScript('runCommandHP',array('cmd'=>'explorer d:\001.avi'));
sleep(21);
runScript('runCommandHP',array('cmd'=>'cmd.exe /c taskkill /F /IM vlc.exe'));
sleep(2);
setTimeOut('DemoTimer',"rs('Demo07')",1);
|
Demo06
|
Ну как, понравилось? А ещё вы можете у меня что-нибудь спросить. Я могу найти ответы на вопросы “что такое” или “кто такой”. Попробуйте, спросите!
rs('DemoSay','How do you like it?');
rs('DemoSay','Also you can ask me about something');
rs('DemoSay','I can find answers to the questions "what is" or "who is"');
sleep(8);
context_activate(42);
|
Demo07
|
Спасибо за внимание и всегда к вашим услугам
rs('DemoSay','Thank you for attention. Always at your service!');
setTimeOut('DemoTimer',"rs('DemoEnd');",1);
|
DemoEnd
|
|
DemoSay
|
if (gg('DemoCancel')) {
return;
}
$ph='';
if (!is_array($params)) {
$ph=$params;
}
if (!$ph) {
$ph="Hello, world!";
}
/*
$path=ROOT.'cached/voice/sapi_'.md5($ph).'.mp3';
if (file_exists($path) && 0) {
echo str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path);
exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path));
} else {
exec(('cscript '.DOC_ROOT.'/rc/sapi_cached.js '.utf2win($ph)));
}
*/
$google_file=GoogleTTS($ph, 'en');
//echo $google_file;
if ($google_file) {
@touch($google_file);
//echo(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
safe_exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
/*
$tmp=explode(' ',$ph);
$total=count($tmp);
$word_delay=2;
$total_delay=$total*$word_delay;
sleep($word_delay);
*/
}
|
DemoStart
|
setGlobal('DemoMode',1);
set_time_limit(180);
setTimeOut('DemoStart','runScript("Demo01");',1);
|
test
|
setTimeOut('testTimer','say("Hello world!");',30);
|
timeNow
|
|