camImagesProcess
|
Сортировка изображений с веб-камеры
/*
///$src='/var/www/media/webcam'; // откуда брать фотки
$src='/home/andrew/Yandex.Disk/SmartHome/Tasker'; // откуда брать фотографии
//clearTimeout('camImagesTimer');
$base_path='/home/andrew/Yandex.Disk/SmartHome/Tasker';
$dst='/var/www/cms/scenes/images';
//$dst='/home/andrew/images';
// echo $src.'<br/>';
// echo $dst.'<br/>';
safe_exec('chown Andrew:1 -Rf '.$base_path.'/*');
safe_exec('chmod 0777 -f '.$base_path.'/*');
safe_exec('chmod 0777 -f '.$dst.'/*');
setTimeout('camImagesTimer','runScript("camImagesProcess");',10*60);
// echo $base_path.'<br/>';
//processLine('/home/andrew/Yandex.Disk/SmartHome/Tasker/!>/var/www/cms/scenes/images');
if (is_dir($base_path)) {
if ($dir = @opendir($base_path)) {
while (($file = readdir($dir)) !== false) {
// echo $file.'<br/>';
// if ($file!='.' && $file!='..' && is_dir($base_path.'/'.$file)) {
if ($file!='.' && $file!='..') {
$src=$base_path.'/'.$file;
//echo $src.'<br/>';
//processLine($src.'->'.$dst.'/'.$file);
processLine($src." => ".$dst."/".$file);
//processLine($src.'!>'.$dst.'/'.$file);
echo '----------------'.'<br/>';
}
}
closedir($dir);
}
} else {
echo "Cannot open $base_path";
}
//processLine("CLEAR ".$dst." 30 DAYS OLD");
//$src='e:/DCIM'; // откуда брать фотографии
//$dst='g:/camera/raw'; // куда складывать RAW
//$dst='g:/camera/jpeg'; // куда складывать JPEG
//global $ignores;
// переписываем .raw файлы
//$ignores=array('.jpeg$'); // игнорируем jpg
//processLine($src." => ".$dst."/%Y/%m-%F/%d");
// переписываем .jpg файлы
//$ignores=array('.tacitpart$'); // игнорируем raw
//processLine($src." => ".$dst."/%Y/%m-%F/%d");
*/
|
ChangeSceneBackground
|
$directory = "cms/scenes/images"; // Папка с изображениями
$allowed_types = array("jpg", "png", "gif"); //разрешенные типы изображений
$file_parts = array();
$ext = "";
$i = 0;
$img_array = array();
//пробуем открыть папку
$dir_handle = @opendir($directory) or die("Ошибка при открытии папки !!!");
while ($file = readdir($dir_handle)) { //поиск по файлам
if ($file == "." || $file == "..")
continue; //пропустить ссылки на другие папки
$file_parts = explode(".", $file); //разделить имя файла и поместить его в массив
$ext = strtolower(array_pop($file_parts)); //последний элемент - это расширение
if (in_array($ext, $allowed_types)) {
$img_array[] = $directory . '/' . $file;
$i++;
}
}
closedir($dir_handle); //закрыть папку
sg('ThisComputer.ImageForScene', $img_array[rand(0, count($img_array))]);
|
checkFreeSpace
|
Проверка свободного места на диске
/*
$max_usage=90; //%
$output=array();
exec('df',$output);
//var_dump($output);
$problems=0;
$problems_details='';
foreach($output as $line) {
if (preg_match('/(\d+)% (\/.+)/',$line,$m))
$proc=$m[1];
$path=$m[2];
if ($proc>$max_usage) {
$problems++;
$problems_details.="$path: $proc; ";
}
//echo "$path: $proc%<br/>";
}
sg("ThisComputer.SpaceProblems",$problems);
sg("ThisComputer.SpaceProblems_Details",$problems_details);
setTimeOut('checkFreeSpace','runScript("checkFreeSpace");',5*60);
*/
|
GetSceneBackground
|
Скрипт получения фонового изображения
$images = array("/var/www/cms/files/shot.jpg",
"/var/www/cms/files/shot1.jpg",
"/var/www/cms/files/shot.jpg");
$img = $images[rand(0, 2)];
$image = imagecreatefromjpeg($img);
header("Content-type: image/jpg");
readfile($img);
|
NightModeOn
|
Переводить отопление в ночной режим
|
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("Подготовка к перезагрузке",1);
setTimeout("shutdownTimer","safe_exec('sudo 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("Подготовка к выключению",1);
setTimeout("shutdownTimer","safe_exec('shutdown -h now');",15);
|
StartAvtoradioStation
|
включение авторадио на терминале
cm('RadioSetting.Control', array('sta:Авторадио'));
cm('RadioSetting.Control', array('play'));
cm('RadioSetting.Control', array('vol50'));
|
backupComplit
|
$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);
|
CheckNewUserInTelegram
|
Поиск новых юзеров в телеге
/*Автоматическая авторизация нового пользователя с уведомлением админа*/
$NewUser = SQLSelectOne('SELECT count(*) as CU FROM `tlg_user` WHERE CMD = 0');
if ($NewUser['CU'] >= 1)
{
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin('Зарегистрирован новый пользователь телеграма');
// регистрируем пользователя и отсылаем ему приветствие
$users = SQLSelect('SELECT * FROM `tlg_user` WHERE CMD = 0');
$cnt = Count($users);
For($i=0; $i<$cnt; $i++)
{
$UserID = $users[$i]['USER_ID'];
SQLExec("UPDATE `tlg_user` set CMD=1 WHERE USER_ID='".$UserID."'");
$telegram_module->sendMessageToUser($UserID, 'Добро пожаловать в цифровой мир нашего поселка!');
$telegram_module->sendMessageToAdmin('Зарегистрирован пользователь '.$UserID);
}
}
|
GetCharts
|
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImagefromobj('ThisComputer.tempOutside','white','area',3,350, 1000);
print('<br>Путь к файлу: ' . $chartPNG . '<br><br>');
print('<img src="' . $chartPNG . '">');
|
GetDeviceOnline
|
$total=254;
for($i=0;$i<$total;$i++)
{
$host='192.168.8.'.$i;
$online=ping(processTitle($host));
if ($online == 1)
{
echo "Host ".$host." is online<br>";
}
}
|
GetPhotoCam4
|
//exec('wget -O /var/www/cms/files/shot4.jpg https://a270455-smarthome.vpnki.ru/cms/files/shot.jpg', $output);
exec('ffmpeg -y -loglevel fatal -rtsp_transport tcp -i rtsp://admin:Qq123456@192.168.8.200/media/video1 -frames:v 2 -r 1 -s 1280x720 /var/www/cms/files/shot.jpg');
debmes('файл уличной камеры скачан');
|
GetRouterStat
|
Получение статистики сигнала роутера
//$xml = simplexml_load_file('http://192.168.8.1/api/monitoring/traffic-statistics'); // раскладываем xml на массив
//$TotalDownload = (($xml->TotalDownload/1000000000) * 1.07);
//echo $TotalDownload;
//sg('Counter_TotalDownload.valueWork',Round($TotalDownload, 5));
//$xml = simplexml_load_file('http://admin:Qq123456@192.168.8.1/api/device/signal'); // раскладываем xml на массив
$xml = simplexml_load_file('http://192.168.8.1/api/net/net-mode');
//$sinr = $xml->sinr;
$lteband=$xml->LTEBand;
//echo $sinr;
echo $lteband;
|
GetRouterTraffic
|
$xml = simplexml_load_file('http://192.168.8.1/api/monitoring/traffic-statistics'); // раскладываем xml на массив
$TotalDownload = (($xml->TotalDownload/1000000000) * 1.07);
debmes('Total download - '.$TotalDownload);
sg('Counter_TotalDownload.valueWork',Round($TotalDownload, 5));
|
GetSunRiseSunSetTime
|
получение JSON с сайта яндекса и определение времени восхода и заката
$url= 'https://yandex.ru/time/sync.json?geo=213';
$content=getURL($url, 0);
$data=json_decode($content,true);
//$objn=$data[0]['id'];
foreach ($data as $key=> $value)
{
if (is_array($value))
{
foreach ($value as $key1=> $value1)
{
if (is_array($value1))
foreach ($value1 as $key2=> $value2)
{
if (is_array($value2))
foreach ($value2 as $key3=> $value3)
{
if (is_array($value3))
foreach ($value3 as $key4=> $value4)
{
echo 'key4:'.$key4.'='.$value4.'<br>';
}
else echo 'key3:'.$key3.'='.$value3.'<br>';
}
echo 'echo key2:'.$key2.'='.$value2.'<br>';
if ($key2 == 'skyColor')
{
sg('ThisComputer.skyColor', $value2);
echo 'ThisComputer.skyColor'.'='.$value2.'<br>';
}
if ($key2 == 'sunrise')
{
sg('ThisComputer.SunRiseTime', $value2);
echo 'ThisComputer.SunRiseTime'.'='.$value2.'<br>';
}
if ($key2 == 'sunset')
{
echo 'ThisComputer.SunSetTime'.'='.$value2.'<br>';
sg('ThisComputer.SunSetTime', $value2);
}
}
else echo 'key1:'.$key1.'='.$value1.'<br>';
}
}
else echo 'key:'.$key.'='.$value.'<br>';
}
|
GetWebCam109File
|
Скачать файл с камеры
$url = 'http://192.168.8.103:8080/shot.jpg';
$file_name = '/var/www/cms/files/shot.jpg';
exec('ffmpeg -y -loglevel fatal -rtsp_transport tcp -i rtsp://admin:Qq123456@192.168.8.200/media/video1 -frames:v 2 -r 1 -s 1920x1080 /var/www/cms/files/shot.jpg');
//if(file_put_contents( $file_name,file_get_contents($url)))
// {
exec('curl -F qw12dsyg=@/var/www/cms/files/shot.jpg http://narodmon.ru/post', $output);
// }
//else
// {
// debmes('Фотография с уличной камеры не получена');
// }
|
GetYandexProbkiWeather
|
поучение XML с сайта яндекса
function getinfoDataXml($city)
{
//$city = 10723;
$info = array();
$cache_file = "/var/www/cms/cached/ya_weather.txt";
$url='http://export.yandex.ru/bar/reginfo.xml?region='.$city.'.xml';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($cache_file, $data);
$buf = file_get_contents($url);
if ($buf) file_put_contents($cache_file, $buf);
$xml = simplexml_load_file($cache_file);
$info['temp'] = $xml->weather->day->day_part[0]->temperature;
$info['image'] = $xml->weather->day->day_part[0]->image;
$info['image'] = str_replace("https://yastatic.net/weather/i/icons/blueye/24/", '/cms/icons/yandex/', $info['image']);
$info['image'] = str_replace("png", "svg", $info['image']);
$info['weather_type'] = $xml->weather->day->day_part[0]->weather_type;
$info['level']= $xml->traffic->region->level;
$info['icon']= '/cms/icons/yandex/'.$xml->traffic->region->icon.'.png';
$info['color']= $xml->traffic->region->icon;
$info['hint lang']= $xml->traffic->region->hint[0];
return $info;
}
$info1 = getinfoDataXml(10723);
echo $info1['temp'].'<br>';
echo $info1['image'].'<br>';
echo $info1['weather_type'].'<br>';
sg('yandex.weather_temp',Round($info1['temp'], 1));
sg('yandex.weather_image',$info1['image']);
sg('yandex.weather_type',RTrim($info1['weather_type']));
$info2 = getinfoDataXml(213);
echo $info2['level'].'<br>';
echo $info2['icon'].'<br>';
echo $info2['hint lang'].'<br>';
sg('yandex.probki_level',Round($info2['level'], 0));
sg('yandex.probki_icon',$info2['icon']);
sg('yandex.probki_color',$info2['color']);
sg('yandex.probki_hintlang',rtrim($info2['hint lang']));
|
GetYandexWeatherFact
|
Получение предсказания яндекс-погоды
//if (isset($params["level"])) $level = $params["level"]; else
$level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
$change=1;
$page_url = "https://yandex.ru/pogoda/10723"; //ссылка на погоду в Дмитрове
//делаем до 10 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 10; $i++) {
if (!$page_cont) $page_cont = file_get_contents($page_url);
}
if ($page_cont) {
//ищем <p class="maps-widget-fact__title">(.*?)</p>
preg_match_all("/<div class=\"title-icon__text\">(.*?)<\/div>/ui", $page_cont, $match2);
preg_match_all("/<p class=\"maps-widget-fact__title\">(.*?)<\/p>/ui", $page_cont, $match);
$ret2 = $match2[1][0];
$ret = $match[1][0];
if ($ret2) {
if ($change) {
echo "<br>Запрос2: ";
if (gg("yandex.alert_osadki") !== $ret2) { //если изменилась погода
say($ret2, $level);
echo "<br>Погода2 изменилась!";
sg("yandex.alert_osadki", $ret2);
} else {
echo "<br>Погода2 не изменилась!";
}
} else {
say($ret2, $level);
echo "<br>" . $ret2;
sg("yandex.main_osadki", $ret2);
}
}
if ($ret) {
if ($change) {
echo "<br>Запрос: ";
if (gg("yandex.osadki") !== $ret) { //если изменилась погода
say($ret, $level);
echo "<br>Погода изменилась!";
sg("yandex.osadki", $ret);
} else {
echo "<br>Погода не изменилась!";
}
} else {
say($ret, $level);
echo "<br>" . $ret;
sg("yandex.osadki", $ret);
}
}
} else {
echo "<br>Погода. Данные не получены.";
}
|
MosquittoRestart
|
Перезапуск сервиса
safe_exec('sudo service mosquitto restart');
say('Сервис MQTT перезапущен', 1);
|
NewSMS
|
Прочитать новое смс
say('Новое смс на '.$params['MODEM_NAME'].' от '.$params['PHONE'].' в '.$params['DATE'].': '.$params['TEXT']);
|
RunSpeedTest
|
Измерение скорости интернета
$download = 0;
$upload = 0;
//$command = exec('/usr/bin/speedtest-cli --server 8072', $out);
//beeline - 10987
//Fortex - 8072
//UMI-Net Povorovo - 29914
//NetNord Povorovo - 29805
//$command = exec('sudo speedtest -f json -s ', $out);
$command = exec('sudo speedtest -f json', $out);
//$command = exec('sudo speedtest -f json -u Mibps ', $out);
$var = json_decode($out[0]);
$download = Round((($var->download->bandwidth) * 8) / 1000000, 2);
$upload = Round((($var->upload->bandwidth) * 8) / 1000000, 2);
echo 'Speedtest: ';
echo $download.'/';
echo $upload;
if ($download > 0)
{
if ($download > 0) { setGlobal('Beeline.Download', $download);}
if ($upload > 0) { setGlobal('Beeline.Upload', $upload); }
say('Скорость билайна - '.$download.'-'.$upload, 1);
}
|
CheckStatusHS100
|
//спальня 2 этаж
$command = exec('/var/www/h110.sh 192.168.8.125 9999 check', $out);
foreach ($out as $value)
{
echo $value.'<br>';
if ($value == 'ON')
{
sg('Floor2HS100.status',1);
echo 'Floor2HS100.status=1<br>';
}
if ($value == 'OFF')
{
sg('Floor2HS100.status',0);
echo 'Floor2HS100.status=0<br>';
}
}
$out = '';
//Гостинная
$command = exec('/var/www/h110.sh 192.168.8.108 9999 check', $out);
foreach ($out as $value)
{
echo $value.'<br>';
if ($value == 'ON')
{
sg('GostHS100.status',1);
echo 'GostHS100.status=1<br>';
}
if ($value == 'OFF')
{
sg('GostHS100.status',0);
echo 'GostHS100.status=0<br>';
}
}
$out = '';
//3 реле
$command = exec('/var/www/h110.sh 192.168.8.125 9999 check', $out);
foreach ($out as $value)
{
echo $value.'<br>';
if ($value == 'ON')
{
sg('KitchenHS100.status',1);
echo 'KitchenHS100.status=1<br>';
}
if ($value == 'OFF')
{
sg('KitchenHS100.status',0);
echo 'KitchenHS100.status=0<br>';
}
}
|
CheckUsersOnline
|
Проверка наличия пользователя дома
// Проверка пользователей
$objects = getObjectsByClass('Users');
// переберем все объекты в класе
$text = 'Сейчас дома: ';
$i = 0;
$total = count($objects);
foreach($objects as $obj)
{
$status1 = getGlobal($obj['TITLE'].".isHome");
$status2 = getGlobal($obj['TITLE'].".atHome");
if (($status1 == 1) or ($status2 == 1))
{
if (($i > 0) && ($i < $total))
{
$text .= ', ';
}
$text .= Trim(getGlobal($obj['TITLE'].".fullName"));
$i = $i + 1;
}
}
setGlobal('ThisComputer.UsersInHome', $text);
/*
$total = count($objects);
$devarr = explode(';', $devices);
foreach ($devarr as $ip)
{
if($ip != '')
{
//$online = ping($ip);
if (IsOnline($ip))
{
callMethodSafe($obj['TITLE'].'.HomeWiFi');
debmes('User в сети ->'.$ip);
break;
}
}
}
*/
|
ClearDatabase
|
Очистка мусора
SQLExec("DELETE pvalues . * FROM `pvalues`
LEFT JOIN objects ON pvalues.OBJECT_ID = objects.id
LEFT JOIN properties ON pvalues.PROPERTY_ID = properties.id
WHERE objects.TITLE IS NULL OR properties.TITLE IS NULL");
SQLExec("DELETE phistory . * FROM `phistory`
LEFT JOIN pvalues on phistory.value_id=pvalues.id
WHERE pvalues.id IS NULL");
SQLExec("update patterns set LOG=''");
SQLExec("update pinghosts set LOG=''");
SQLExec("update gpsactions set LOG=''");
SQLExec("DELETE FROM actions_log WHERE TO_DAYS(NOW())-TO_DAYS(ADDED)>1");
|
GetCOVID
|
Получить статистику по заражению
$region = ['Москва','Московская область'];
$str = file_get_contents('https://yandex.ru/web-maps/covid19');
$covid = [];
$re_json = '/class=\"config-view\">(.+?)</';
$re_rus = '/\"covid-stat-view__item-value\">(.+?)</';
$re_time = '/\"covid-panel-view__subtitle\">(.+?)</';
// Статистика по России
preg_match_all($re_rus, $str, $matches, PREG_SET_ORDER, 0);
$covid['Россия']['cases'] = (int)preg_replace("/[^0-9]/", '', $matches[0][1]);
$covid['Россия']['new_cases'] = (int)preg_replace("/[^0-9]/", '', $matches[1][1]);
$covid['Россия']['cured'] = (int)preg_replace("/[^0-9]/", '', $matches[2][1]);
$covid['Россия']['deaths'] = (int)preg_replace("/[^0-9]/", '', $matches[3][1]);
// Мировая статистика и статистика по регионам России
ini_set('pcre.backtrack_limit', 5000000);
preg_match($re_json, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$data = json_decode($matches[1][0], true);
$covid['Россия']['tests'] = (int)preg_replace("/[^0-9]/", '', $data['covidData']['tests']);
foreach ($data['covidData']['items'] as $item) {
// Мировая статистика
if (!isset($item['ru'])) {
$covid['Мир']['cases'] += $item['cases'];
$covid['Мир']['cured'] += $item['cured'];
$covid['Мир']['deaths'] += $item['deaths'];
}
// Статистика по странам и регионам России
if (in_array($item['name'], $region)) {
$covid[$item['name']]['cases'] += $item['cases'];
$covid[$item['name']]['cured'] += $item['cured'];
$covid[$item['name']]['deaths'] += $item['deaths'];
if (is_array($item['histogram']) && count($item['histogram']) > 2) {
$cnt = count($item['histogram']);
$today = $item['histogram'][$cnt-1]['value'];
$yesterday = $item['histogram'][$cnt-2]['value'];
$covid[$item['name']]['new_cases'] = $today - $yesterday;
}
}
}
//$covid['Updated'] = substr($data['covidData']['covid-panel-view__subtitle'], 0, //strpos($data['covidData']['covid-panel-view__subtitle'], '('));
preg_match($re_time, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$covid['Updated'] = substr($matches[1][0], 0, strpos($matches[1][0], ' ('));
//var_dump($covid); // для отладки раскомментировать
$report = "<b>️ COVID-2019 ️</b>\n\n";
$report .= "<b>В Москве:</b>\n";
//$report .= "Заражений всего: <b>" . $covid['Москва']['cases'] . "</b>\n";
$report .= "Заражений за сутки: <b>" . $covid['Москва']['new_cases'] . "</b>\n\n";
//$report .= "Выздоровело: <b>" . $covid['Москва']['cured'] . "</b>\n";
//$report .= "Смертей: <b>" . $covid['Москва']['deaths'] . "</b>\n";
//$report .= "Проведено тестов: <b>" . $covid['Москва']['tests'] . "</b>\n\n";
$report .= "<b>В Московской области:</b>\n";
//$report .= "Заражений всего: <b>" . $covid['Московская область']['cases'] . "</b>\n\n";
$report .= "Заражений за сутки: <b>" . $covid['Московская область']['new_cases'] . "</b>\n\n";
//$report .= "Выздоровело: <b>" . $covid['Московская область']['cured'] . "</b>\n";
//$report .= "Смертей: <b>" . $covid['Московская область']['deaths'] . "</b>\n";
//$report .= "Проведено тестов: <b>" . $covid['Московская область']['tests'] . "</b>\n\n";
$report .= "<b>В России:</b>\n";
//$report .= "Заражений всего: <b>" . $covid['Россия']['cases'] . "</b>\n";
$report .= "Заражений за сутки: <b>" . $covid['Россия']['new_cases'] . "</b>\n\n";
//$report .= "Выздоровело: <b>" . $covid['Россия']['cured'] . "</b>\n";
//$report .= "Смертей: <b>" . $covid['Россия']['deaths'] . "</b>\n";
//$report .= "Проведено тестов: <b>" . $covid['Россия']['tests'] . "</b>\n\n";
//$report .= "<b>В мире:</b>\n";
//$report .= "Заражений: <b>" . $covid['Мир']['cases'] . "</b>\n";
//$report .= "Выздоровело: <b>" . $covid['Мир']['cured'] . "</b>\n";
//$report .= "Смертей: <b>" . $covid['Мир']['deaths'] . "</b>\n\n";
$report .= "По состоянию на: <b>" . $covid['Updated'] . "</b>";
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($report);
|
GetUPSStatus
|
считать параметры UPS
$command = exec('sudo pwrstat -status', $out);
foreach ($out as $value)
{
//DebMes($value);
if (strpos( $value, 'State...') > 0)
{
$tmp = explode(' ', $value);
$ups_state = $tmp[1];
}
if (strpos( $value, 'Battery Capacity...') > 0)
{
$tmp = explode(' ', $value);
$ups_capacity = $tmp[2];
}
if (strpos( $value, 'Load...') > 0)
{
$tmp = explode(' ', $value);
$ups_load = $tmp[1];
}
if (strpos( $value, 'Remaining Runtime..') > 0)
{
$tmp = explode(' ', $value);
$ups_remaining = $tmp[2];
}
if (strpos( $value, 'Last Power Events..') > 0)
{
$tmp = explode(' ', $value);
$ups_events = $tmp[3];
}
}
if ($ups_state !== 'Normal')
{
$text = 'Проблемы с электричеством, работает UPS'.PHP_EOL;
$text .= 'Заряд батареи UPS - '.$ups_capacity.' %'.PHP_EOL;
$text .= 'Нагрузка UPS - '.$ups_load.' ватт'.PHP_EOL;
$text .= 'Расчетное время работы UPS - '.$ups_remaining.' мин.'.PHP_EOL;
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($text);
}
|
manageConnectService
|
Включение/выключение сервиса синхронизации через облако
include_once(DIR_MODULES.'connect/connect.class.php');
$cn=new connect();
$cn->getConfig();
if ($params['start']) {
$cn->config['CONNECT_SYNC']='1';
$cn->saveConfig();
}
if ($params['stop']) {
$cn->config['CONNECT_SYNC']='0';
$cn->saveConfig();
}
echo $cn->config['CONNECT_SYNC'];
|
manageWebCamMotion
|
Включение/выключение детектора движений на камере
if ($params['start']) {
DebMes("Starting web-cam motion detection");
getURL('http://localhost:8080/0/detection/start',0);
}
if ($params['stop']) {
DebMes("Stopping web-cam motion detection");
getURL('http://localhost:8080/0/detection/pause',0);
}
|
manageWebCamService
|
Включение/выключение вебкамеры
if ($params['start']) {
safe_exec('cp /etc/motion/motion_enabled /etc/default/motion');
safe_exec('service motion start');
}
if ($params['stop']) {
safe_exec('cp /etc/motion/motion_disabled /etc/default/motion');
safe_exec('service motion stop');
}
|
SendTelegram
|
Отправка сообщения в телеграмм
//SendTelegram
// params
$message = $params['message'];
$img = $params['img'];
$video = $params['video'];
$album = $params['album'];
$descr = $params['description'];
$chat_id = $params['chat_id'];
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//Если текст
if ($message){
$telegram_module->sendMessageToUser($chat_id, $message);
}
//Если картинка
if ($img) {
$telegram_module->sendAction($chat_id,"upload_photo");
$telegram_module->sendImageToUser($chat_id, $img,$descr);
}
//Если кино
if ($video) {
$telegram_module->sendVideoToUser($chat_id, $video);
}
//Если альбом
if ($album) {
$telegram_module->sendAlbumToUser($chat_id, $album,$descr);
}
|
WebCam1Record
|
include(DIR_MODULES . 'webcam_recorder/webcam_recorder.class.php');
$record = new webcam_recorder();
$record->recording("2");
|
send_mqtt
|
include_once(DIR_MODULES . 'mqtt/mqtt.class.php');
$mqtt = new mqtt();
$topic = "IvannikovAV/SmartHome/say";
$value = gg('ThisComputer.lastSayMessage');
$rezult = $mqtt->mqttPublish($topic, $value, 0, 0);
|
BackgroundFileExists
|
Тестирование метода поиска изменённых файлов
$src='/home/andrew/Yandex.Disk/SmartHome/Tasker'; // откуда брать фотографии
$dst='/var/www/cms/scenes/images'; // куда складывать
processLine($src." => ".$dst);
$src='/var/www/cms/scenes/images/537822318/photos'; // откуда брать фотографии
processLine($src." => ".$dst);
DebMes('обнаружен новый файл для сцены');
$src='/var/www/cms/scenes/images/-1001258261326/photos';
processLine($src." => ".$dst);
|
CheckGEMail
|
Получение количества писем в почтовых ящиках
$objects = getObjectsByClass("Users");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".GMailAcc") != "" && gg($obj['TITLE'].".GMailPass") != ""){ //если поля GMailAcc и GMailPass НЕ пустые
$user = gg($obj['TITLE'].".GMailAcc"); //имя пользователя
$pass = gg($obj['TITLE'].".GMailPass"); //пароль
$data_file = "https://".$user.":".$pass."@mail.google.com/mail/feed/atom";
$xml = simplexml_load_file($data_file); //раскладываем xml на массив
//echo $data_file;
//echo $xml;
$unread = $xml->fullcount;
if ($unread == "") {$unread = "0";}
if (gg($obj['TITLE'].".GMailUnread") != $unread)
{sg($obj['TITLE'].".GMailUnread",$unread);}
}
}
|
CopyYandexCoockieFile
|
Копирование сервисного файла для Алисы
$src = '/var/www/cms/files/new_yandex_coockie.txt';
$dst = '/var/www/cms/cached/yadevices/new_yandex_coockie.txt';
if (!file_exists($dst))
{
copy($src, $dst);
debmes('Cкопирован файл '.$dst);
}
else
{
debmes('Файл обнаружен ->'.$dst);
}
|
CreateBackup
|
/*сначала зачищаем каталог*/
safe_exec('rm /var/www/cms/saverestore/*');
debmes('зачистили saverestore');
/*потом запускаем фомирование резервной копии*/
include(DIR_MODULES . 'backup/backup.class.php');
$backup_module = new backup();
$backup_module->create_backup();
|
GetTemperatureInside
|
Say('В доме - '.GetGlobal('TempSensor01.value').' градусов',1);
Say('В спальне - '.GetGlobal('Sensor_temp_Bedroom2.value').' градусов',1);
Say('В парилке - '.GetGlobal('Sensor_temp_parilka.value').' градусов',1);
Say('В душевой - '.GetGlobal('Sensor_temp_humidity_moech.value').' градусов',1);
|
Hourly
|
Выполняется каждый час
|
MorningAlarm
|
Утренний будильник
// Говорим доброе утро
Say('Утро доброе!',0);
// Говорим текущее время
say('Сейчас '.timeNow(),0);
// Запускаем скрипт чтения погоды на сегодня
runScript('tellWeather');
//Ставим дневной режим в термостате туалета
if ((getGlobal('EconomMode.active')) <> "1")
{
setGlobal('RelayTH1.TempValue','15');
}
|
motionDetected
|
Сработал детектор движения на веб-камере
/*
DebMes("Motion detected: ".serialize($params));
callMethod('MotionSensorCam.motionDetected');
setTimeOut('motionDetectedTimer','runScript("camImagesProcess");',10);
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
*/
|
NewTelegrammFile
|
Сканирование новых файлов, отправленных через Телеграмм
$filename = $params['FILENAME'];
DebMes('Обнаружен новый файл');
//$filename = '/var/www/cms/scenes/images/537822318/photos/file_39.jpg';
$src = '/var/www/cms/scenes/images/537822318/photos';
$dst = '/var/www/cms/scenes/images';
if (file_exists($dst. '/pic1.jpg')) unlink($dst. '/pic1.jpg');
if (file_exists($filename)) rename($filename, $dst.'/pic1.jpg');
//$src = '/var/www/cms/scenes/images/-1001258261326/photos';
//if (file_exists($dst. '/pic1.jpg')) unlink($dst. '/pic1.jpg');
//if (file_exists($filename)) rename($filename, $dst.'/pic1.jpg');
DebMes($filename);
|
NobodyHome
|
Срабатывает, когда никого дома нет
RunScript('SetIlluminationOff');
|
ReadWetherToday
|
Чтение прогноза погоды
include_once(DIR_MODULES . 'app_openweather/app_openweather.class.php');
$openweather = new app_openweather();
$openweather->get_weather(gg('ow_city.id'));
$weather.="Сегодня ожидается ".str_replace('°',' ',getGlobal('ow_day0.temperature'));
$weather.=".\nЗавтра ".str_replace('°',' ',getGlobal('ow_day1.temperature'));
$weather.=".\nСейчас на улице ".gg('ThisComputer.TempOutside').'.';
$weather.=".\nВосход Солнца в ".getGlobal('SunRiseTime').'.';
$weather.=".\nСолнце зайдёт в ".getGlobal('SunSetTime');
//$weather.=str_replace('°','',$weather);
say($weather,1);
|
SendStatusSystemToTelegramm
|
Отправка сводной статистики состояния системы в Телеграмм
//SendTeleStatus
//Картинки (как их получить, см Примечание и есть отдельный блог и на форуме )
$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'.'"');
$subj = '<b>';
$subj .= gg('timeNow').'</b>'.PHP_EOL.'<code>'.gg('somebodyHomeText').PHP_EOL.'...'.PHP_EOL;
$subj .= gg('lastSayMessage').PHP_EOL;
$subj .='...'.'</code>'.PHP_EOL;
$subj .= '<b>Статусы:</b>'.PHP_EOL;
$subj .='<code>';
$subj .='Система: ';//.gg('system.stateTitle').PHP_EOL;
if(gg('System.stateColor')=='green'){
$subj .= $green.PHP_EOL;
}else{
if(gg('System.stateColor')=='yellow') $subj .= $yellow;
if(gg('System.stateColor')=='red') $subj .= $red;
$subj .= gg('System.stateDetails').PHP_EOL;
}
$subj .='Связь : ';//.gg('Communication.stateTitle').PHP_EOL;
if(gg('Communication.stateColor')=='green'){
$subj .= $green.PHP_EOL;
}else{
if(gg('Communication.stateColor')=='yellow') $subj .= $yellow;
if(gg('Communication.stateColor')=='red') $subj .= $red;
$subj .= gg('Communication.stateDetails').PHP_EOL;
}
$subj .='...'.PHP_EOL.'</code>';
$subj .='<b>комнаты</b><code> '.$tmp.'°С '.$drop.'% '.$walk.PHP_EOL;//заголовок статуса (я подгонял под свой телефон((
$objects = getObjectsByClass("Rooms");
foreach($objects as $obj) {
$room = mb_substr(gg($obj['TITLE'].".title")." ",0,12); // тут основная фишка!
$room .= mb_substr(gg($obj['TITLE'].".Temperature")." ",0,7);
$room .= mb_substr(gg($obj['TITLE'].".Humidity")." ",0,5);
if(gg($obj['TITLE'].".SomebodyHere")){
$room .= $walk.gg($obj['TITLE'].".LatestActivityTime");
}else{
$room .= $nomove.substr(gg($obj['TITLE'].".LatestActivityTime"),0,5);
}
$subj .= $room.PHP_EOL;
}
$subj .= '</code>';
//echo($subj);
runScript('SendTelegram', array("message"=>$subj));
|
SetAllLightOff
|
Выключение праздничной иллюминации
Sleep(1);
RunScript('SetIlluminationOff');
Sleep(1);
RunScript('SetStreetLightOff');
|
SetAllLightOn
|
Включение праздничной иллюминации
Sleep(1);
RunScript('SetIlluminationOn');
Sleep(1);
RunScript('SetStreetLightOn');
|
SetIlluminationOff
|
Выключение праздничной иллюминации
//<Баня
if (gg('Relay1.status') == 1)
{
CallMethod('Relay1.turnOff');
}
//Елка
if (gg('Relay3.status') == 1)
{
CallMethod('Relay3.turnOff');
}
//Прожектор
if (gg('Relay5.status') == 1)
{
CallMethod('Relay5.turnOff');
}
//Крыльцо
if (gg('Relay6.status') == 1)
{
CallMethod('Relay6.turnOff');
}
say ('Праздничная иллюминация выключена!', 1);
|
SetIlluminationOn
|
Включение праздничной иллюминации
if (getGlobal('Relay1.status') != 1)
{
CallMethod('Relay1.turnOn');
}
if (gg('Relay3.status') != 1)
{
CallMethod('Relay3.turnOn');
}
if (gg('Relay5.status') != 1)
{
CallMethod('Relay5.turnOn');
}
say ('Праздничная иллюминация активирована!', 1);
|
SetStreetLightOff
|
Выключение праздничной иллюминации
if (getGlobal('Relay11.status') == 1)
{
CallMethod('Relay11.turnOff');
}
if (getGlobal('Relay6.status') == 1)
{
CallMethod('Relay6.turnOff');
say ('Уличные фонари выключены!', 1);
}
|
SetStreetLightOn
|
Включение праздничной иллюминации
$SunRiseTime = getGlobal('SunRiseTime');
$SunSetTime = getGlobal('SunSetTime');
if (timeBetween($SunRiseTime,$SunSetTime))
{
/*Светлое время суток*/
}
if (!timeBetween($SunRiseTime,$SunSetTime))
{
/*Темное время суток*/
if (getGlobal('Relay11.status') != "1")
{
CallMethod('Relay11.turnOn');
}
if (getGlobal('Relay6.status') != "1")
{
CallMethod('Relay6.turnOn');
say ('Уличные фонари включены!', 1);
}
}
|
SomebodyHome
|
Срабатывает в том случае, когда кто-то появился дома
callMethod('EconomMode.deactivate');
say('Здравствуйте!', 1);
runScript('reportStatus', array());
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto'))
{
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
//Ставим обычный режим в термостате туалета
if (((getGlobal('EconomMode.active')) <> 1) && ((getGlobal('NightMode.active')) <> 1))
{
setGlobal('RelayTH1.TempValue','12');
}
|
startUp
|
Система загружена
say('Система загружена', 2);
runScript('tellIPAddress', array());
|
telegram_magnetic_storm_forecast
|
Получение прогноза магнитных бурь на три дня
$chat_id = 537822318; //ид вашего канала
$url = 'https://tesis.lebedev.ru/upload_test/files/fc3_RHN2.png'; //юрл скачиваемой картинки
$path = DOC_ROOT . '/cms/cached/fc3_RHN2.png'; // путь сохранения оной
$result = DOC_ROOT . '/cms/cached/result.png'; //путь сохранения после конвертации
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
file_put_contents($path, file_get_contents($url));
exec("convert " . $path . " -alpha off " . $result); //отключаем альфа канал
$telegram_module->sendimage($chat_id, $path, 'Прогноз магнитных бурь на три дня');
|
turnOffEverything
|
Выключить все приборы отопления
$objects=array('GostHS100','КitchenHS100','Floor2HS100', 'Relay_POW_R2');
foreach($objects as $o)
{
callMethod($o.'.turnoff');
}
$objects=array('Thermostat_Bedroom','Thermostat_Livingroom','Thermostat_Kitchen');
foreach($objects as $o)
{
callMethod($o.'.disable');
}
|
turnONEverything
|
Включить все приборы отопления
$objects=array('GostHS100','КitchenHS100','Floor2HS100', 'Relay_POW_R2');
foreach($objects as $o)
{
callMethod($o.'.turnOn');
}
$objects=array('Thermostat_Bedroom','Thermostat_Livingroom','Thermostat_Kitchen');
foreach($objects as $o)
{
callMethod($o.'.turnOn');
}
|
WeatherDetail
|
Сказать подробный прогноз погоды
Say(GetGlobal('weatherTomorrowweatherToday'),1);
|
yandexWeatherFact
|
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
$page_url = "https://yandex.by/pogoda/himki?lat=55.901284&lon=37.401328"; //ссылка на погоду
//делаем до 10 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 10; $i++) {
if (!$page_cont) $page_cont = file_get_contents($page_url);
}
if ($page_cont) {
//ищем <p class="maps-widget-fact__title">(.*?)</p>
preg_match_all("/<p class=\"maps-widget-fact__title\">(.*?)<\/p>/ui", $page_cont, $match);
$ret = $match[1][0];
if ($ret) {
if ($change) {
echo "<br>Запрос: ";
if (gg("yw_mycity.osadki") !== $ret) { //если изменилась погода
say($ret, $level);
echo "<br>Погода изменилась!";
sg("yw_mycity.osadki", $ret);
} else {
echo "<br>Погода не изменилась!";
}
} else {
say($ret, $level);
echo "<br>" . $ret;
sg("yw_mycity.osadki", $ret);
}
}
} else {
echo "<br>Погода. Данные не получены.";
}
|
Прогноз Метеоинфо
|
//Для разных пунктов может быть разный набор полей -- картинки и описания может не быть
//debmes('get_meteoinfo - start');
$lines = file('http://old.meteoinfo.ru/pogoda/russia/moscow-area/sheremetevo');
if(!$lines) {
DebMes('get_meteoinfo - Не удалось прочитать файл с фактом с meteoinfo.ru');
return;
}
// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
$fl=0;
foreach ($lines as $line_num => $line) {
//echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
switch ($fl){
case 1:
$temp= strip_tags($line);
break;
case 2:
$humidity=strip_tags($line);
break;
case 3:
$metcast=strip_tags($line);
break;
case 4:
$winddir=strip_tags($line);
break;
case 5:
$windspeed=strip_tags($line);
break;
case 6:
$clouds=strip_tags($line);
break;
case 7:
$rain=strip_tags($line);
break;
}
$fl=0;
$mystr=htmlspecialchars($line);
$pos=strpos( $mystr,'td class=ww bgcolor');
if(!$pos===false){
$ps=strpos($mystr,'weather_images');
if(!$ps===false){
$ps1=strpos($mystr,'gif');
$img=substr($mystr,$ps+15,$ps1-$ps-16);
//echo '/images/weather_images/'.$img.'.gif';
}
}
$mystr=strip_tags($line);
$pos=strpos( $mystr,'(время м');
if($pos>0){
$t_update=substr($mystr,$pos-8,8);
$dat_update=substr($mystr,1,$pos-9);
}
$pos=strpos( $mystr,'Температура воздуха, ');
if($pos>0){
$fl=1;
}
$pos=strpos( $mystr,'Относительная влажность, %');
if(!$pos===false){
$fl=2;
}
$pos=strpos( $mystr,'Комментарий к погоде');
if(!$pos===false){
$fl=3;
}
$pos=strpos( $mystr,'Направление ветра');
if(!$pos===false){
$fl=4;
}
$pos=strpos( $mystr,'Скорость ветра, м/с');
if(!$pos===false){
$fl=5;
}
$pos=strpos( $mystr,'Балл общей облачности');
if(!$pos===false){
$fl=6;
}
$pos=strpos( $mystr,'Осадки за 12 часов, мм');
if(!$pos===false){
$fl=7;
}
}
/*
if(isset($temp)) sg("minfo.Temp",(float)$temp);
if(isset($clouds)) sg("minfo.clouds",(float)$clouds);
if(isset($windspeed)) sg("minfo.WindSpeed",(float)$windspeed);
if(isset($winddir)) sg("minfo.Winddir",trim($winddir));
if(isset($img)) sg("minfo.Image",$img);
if(isset($humidity)) sg("minfo.Humidity",(float)$humidity);
if(isset($metcast)) {
//debmes('metcast!');
sg("minfo.Type",trim($metcast));
}
if(isset($dat_update)) sg("minfo.day_txt",trim($dat_update));
if(isset($t_update)) sg("minfo.hour",trim($t_update));
if(isset($rain)) sg("minfo.percip12",trim($rain));
*/
/*
$pos = strpos($metcast, "дожд");
if ($pos === false) {
sg("minfo.Rain",0);
} else {
sg("minfo.Rain",1);
}
$pos = strpos($metcast, "снег");
if ($pos === false) {
sg("minfo.Rain",0);
} else {
sg("minfo.Rain",1);
}
*/
$cast='Погода '.trim($dat_update).' на '.trim($t_update).'. ';
$cast=$cast.trim($metcast).'.';
$cast=$cast.' Температура за окном '.trim($temp).' °C.';
//$rf=myRealFeel($temp,$humidity,$windspeed);
$cast=$cast.' Ощущается как '.$rf.' °C.';
$cast=$cast.' Относительная влажность '.trim($humidity).' %.';
if($windspeed>0){
$cast=$cast.' Ветер '.trim($winddir).'. Скорость '.trim($windspeed).' м в секунду.';
}
$cast=$cast.' Облачность '.trim($clouds).' %.';
if($rain>0){
$cast=$cast.' Осадки за 12 часов '.trim($rain).' мм.';
}
//sg('minfo.metcast',$cast);
DebMes($cast);
debmes('get_meteoinfo OK');
|