Date_Full
|
$time = time();
$days = array('воскресенье','понедельник','вторник','среда','четверг','пятница','суббота');
$months = array(1=>'январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
$months2 = array(1=>'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$daymonth = array(1=>'первое','второе','третье','четвертое','пятое','шестое','седьмое','восьмое','девятое','десятое','одиннадцатое','двенадцатое','тринадцатое','четырнадцатое','пятнадцатое','шестнадцатое','семнадцатое','восемнадцатое','девятнадцатое','двадцатое','двадцать первое','двадцать второе','двадцать третье','двадцать четвертое','двадцать пятое','двадцать шестое','двадцать седьмое','двадцать восьмое','двадцать девятое','тридцатое','тридцать первое');
$day_num = (int)date('w',$time);
$month_num = (int)date('m',$time);
$day_month = (int)date('j',$time);
$day_of_month = $daymonth[$day_month];
$day_of_week = $days[$day_num];
$month_txt1 = $months[$month_num];
$month_txt2 = $months2[$month_num];
//перевести на кэш todo
sg('ThisComputer.MonthNum',$month_num);
sg('ThisComputer.MonthTXT',$month_txt1);
sg('ThisComputer.MonthTXTalt',$month_txt2);
sg('ThisComputer.DayOfMonthNum',$day_month);
sg('ThisComputer.DayOfMonthTXT',$day_of_month);
sg('ThisComputer.DayOfWeekTXT',$day_of_week);
sg('ThisComputer.DayOfWeekNum',$day_num);
sg('ThisComputer.DateNow',date( "d.m.Y", $time));
sg('ThisComputer.YearNow',date("Y",$time));
if($day_month=='1'){
sg('ThisComputer.WorkDay',weekday($time,1));//--> 1 - рабочий день
}else{
sg('ThisComputer.WorkDay',weekday());//--> 1 - рабочий день
}
//tomorrow
$tom = strtotime("+1 day");
sg('ThisComputer.DateTommorow',date( "d.m.Y", $tom));
sg('ThisComputer.DateTomDay',(int)date('j',$tom).' '.$months2[(int)date('m',$tom)]);
|
EcoChanged
|
cm('nl4.turnoff');
cm('nl5.turnoff');
cm('nl1.turnoff');
|
sun
|
восход/закат --> weather_my
//$lat=gg('ThisComputer.latitude'); // широта
//$long=gg('ThisComputer.longitude'); // долгота
$lat=55.4734;
$long= 37.7848;
$sun_info = date_sun_info(time(), $lat, $long);
//print_r($sun_info);
$sunrise = $sun_info['sunrise'];
echo 'Восход: '.date("H:i", $sunrise).'<br>';
sg('weather_my.SunRise',date("H:i", $sunrise));
$sunset = $sun_info['sunset'];
$day_length = $sunset - $sunrise;
echo 'Заход: '.date("H:i", $sunset).'<br>';
echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
sg('weather_my.SunSet',date("H:i", $sunset));
sg('weather_my.LongTag',gmdate("H:i", $day_length));
echo 'В зените: '.date("H:i", $sun_info['transit']).'<br>';
sg('weather_my.Transit',date("H:i", $sun_info['transit']));
$civil_twilight_begin = $sun_info['civil_twilight_begin'];
echo 'Начало утренних сумерек: '.date("H:i", $civil_twilight_begin).'<br>';
sg('weather_my.civil_begin',date("H:i", $civil_twilight_begin));
$civil_twilight_end = $sun_info['civil_twilight_end'];
echo 'Конец вечерних сумерек: '.date("H:i", $civil_twilight_end).'<br>';
sg('weather_my.civil_end',date("H:i", $civil_twilight_end));
//учтём сезон
$month_num = (int)date('m');
if($month_num>4 && $month_num<9){
$season = -1;
$sunrise = $civil_twilight_begin;//для лета утренние сумерки
}else{
$season = 1;
}
$lightTimeStart = $sunrise + $season*10*60;
$lightTimeEnd = $sunset - $season*10*60;
debmes('начало света: '.date("H:i", $lightTimeStart));
debmes('конец света : '.date("H:i", $lightTimeEnd));
AddScheduledJob("job_civil_twilight_end","say('Сумерки!',2);", $civil_twilight_end);
//AddScheduledJob("job_SunRise","say('Рассвет');", $sunrise);
AddScheduledJob("job_SunSet","say('Закат',2);", $sunset);
// AddScheduledJob("job_DarknessMode_deactivate","cm('DarknessMode.deactivate');",$lightTimeStart);
// AddScheduledJob("job_DarknessMode_activate","cm('DarknessMode.activate');", $lightTimeEnd);
$data = array("lightStart" => $lightTimeStart,"lightEnd" => $lightTimeEnd,"onlyone" => 1);
//20210903
$rec = SQLSelectOne("select * from clnd_events where `TITLE`='set darkness mode' and DUE = '".date('Y-m-d H:i:00', $lightTimeStart)."'");
if(!$rec){
runScript('Task_darknessmode', $data);
}
//чтобы не прошляпить после перезагрузки, передёрнем DarknessMode
//$clouds = (int)gg('weather_my.clouds')*60*0.6; //(0..10) учтём облачность max 60*0.6*10=1ч
if (timeBetween(date("H:i", $lightTimeStart),date("H:i", $lightTimeEnd)) && gg('DarknessMode.active')==1) {
cm('DarknessMode.deactivate');
} elseif (!timebetween(date("H:i", $lightTimeStart),date("H:i", $lightTimeEnd)) && gg('DarknessMode.active')!=1) {
cm('DarknessMode.activate');
}
echo 'Начало темно: '.date("H:i", $lightTimeEnd).'<br>';
echo 'Конец темно: '.date("H:i", $lightTimeStart).'<br>';
|
testRoomsActivity
|
Запуск каждые 2 минуты. установим PresenceMode,registerEvent 'SecurityAlert'
$lastMove = registeredEventTime('inhouseMovement');//последнее движение - когда
$isMove = (time()-$lastMove)<20*60?1:0;//есть движение
//Найдём комнаты с активностью, отсортируем по времени сразу
$sql = "select * from vw_activity_in_rooms";
$rec = SQLSelect($sql);//т = 0.0150 сек
$total = count($rec); //кол-во комнат с активностью
/////////////////////////////////////////////////////////////////////////////////////
$res_rooms = array();
for ($i = 0; $i < $total; $i++) {
$res_rooms[] = $rec[$i]['room_name'];
}
if ($total>0) {
$ActivityAtHome = "Активность: " . implode(", ", $res_rooms);//уже отсортировано по времени Активность: myRoom1,myRoom2,...
}else{
$ActivityAtHome = "Нет активности с ".((time()-$lastMove)>12*60*60)?date("d/m/Y H:i",$lastMove):date("H:i",$lastMove);
}
//echo($ActivityAtHome.'<br>');
/////////////////////////////////////////////////////////////////////////////////////
//Проверка есть ли люди дома по /WIFI/ и GPS
$sql = "SELECT cn.fname FROM `pvalues` v
JOIN properties p ON v.`PROPERTY_ID` = p.`ID`
JOIN objects o ON v.`OBJECT_ID` = o.`ID`
JOIN classes c ON o.class_id = c.id
join (SELECT v.`VALUE` fname, o.id obj_id FROM `pvalues` v
JOIN properties p ON v.`PROPERTY_ID` = p.`ID`
JOIN objects o ON v.`OBJECT_ID` = o.`ID`
JOIN classes c ON o.class_id = c.id WHERE c.title LIKE 'Users' And p.title like 'FullName') cn on cn.obj_id = o.id
WHERE c.title LIKE 'Users' And ((p.title like 'atHome' AND v.`VALUE` = '1') or (p.title like 'HomeWiFi' AND v.`VALUE` = '1'))
group by cn.fname";
$rec = SQLSelect($sql);//т = 0.0190 сек
$total = count($rec); //количество обнаруженных юзеров в доме
saveToCache('MJD:PresenceMode.usersCount',$total);
postToWebSocketQueue('PresenceMode.usersCount',$total);
$usr = 'Дома: никого. ';
$atHome = 0;
if($total>0){
$users = array();
for ($i = 0; $i < $total; $i++) {
$users[] = $rec[$i]['fname'];
}
$usr = 'Дома: ' . implode(", ", $users).'. '; //Дома: Юзер1,Юзер2,... .
$atHome = 1; //пользователи в доме
}
//echo($usr.' atHome='.$atHome.'<br>');
/////////////////////////////////////////////////////////////////////////////////////
$sr = ""; //спецрежим
if($atHome){////пользователи начало
//пользователи дома начало
if(gg('SecurityMode.active')==1) cm('SecurityMode.deactivate');
if(gg('PresenceMode.active')==0) cm('PresenceMode.activate');
if(gg('EcoMode.active')==1) cm('EcoMode.deactivate');
if($isMove){//и есть движение
if(gg('SleepMode.active')==1)cm('SleepMode.deactivate');
}else{//и нет движения
if(gg('QuietMode.active')==1){
if(gg('SleepMode.active')==0){
cm('SleepMode.activate');
$sr = "Режим спячки.";}
}
}
//пользователи дома конец
}else{
//пользователи не дома начало
if($isMove){//и есть движение
if(gg('SecurityMode.active')==1){
$usr = 'Дома: кто-то. ';
registerEvent('SecurityAlert',$ActivityAtHome);
}
}else{//и нет движения
if(gg('SecurityMode.active')==0) cm('SecurityMode.activate');
if(gg('PresenceMode.active')==1) cm('PresenceMode.deactivate');
//if(gg('EcoMode.active')==0) cm('EcoMode.activate'); //AutoEcoMode to do
}
//пользователи не дома конец
}////пользователи конец
/////////////////////////////////////////////////////////////////////////////////////
//Сформировать текст для статуса
setGlobal('somebodyHomeText',$usr.$sr.$ActivityAtHome, 0,'testRoomsActivity');
//saveToCache('MJD:ThisComputer.somebodyHomeText',$usr.$sr.$ActivityAtHome);
//postToWebSocketQueue('MJD:ThisComputer.somebodyHomeText',$usr.$sr.$ActivityAtHome);
|
Update_GPS_Info
|
https://mjdm.ru/forum/viewtopic.php?f=5&t=6309&start=160#p103379
include_once('./modules/google_location/google_location.class.php');
$gps = new google_location();
$gps -> updateLocation();
if (timeBetween('24:00','07:00')) {
$interval=60*60;
}
elseif (timeBetween('08:00','11:00')) {
$interval=2*60;
}
elseif (timeBetween('18:00','20:00')) {
$interval=2*60;
}
else {
$interval=600;
}
SetTimeOut('GpSUpdate',"rs('Update_GPS_Info');",$interval);
|
calDav_export_events
|
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
header("Content-type: text/text; charset=UTF-8"); //вывод в браузер
$events = SQLSelect("SELECT clnd_events.*,
clnd_categories.ICON, clnd_categories.title CAT_NAME
FROM clnd_events left join clnd_categories
on clnd_events.calendar_category_id=clnd_categories.id
WHERE clnd_categories.title in ('Люди','Праздники','Рабочие')
and `IS_DONE`!=1 and `DUE` < DATE_ADD( NOW( ) , INTERVAL 3 MONTH )");
$NewEventH ="BEGIN:VCALENDAR".PHP_EOL.
"VERSION:2.0".PHP_EOL.
"PRODID:-//mdm todoer".PHP_EOL.
"X-WR-CALNAME:MDM todoer".PHP_EOL.
"CALSCALE:GREGORIAN".PHP_EOL.
"BEGIN:VTIMEZONE".PHP_EOL.
"TZID:Europe/Moscow".PHP_EOL.
"TZURL:http://tzurl.org/zoneinfo/Europe/Moscow".PHP_EOL.
"X-LIC-LOCATION:Europe/Moscow".PHP_EOL.
"BEGIN:STANDARD".PHP_EOL.
"TZOFFSETFROM:+0300".PHP_EOL.
"TZOFFSETTO:+0300".PHP_EOL.
"TZNAME:MSK".PHP_EOL.
"DTSTART:19700101T000000".PHP_EOL.
"END:STANDARD".PHP_EOL.
"END:VTIMEZONE".PHP_EOL;
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // password
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars["events-710952"]);
if($events){
//для каждой задачи
foreach ($events as $ev )
{
$newToDo = "BEGIN:VEVENT".PHP_EOL;
$newToDo .= "DTSTAMP:".gmdate('Ymd/THis').'Z'.PHP_EOL;
if($ev['DUE']){
$dt = date_create($ev['DUE']);
if($ev['ALL_DAY']){
$newToDo .= "DTSTART;VALUE=DATE:".date_format($dt,'Ymd').PHP_EOL;
}else{
$newToDo .= "DTSTART;TZID=Europe/Moscow:".date_format($dt,'Ymd\THis').PHP_EOL;
}
}
if($ev['END_TIME']){
$dt = date_create($ev['END_TIME']);
if($ev['ALL_DAY']){
$dt->modify('+1 day');
$newToDo .= "DTEND;VALUE=DATE:".date_format($dt,'Ymd').PHP_EOL;
}else{
$newToDo .= "DTEND;TZID=Europe/Moscow:".date_format($dt,'Ymd\THis').PHP_EOL;
}
}
$newToDo .= "SUMMARY:".$ev['CAT_NAME']."/".$ev['TITLE'].PHP_EOL;
$newToDo .= "DESCRIPTION:".str_replace(array("\r\n", "\r", "\n"),'\\n', $ev['NOTES']).PHP_EOL;
//$newToDo .= "DESCRIPTION:".$ev['NOTES'].PHP_EOL;
$newToDo .= "UID:todoerEvent".$ev['CAT_NAME']."/".$ev['TITLE']."/".$ev['DUE'].'@mdm.clnd'.PHP_EOL;
$newToDo .= "END:VEVENT".PHP_EOL;
//echo($NewEventH.$newToDo."END:VCALENDAR".PHP_EOL);
try {
$client->create($NewEventH.$newToDo."END:VCALENDAR".PHP_EOL);
echo('export '."UID:todoerEvent".$ev['ID'].'@mdm.clnd '."SUMMARY:".$ev['CAT_NAME']."/".$ev['TITLE']."<br>");
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$ev['ID']);
} catch (Exception $e) {
echo $e->__toString();
}
}
}
echo("ok");
|
calDav_export_todos
|
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
//header("Content-type: text/text; charset=UTF-8"); //вывод в браузер
$todos = SQLSelect("SELECT clnd_events.*,
clnd_categories.ICON, clnd_categories.title CAT_NAME
FROM clnd_events left join clnd_categories
on clnd_events.calendar_category_id=clnd_categories.id
WHERE clnd_categories.title in ('Работа','Дела','ToDo')
AND ifnull(AT_CALENDAR,1)!=0 and IS_DONE=0 and EX_ID is null");
$NewToDoH ="BEGIN:VCALENDAR".PHP_EOL.
"VERSION:2.0".PHP_EOL.
"PRODID:-//mdm todoer".PHP_EOL.
"X-WR-CALNAME:MDM todoer".PHP_EOL.
"CALSCALE:GREGORIAN".PHP_EOL.
"BEGIN:VTIMEZONE".PHP_EOL.
"TZID:Europe/Moscow".PHP_EOL.
"TZURL:http://tzurl.org/zoneinfo/Europe/Moscow".PHP_EOL.
"X-LIC-LOCATION:Europe/Moscow".PHP_EOL.
"BEGIN:STANDARD".PHP_EOL.
"TZOFFSETFROM:+0300".PHP_EOL.
"TZOFFSETTO:+0300".PHP_EOL.
"TZNAME:MSK".PHP_EOL.
"DTSTART:19700101T000000".PHP_EOL.
"END:STANDARD".PHP_EOL.
"END:VTIMEZONE".PHP_EOL;
$cldName = "todos-5685811";//[displayname:CalDAVCalendar:private] => Задачи
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // password
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars[$cldName]);
if($todos){
//для каждой задачи
foreach ($todos as $ev )
{
$newToDo = "BEGIN:VTODO".PHP_EOL;
$newToDo .= "CREATED:".gmdate('Ymd\THis\Z').PHP_EOL;
if($ev['DUE'] && !$ev['IS_NODATE'] ){
$dt = date_create($ev['DUE']);
$newToDo .= "DUE;VALUE=DATE:".date_format($dt,'Ymd').PHP_EOL;
if(!$ev['ALL_DAY']){
$newToDo .= "BEGIN:VALARM".PHP_EOL;
$newToDo .= "ACTION:DISPLAY".PHP_EOL;
date_timezone_set($dt, timezone_open('UTC'));
$newToDo .= "TRIGGER;VALUE=DATE-TIME:".date_format($dt,'Ymd\THis\Z',).PHP_EOL;
$newToDo .= "END:VALARM".PHP_EOL;
}
}
if($ev['IS_DONE']){
$dt = date_create($ev['DONE_WHEN']);
$newToDo .= "COMPLETED;TZID=Europe/Moscow:".date_format($dt,'Ymd\THis').PHP_EOL;
}
$newToDo .= "SUMMARY:".$ev['CAT_NAME']."/".$ev['TITLE'].PHP_EOL;
if($ev['IS_NODATE']){
$dueId = "IS_NODATE";
}else{
$dueId = date_format(date_create($ev['DUE']),'YmdHis');
}
$newToDo .= "UID:todoerTodo".$ev['ID']."-".$dueId.'@mdm.clnd'.PHP_EOL;
$newToDo .= "END:VTODO".PHP_EOL;
try {
$client->create($NewToDoH.$newToDo."END:VCALENDAR".PHP_EOL);
echo('export '."UID:todoerTodo".$ev['ID']."-".$dueId.'@mdm.clnd '."SUMMARY:".$ev['CAT_NAME']."/".$ev['TITLE']."<br>");
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$ev['ID']);
} catch (Exception $e) {
echo $e->__toString();
}
}
}
echo("ok");
|
calDav_import_events
|
импорт событий из Яндекс-календаря Мои события events-710952
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // app password from yandex
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
echo("<pre>");
//print_r($arrayOfCalendars);
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars["events-710952"]);
$dt_scan = gmdate('Ymd',time() - 5 * 24 * 60 * 60).'T000000Z';
$my = $client->getEvents($dt_scan);
echo("<pre>");
foreach($my as $ev){
$all = $ev->getData();
$pos = stripos($all, "BEGIN:VEVENT");
$pos1 = stripos($all, "END:VEVENT");
if($pos && $pos1){
$event = explode("\n",substr($all,$pos + 13,$pos1 - $pos - 14));//between BEGIN:VEVENT & END:VEVENT
//print_r( $event);
$todoerId = 0;
$todoerCat = '';
$todoerTitle = '';
$description = ''; $categories = '';
$summary = ''; $start = 0; $end = 0; $lastMod = 0;
$todoer = false;
foreach($event as $line){
echo($line."<br>");
//парсим по-строчно
if(preg_match('/^DTSTART;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd',$m[1]);
$start = date_format($start0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DTSTART;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[2],new DateTimeZone($m[1]));
date_timezone_set($start0, timezone_open('Europe/Moscow'));
$start = date_format($start0, 'Y-m-d H:i:00');
}elseif(preg_match('/^DTEND;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$end0 = date_create_from_format('Ymd',$m[1]);
$end = date_format($end0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DTEND;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$end0 = date_create_from_format('Ymd\THis',$m[2],new DateTimeZone($m[1]));
date_timezone_set($end0, timezone_open('Europe/Moscow'));
$end = date_format($end0, 'Y-m-d H:i:00');
}elseif(str_starts_with($line,"SUMMARY:")){
$summary = str_replace("SUMMARY:",'',$line);
}elseif(str_starts_with($line,"UID:")){
$uid = str_replace("UID:",'',$line);
if(str_starts_with($uid,"todoerEvent")){
$todoer = true;
$todoerId = (int)str_replace(array("todoerEvent","@mdm.clnd"),'',$uid);
$td = explode("/",$summary);
if($td[0]) $todoerCat = $td[0];
if($td[1]) $todoerTitle = $td[1];
}else{
$todoer = false;
}
}elseif(str_starts_with($line,"DESCRIPTION:")){
$description = str_replace("DESCRIPTION:",'',$line);
$description = str_replace('\\n',PHP_EOL,$description);
$description = str_replace('\\,',',',$description);
$description = str_replace('\\;',';',$description);
}elseif(preg_match('/^LAST-MODIFIED:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){
$lastMod0 = date_create_from_format("Ymd\THis",$m[1],new DateTimeZone('UTC'));
$lastMod = date_format($lastMod0, 'Y-m-d H:i:s');
}elseif(str_starts_with($line,"CATEGORIES:")){
$categories = str_replace("CATEGORIES:",'',$line);
}
}
}
echo "start:$start end:$end summary:$summary <br>";
echo " uid:$uid todoerId:$todoerId todoerCat:$todoerCat todoerTitle:$todoerTitle<br>";
if($description>'')echo " description:".mb_substr($description,0,20)."<br>";
echo " categories:$categories<br>";
echo " lastMod gmt:$lastMod<br>";
echo('--------------------------------<br>');
if(!$todoer){ //search in db
$interval = date_diff($start0,$end0);
echo("diff ".$interval->d." d ".$interval->days." days ".$interval->h." h ".$interval->i." m <br>");
if(($interval->d > 0 && $interval->h == 0 && $interval->i == 0) ){ //|| ($interval->h == 23 && $interval->i == 59)){
$all_day = 1;
echo('all_day<br>');
$end2 = date_create_from_format('Y-m-d H:i:s',$end);
date_modify($end2, '-1 minute');
echo 'new end:'.date_format($end2, 'Y-m-d 23:59:00').'<br>';
$end = date_format($end2, 'Y-m-d 23:59:00');
}else{
$all_day =0;
}
echo('Добавим в todoer в категорию Yandex?<br>');
$rec = SQLSelectOne("SELECT c.ID FROM `clnd_events` c join clnd_categories cc on c.CALENDAR_CATEGORY_ID=cc.ID WHERE cc.TITLE='Yandex' AND c.TITLE='".DBSafe($summary)."' AND DUE='$start'");
if(!$rec['ID']) {
//add new
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
$tsk = array(
'TITLE' => $summary,
'DUE' => $start,
'END_TIME' => $end,
'NOTES' => $description,
'CATEGORY' => "Yandex",
'ALL_DAY' => $all_day,
'EX_ID' => $uid
// ... and so on
);
//echoes id of new task
$todoerid = $todo->create_new_task($tsk);
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$todoerid);
echo " Да, добавили!<br>";
}else{echo "Нет, уже есть!<br>";}
}
}
echo("ok");
|
calDav_import_events_google
|
импорт событий из Яндекс-календаря Мои события событий из Google events-19813283
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // app password from yandex
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
//echo("<pre>");
//print_r($arrayOfCalendars);
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars["events-19813283"]);
$dt_scan = gmdate('Ymd',time() - 5 * 24 * 60 * 60).'T000000Z';
$my = $client->getEvents($dt_scan);
echo("<pre>");
foreach($my as $ev){
$all = $ev->getData();
$pos = stripos($all, "BEGIN:VEVENT");
$pos1 = stripos($all, "END:VEVENT");
if($pos && $pos1){
$event = explode("\n",substr($all,$pos + 13,$pos1 - $pos - 14));//between BEGIN:VEVENT & END:VEVENT
//print_r( $event);
$todoerId = 0;
$todoerCat = '';
$todoerTitle = '';
$description = ''; $categories = '';
$summary = ''; $start = 0; $end = 0; $lastMod = 0;
$todoer = false;
foreach($event as $line){
echo($line."<br>");
//парсим по-строчно
if(preg_match('/^DTSTART;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd',$m[1]);
$start = date_format($start0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DTSTART:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\dZ)/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis\Z',$m[1],new DateTimeZone('UTC'));
date_timezone_set($start0, timezone_open('Europe/Moscow'));
$start = date_format($start0, 'Y-m-d H:i:00');
}elseif(preg_match('/^DTSTART;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[2]);
$start = date_format($start0, 'Y-m-d H:i:00');
}elseif(preg_match('/^DTEND;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$end0 = date_create_from_format('Ymd',$m[1]);
$end = date_format($end0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DTEND;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$end0 = date_create_from_format('Ymd\THis',$m[2]);
$end = date_format($end0, 'Y-m-d H:i:00');
}elseif(preg_match('/^DTEND:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\dZ)/su', $line, $m)){
$end0 = date_create_from_format('Ymd\THis\Z',$m[1],new DateTimeZone('UTC'));
date_timezone_set($end0, timezone_open('Europe/Moscow'));
$end = date_format($end0, 'Y-m-d H:i:00');
}elseif(str_starts_with($line,"SUMMARY:")){
$summary = str_replace("SUMMARY:",'',$line);
}elseif(str_starts_with($line,"UID:")){
$uid = str_replace("UID:",'',$line);
if(str_starts_with($uid,"todoerEvent")){
$todoer = true;
$todoerId = (int)str_replace(array("todoerEvent","@mdm.clnd"),'',$uid);
$td = explode("/",$summary);
if($td[0]) $todoerCat = $td[0];
if($td[1]) $todoerTitle = $td[1];
}else{
$todoer = false;
}
}elseif(str_starts_with($line,"DESCRIPTION:")){
$description = str_replace("DESCRIPTION:",'',$line);
$description = str_replace('\\n',PHP_EOL,$description);
$description = str_replace('\\,',',',$description);
$description = str_replace('\\;',';',$description);
}elseif(preg_match('/^LAST-MODIFIED:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){
$lastMod0 = date_create_from_format("Ymd\THis",$m[1],new DateTimeZone('UTC'));
$lastMod = date_format($lastMod0, 'Y-m-d H:i:s');
}elseif(str_starts_with($line,"CATEGORIES:")){
$categories = str_replace("CATEGORIES:",'',$line);
}
}
}
echo "start:$start end:$end summary:$summary <br>";
echo " uid:$uid todoerId:$todoerId todoerCat:$todoerCat todoerTitle:$todoerTitle<br>";
if($description>'')echo " description:".mb_substr($description,0,20)."<br>";
echo " categories:$categories<br>";
echo " lastMod gmt:$lastMod<br>";
echo('--------------------------------<br>');
if(!$todoer){ //search in db
$interval = date_diff($start0,$end0);
echo("diff ".$interval->d." d ".$interval->days." days ".$interval->h." h ".$interval->i." m <br>");
if(($interval->d > 0 && $interval->h == 0 && $interval->i == 0) ){ //|| ($interval->h == 23 && $interval->i == 59)){
$all_day = 1;
echo('all_day<br>');
$end2 = date_create_from_format('Y-m-d H:i:s',$end);
date_modify($end2, '-1 minute');
echo 'new end:'.date_format($end2, 'Y-m-d H:i:s').'<br>';
$end = date_format($end2, 'Y-m-d H:i:s');
}else{
$all_day =0;
}
echo('Добавим в todoer в категорию Google?<br>');
$rec = SQLSelectOne("SELECT c.ID FROM `clnd_events` c join clnd_categories cc on c.CALENDAR_CATEGORY_ID=cc.ID WHERE cc.TITLE='Google' AND c.TITLE='".DBSafe($summary)."' AND DUE='$start'");
if(!$rec['ID']) {
//add new
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
$tsk = array(
'TITLE' => $summary,
'DUE' => $start,
'END_TIME' => $end,
'NOTES' => $description,
'CATEGORY' => "Google",
'ALL_DAY' => $all_day,
'EX_ID' => $uid
// ... and so on
);
//echoes id of new task
$todoerid = $todo->create_new_task($tsk);
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$todoerid);
echo " Да, добавили!<br>";
}else{echo "Нет, уже есть!<br>";}
}
}
echo("ok");
|
calDav_import_todos_Tasks
|
импорт задач из Яндекс-календаря Мои события/Задачи todos-5685811
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // app password from yandex
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
echo("<pre>");
print_r($arrayOfCalendars);
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars["todos-5685811"]);//todos-5685811 Задачи, todos-5688422 Покупки
$dt_scan = gmdate('Ymd',time() - 5 * 24 * 60 * 60).'T000000Z';
$my = $client->GetTodos();//все задачи
//echo("<pre>");
// print_r($my);
foreach($my as $ev){
$all = $ev->getData();
$href = $ev->getHref();
$pos = stripos($all, "BEGIN:VTODO");
$pos1 = stripos($all, "END:VTODO");
if($pos && $pos1){
$event = explode("\n",substr($all,$pos + 11,$pos1 - $pos - 12));//between BEGIN:VTODO & END:VTODO
//echo("<pre>");
//print_r( $event);
$todoerId = 0;
$todoerCat = '';
$todoerTitle = '';
$description = '';
$summary = ''; $start = 0; $completed = 0;
$todoer = false;
foreach($event as $line){
echo($line."<br>");
//парсим по-строчно
if(preg_match('/^DUE;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd',$m[1]);
$start = date_format($start0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DUE;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[2]);
$start = date_format($start0, 'Y-m-d H:i:00');
}elseif(preg_match('/^TRIGGER;VALUE=DATE-TIME:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[1],new DateTimeZone('UTC'));
date_timezone_set($start0, timezone_open('Europe/Moscow'));
$start = date_format($start0, 'Y-m-d H:i:s');
}elseif(preg_match('/^COMPLETED:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){ //?
$completed0 = date_create_from_format("Ymd\THis",$m[1],new DateTimeZone('UTC'));
}elseif(str_starts_with($line,"SUMMARY:")){
$summary = str_replace("SUMMARY:",'',$line);
}elseif(str_starts_with($line,"UID:")){
$uid = str_replace("UID:",'',$line);
if(str_starts_with($uid,"todoerTodo")){
$todoer = true;
/*
$todoerIds = str_replace(array("todoerTodo","@mdm.clnd"),'',$uid);
$td = explode("/",$todoerIds);
if($td[0]) {$todoerId = $td[0];}else{$todoerId = false;}
if($td[1]) {$todoerDue = $td[1];}else{$todoerDue = false;}
$td = explode("/",$summary);
if($td[0]) $todoerCat = $td[0];
if($td[1]) $todoerTitle = $td[1];
*/
}else{
$todoer = false;
}
}
}
if($completed0) {
date_timezone_set($completed0, timezone_open('Europe/Moscow'));
$completed = date_format($completed0, 'Y-m-d H:i:s');
}
echo "due:$start summary:$summary comleted:$completed<br>";
echo "uid:$uid todoerId:$todoerId todoerCat:$todoerCat todoerTitle:$todoerTitle<br>";
if($start == 0) echo "без даты<br>";
echo('--------------------------------<br>');
if(!$todoer){ //search in db
echo('Добавим в todoer?<br>');
$rec = SQLSelectOne("SELECT c.ID FROM `clnd_events` c WHERE c.EX_ID='$uid'");
if(!$rec['ID']) {
if($start){
$end = date_format($start0, 'Y-m-d 23:59:00');
$all_day = (date_format($start0, 'H:i') == "00:00")?1:0;
}
//add new
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
$tsk = array(
'TITLE' => $summary,
'DUE' => $start?$start:false,
'END_TIME' => $end?$end:false,
'NOTES' => "Добавлено из <a href='".$href."'>Яндекс-календаря</a>",
'CATEGORY' => "ToDo",
'ALL_DAY' => $all_day,
'IS_NODATE' => $start?0:1,
'EX_ID' => $uid
// ... and so on
);
//echoes id of new task
$taskid = $todo->create_new_task($tsk);
if($completed){
echo "mark task done ".$todo->task_done($taskid, 1);
}
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$taskid);
echo " Да, добавили!<br>";
}else{echo "Нет, уже есть! можно сверить реквизиты<br>";}
}}}
echo("ok");
|
calendShow
|
class Calendar
{
/**
* Вывод календаря на один месяц.
*/
public static function getMonth($month, $year, $events = array())
{
$months = array(
1 => 'Январь',
2 => 'Февраль',
3 => 'Март',
4 => 'Апрель',
5 => 'Май',
6 => 'Июнь',
7 => 'Июль',
8 => 'Август',
9 => 'Сентябрь',
10 => 'Октябрь',
11 => 'Ноябрь',
12 => 'Декабрь'
);
$month = intval($month);
$out = '
<link rel="stylesheet" type="text/css" href="\css\cld.css">
<div class="calendar-item">
<div class="calendar-head">' . $months[$month] . ' ' . $year . '</div>
<table>
<tr>
<th>Пн</th>
<th>Вт</th>
<th>Ср</th>
<th>Чт</th>
<th>Пт</th>
<th>Сб</th>
<th>Вс</th>
</tr>';
$day_week = date('N', mktime(0, 0, 0, $month, 1, $year));
$day_week--;
$out.= '<tr>';
for ($x = 0; $x < $day_week; $x++) {
$out.= '<td></td>';
}
$days_counter = 0;
$days_month = date('t', mktime(0, 0, 0, $month, 1, $year));
for ($day = 1; $day <= $days_month; $day++) {
if (date('j.n.Y') == $day . '.' . $month . '.' . $year) {
$class = 'today';
} elseif (time() > strtotime($day . '.' . $month . '.' . $year)) {
$class = 'last';
} else {
$class = '';
}
$event_show = false;
$event_text = array();
if (!empty($events)) {
foreach ($events as $event) {
foreach ($event as $date => $text) {
$date = explode('.', $date);
if (count($date) == 3) {
$y = explode(' ', $date[2]);
if (count($y) == 2) {
$date[2] = $y[0];
}
if ($day == intval($date[0]) && $month == intval($date[1]) && $year == $date[2]) {
$event_show = true;
$event_text[] = $text;
}
} elseif (count($date) == 2) {
if ($day == intval($date[0]) && $month == intval($date[1])) {
$event_show = true;
$event_text[] = $text;
}
} elseif ($day == intval($date[0])) {
$event_show = true;
$event_text[] = $text;
}
}
}
}
if ($event_show) {
$out.= '<td class="calendar-day ' . $class . ' event">' . $day;
if (!empty($event_text)) {
$out.= '<div class="calendar-popup">' . implode('<br>', $event_text) . '</div>';
}
$out.= '</td>';
} else {
$out.= '<td class="calendar-day ' . $class . '">' . $day . '</td>';
}
if ($day_week == 6) {
$out.= '</tr>';
if (($days_counter + 1) != $days_month) {
$out.= '<tr>';
}
$day_week = -1;
}
$day_week++;
$days_counter++;
}
$out .= '</tr></table></div>';
return $out;
}
/**
* Вывод календаря на несколько месяцев.
*/
public static function getInterval($start, $end, $events = array())
{
$curent = explode('.', $start);
$curent[0] = intval($curent[0]);
$end = explode('.', $end);
$end[0] = intval($end[0]);
$begin = true;
$out = '<div class="calendar-wrp">';
do {
$out .= self::getMonth($curent[0], $curent[1], $events);
if ($curent[0] == $end[0] && $curent[1] == $end[1]) {
$begin = false;
}
$curent[0]++;
if ($curent[0] == 13) {
$curent[0] = 1;
$curent[1]++;
}
} while ($begin == true);
$out .= '</div>';
return $out;
}
}
$sql="SELECT a.`TITLE`, DATE_FORMAT(`DUE`, '%d.%m.%Y') due FROM `clnd_events` a
join clnd_categories cat on `CALENDAR_CATEGORY_ID`=cat.ID
where DATE_FORMAT(`DUE`, '%Y')='2022'
and cat.AT_CALENDAR=1";
$recs = SQLSelect($sql);
//echo Calendar::getMonth(date('n'), date('Y'));
$events = array();
//echo "<pre>";
//print_r($recs);
$total = count($recs);
/////////////////////////////////////////////////////////////////////////////////////
for ($i = 0; $i < $total; $i++) {
$events[$i] = array($recs[$i]['due']=>$recs[$i]['TITLE']) ;
}
/*
array('16' => 'Заплатить ипотеку'),
array('23.02' => 'День защитника Отечества'),
array('08.03' => 'Международный женский день'),
array('08.03' => 'test'),
array('31.12' => 'Новый год')
);
*/
echo Calendar::getInterval(date('01.Y'), date('12.Y'), $events);
|
synchro_todos
|
// читаем все задачи тодуера и яндекса, а потом сравниваем
$NewToDoH ="BEGIN:VCALENDAR".PHP_EOL.
"VERSION:2.0".PHP_EOL.
"PRODID:-//mdm todoer".PHP_EOL.
"X-WR-CALNAME:MDM todoer".PHP_EOL.
"CALSCALE:GREGORIAN".PHP_EOL.
"BEGIN:VTIMEZONE".PHP_EOL.
"TZID:Europe/Moscow".PHP_EOL.
"TZURL:http://tzurl.org/zoneinfo/Europe/Moscow".PHP_EOL.
"X-LIC-LOCATION:Europe/Moscow".PHP_EOL.
"BEGIN:STANDARD".PHP_EOL.
"TZOFFSETFROM:+0300".PHP_EOL.
"TZOFFSETTO:+0300".PHP_EOL.
"TZNAME:MSK".PHP_EOL.
"DTSTART:19700101T000000".PHP_EOL.
"END:STANDARD".PHP_EOL.
"END:VTIMEZONE".PHP_EOL;
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
gg('Sergey.yacalendar') // app password from yandex
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
} catch (Exception $e) {
echo $e->__toString();
}
if($arrayOfCalendars["todos-5685811"]){
$client->setCalendar($arrayOfCalendars["todos-5685811"]);//todos-5685811 Задачи, todos-5688422 Покупки
$dt_scan = gmdate('Ymd',time() - 5 * 24 * 60 * 60).'T000000Z';
$my = $client->GetTodos();//все задачи
echo("<pre>");
//print_r($my);
foreach($my as $ev){
echo "<br>";
$all = $ev->getData();
$href = $ev->getHref();
$etag = $ev->getEtag();
//$re = '/BEGIN:VEVENT\r\n(.*?)\r\nEND:VEVENT/ums';
//preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$pos = mb_stripos($all, "BEGIN:VTODO");
$pos1 = mb_stripos($all, "END:VTODO");
if($pos && $pos1){
$event = explode("\n",mb_substr($all,$pos + 12,$pos1 - $pos - 13));//between BEGIN:VTODO & END:VTODO
//print_r( $event);
$todoerId = 0;
$todoerCat = '';
$todoerTitle = '';
$description = '';
$summary = ''; $start = 0; $completed = 0; $completed0 = 0;
$todoer = false;$todoerId = false;$todoerDue = false;
foreach($event as $line){
//echo($line."<br>");
//парсим по-строчно
if(preg_match('/^DUE;VALUE=DATE:(\d\d\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd',$m[1]);
$start = date_format($start0, 'Y-m-d 00:00:00');
}elseif(preg_match('/^DUE;TZID=(.*):(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[2],new DateTimeZone($m[1]));
date_timezone_set($start0, timezone_open('Europe/Moscow'));
$start = date_format($start0, 'Y-m-d H:i:00');
}elseif(preg_match('/^TRIGGER;VALUE=DATE-TIME:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){
$start0 = date_create_from_format('Ymd\THis',$m[1],new DateTimeZone('UTC'));
date_timezone_set($start0, timezone_open('Europe/Moscow'));
$start = date_format($start0, 'Y-m-d H:i:s');
}elseif(preg_match('/^COMPLETED:(\d\d\d\d\d\d\d\dT\d\d\d\d\d\d)Z/su', $line, $m)){ //?
$completed0 = date_create_from_format("Ymd\THis",$m[1],new DateTimeZone('UTC'));
}elseif(str_starts_with($line,"SUMMARY:")){
$summary = str_replace("SUMMARY:",'',$line);
}elseif(str_starts_with($line,"UID:")){
$uid = str_replace("UID:",'',$line);
if(str_starts_with($uid,"todoerTodo")){
$todoer = true;
$todoerIds = str_replace(array("todoerTodo","@mdm.clnd"),'',$uid);
$td = explode("-",$todoerIds);
if($td[0]) {$todoerId = $td[0];}else{$todoerId = false;}
if($td[1]) {$todoerDue = $td[1];}else{$todoerDue = false;}
$td = explode("/",$summary);
if($td[0]) {$todoerCat = $td[0];}else{$todoerCat = '';}
if($td[1]) {$todoerTitle = $td[1];}else{$todoerTitle = '';}
}else{
$todoer = false;
}
}
}
if($completed0) {
date_timezone_set($completed0, timezone_open('Europe/Moscow'));
$completed = date_format($completed0, 'Y-m-d H:i:s');
}
echo "due:$start summary:$summary comleted:$completed uid:$uid -> todoerId:$todoerId todoerCat:$todoerCat todoerTitle: $todoerTitle<br>";
if($start == 0) echo "без даты<br>";
$rec = SQLSelectOne("SELECT * FROM `clnd_events` c WHERE c.EX_ID='$uid' or ID=$todoerId");
if($rec['ID']){
echo('todoer:<br>');
echo "due:".$rec['DUE']." summary:".$rec['TITLE']." comleted:".$rec['IS_DONE']."<br>";
echo "synchro:".$rec['LAST_SYNCHRO']." EX_ID:".$rec['EX_ID']." comleted time:".$rec['DONE_WHEN']." due $todoerDue"."<br>";
if(( $rec['IS_DONE'] == 1 || ($rec['IS_REPEATING'] && $rec['DUE'] > $start && $rec['DONE_WHEN'])) && $completed == 0){
//todoer - done, ya - no -> ya done
$compl = date_create($rec['DONE_WHEN']);
date_timezone_set($compl, timezone_open('UTC'));
$vtodo = $NewToDoH."BEGIN:VTODO".PHP_EOL.implode("\n",$event).PHP_EOL."COMPLETED:".date_format($compl, 'Ymd\THis\Z').PHP_EOL."END:VTODO".PHP_EOL."END:VCALENDAR".PHP_EOL;
//echo $vtodo;
echo "Отметим задачу в Яндексе выполненой<br>";
try{
$client->change($href,$vtodo, $etag);
} catch (Exception $e) {
echo $e->__toString();
}
}
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
if(($rec['IS_DONE'] == 0 || ($rec['IS_REPEATING'] && $rec['DUE'] = $start )) && $completed ){
//todoer - no, ya - done -> todoer done
if(($rec['DUE'] == $start) || ($rec['IS_NODATE'] && $todoerDue == "IS_NODATE"))
echo "Отметим задачу в todoer выполненой<br>";
//$todo->task_done($rec['ID'], 1);
}
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$rec['ID']);
}else{
echo('Добавим в todoer?<br>');
if($start) $end = date_format($start0, 'Y-m-d 23:59:00');
$all_day = (date_format($start0, 'H:i') == "00:00")?1:0;
$tsk = array(
'TITLE' => $summary,
'DUE' => $start?$start:false,
'END_TIME' => $end?$end:false,
'NOTES' => "Добавлено из <a href='".$href."'>Яндекс-календаря</a>",
'CATEGORY' => "ToDo",
'ALL_DAY' => $all_day,
'IS_NODATE' => $start?0:1,
'EX_ID' => $uid
// ... and so on
);
//print_r($tsk);
$taskid = $todo->create_new_task($tsk);
if($completed) $todo->task_done($taskid, 1);
SQLExec("UPDATE `clnd_events` SET LAST_SYNCHRO='".date('Y-m-d H:i:s')."' WHERE `ID`=".$taskid);
echo " Да, добавили!<br>";
}}}
echo("ok");
}else{
debmes("synchro_todos - не удалось синхронизировать задачи!");
}
|
addNewItem
|
добавь в список покупок
$ss = gg('AliceAsk.Responce');
$ss = mb_substr($ss, 0, 30);
//remove doubles
$sql = "DELETE FROM clnd_events WHERE CALENDAR_CATEGORY_ID IN (SELECT b.ID FROM clnd_categories b WHERE b.TITLE='Покупки') AND TITLE LIKE '$ss'";
sqlexec($sql);
say("Добавляю в список покупок ".$ss,0);
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
$tsk = array(
'TITLE' =>$ss,
//'NOTES' => "This task made from code...",//your notes
'IS_NODATE' => 1,
'CATEGORY' => "Покупки",
// ... and so on
);
//echoes id of new task
$todo->create_new_task($tsk);
|
AnswerCancel
|
Скрипт для ответа Отмена
//say('Отмена? Принято',1);
DebMes("script AnswerCancel");
|
AnswerNo
|
Скрипт для ответа Нет
if(gg('ThisComputer.query')<>''){
say('Нет? Неудачника ответ!',2);
setGlobal('ThisComputer.responce','Нет');
rs(gg('ThisComputer.ScriptNo'));
sg('ThisComputer.query','');
}else{
say('нет',0,1);
}
|
AnswerYes
|
Скрипт для ответа Да
//test
say('Да? Отлично!',2);
|
CContext
|
Clear Context
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
|
context11
|
Проба активации контекста
//что с vlc
cm('mainVLC.getStatus');
if(gg('mainVLC.status')=='playing'&&gg('mainVLC.volume')<120){
return; //уже что-то играет
}else{
//если тихо, то
//пульт - в режим диалог
sg("NooPult1.Status",'диалог');
if(gg('VolumeLevel')=='0') {
callMethod("ThisComputer.ChangeVolumeLevel",array("VALUE"=>100));
}
setGlobal('ThisComputer.query','Включим музыку?');
setGlobal('ThisComputer.scriptYes','RunInstrumental');
setGlobal('ThisComputer.scriptNo','playStop');
setGlobal('ThisComputer.scriptCancel','Cancel');
context_activate(49);
}
|
context_test
|
$url='http://localhost/command.php?qry='.urlencode("расскажи о системе");
getURL($url,0);
|
dash_my_block1
|
$array = array(
'status' => 1, //Выводить блок?
'name' => 'Последнее из чата', //Шапка блока
'reload' => true, //Автообновление блока
'reload_time' => 10, //Время автообновления
'data' => array(
'data' => gg('List.text').'<br>'.gg('msgAgenda.text')
),
);
echo json_encode($array);
|
glos0
|
//part1
if(!isset($params['query'])) return;
$query = $params['query'];
sg('AliceAsk.query','Я не знаю, что такое '.$query.'. Добавить в справочник?');
sg('AliceAsk.yes','rs("glos1",array("query"=>"'.$query.'"));');
sg('AliceAsk.no','say("Хорошо. Забудем",2);');
sg('AliceAsk.cancel','');
cm('AliceAsk.questActivate');
|
glos1
|
//part2
if(!isset($params['query'])) return;
$query = $params['query'];
sg('AliceAsk.query','Добавьте определение для термина "'.$query.'"');
sg('AliceAsk.yes','');
sg('AliceAsk.no','');
sg('AliceAsk.cancel','rs("glos2",array("query"=>"'.$query.'"));');
cm('AliceAsk.questActivate');
|
glos2
|
//part3
if(!isset($params['query'])) return;
$query = $params['query'];
$answ = gg('AliceAsk.responce');
if($answ!=''){
SQLExec("insert into myglossary (TITLE,DESCRIPTION) values ('".$query."','".$answ."')");
}
|
help
|
для шаблона помощь
say('Здесь доступны команды ',2);
$actions=$params['actions'];
$total=count($actions);
for($i=0;$i<$total;$i++){
say($actions[$i] ,2);
}
|
hourColor
|
Установим цвет ленты в зависимости от часа
//меняем цвет каждый час
if(getGlobal('NooRGB0.onClock') && getGlobal('NooRGB0.status')){
$h=date('g'); //1 to 12
$c=array(
1 => "#800080",
2 => "#800000",
3 => "#808000",
4 => "#008000",
5 => "#008080",
6 => "#000080",
7 => "#FF00FF",
8 => "#FF0000",
9 => "#FFFF00",
10=> "#00FF00",
11=> "#00FFFF",
12=> "#0000FF",
);
callMethod('NooRGB0.setColor',array('color'=>$c[$h]));
}
|
miboard api dialog
|
https://t.me/mboard_news/138?comment=2623
$command='viewquery';
$uid = 'mb'.time();
$data = array(
'id'=>$uid,
'title'=>"API: Тест диалога",
'text'=> "<p style='text-align:center'><img src='\cms\images\cam2.jpg' width='400' height='300' / ></p><div style='color:black'>Диалог позволяет вывести некоторую информацию с запросом на действие пользователя<br>Запрос может содержать <b>несколько</b> вариантов ответа<br>На каждый вариант можно задать свои реакции:<br><ul><li>установка значения <b>setGlobal</b></li><li>вызов метода</li><li>запуск скрипта</li></ul><br>P.S. есть поддержка <u>тегов</u> в тексте диалога",
'buttons'=>array(
"Да_setGlobal"=>array("property"=>"Relay01.asas",'value'=>"1"),
"Незнаю_runMethod"=>array("method"=>"noorelay2.switch"),
"Нет_runScript"=>array("script"=>"mboard_event_test"),
"Отмена"=>array("close"=>"mboard_event_test"),
),
'color' => "#FF7F50",
'icon' => "fas fa-bolt",
'coloricon' => 'red'
);
callAPI('/api/module/mboard_pro/' . $command, 'GET', $data);
setTimeOut("tst1","callAPI('/api/module/mboard_pro/closequery', 'GET', array('id'=>'".$uid."'));",10);
// api/module/mboard_pro/closequery?id=unic_id10011
|
miboardMessage
|
rs('miboardMessage',array('title'=>'Title','text'=>'message','buttons'=>$arr,'close_time'=>10));
$title = "Сообщение";
if(isset($params['title'])) $title = $params['title'];
//"<p style='text-align:center'><img src='\cms\images\cam2.jpg' width='400' height='300' / ></p><div style='color:black'>Диалог позволяет вывести некоторую информацию с запросом на действие пользователя<br>Запрос может содержать <b>несколько</b> вариантов ответа<br>На каждый вариант можно задать свои реакции:<br><ul><li>установка значения <b>setGlobal</b></li><li>вызов метода</li><li>запуск скрипта</li></ul><br>P.S. есть поддержка <u>тегов</u> в тексте диалога"
$text = "<div style='color:black'>Тестовое сообщение";
if(isset($params['text'])) $text = $params['text'];
$buttons = array(
//"Да"=>array("property"=>"Relay01.asas",'value'=>"1"),
//"Не знаю_runMethod"=>array("method"=>"noorelay2.switch"),
//"Нет_runScript"=>array("script"=>"mboard_event_test"),
"Закрыть"=>array("close"=>"mboard_event_test"),
);
if(isset($params['buttons'])) $buttons = $params['buttons'];
$close_time = 0;
if(isset($params['close_time'])) $close_time = $params['close_time'];
$command='viewquery';
$uid = 'mb'.time();
$data = array(
'id'=>$uid,
'title'=>$title,
'text'=> $text,
'buttons'=>$buttons,
'color' => "#FF7F50",
'icon' => "fas fa-bolt",
'coloricon' => 'red'
);
callAPI('/api/module/mboard_pro/' . $command, 'GET', $data);
if($close_time)
setTimeOut("tst1","callAPI('/api/module/mboard_pro/closequery', 'GET', array('id'=>'".$uid."'));",$close_time);
|
OpenDoorPlease
|
https://t.me/mboard_news/138?comment=2623
$command='viewquery';
$uid = 'mb'.time();
//$photo = getGlobal("cam2.snapshot");
//$photo = str_replace("C:\_majordomo\htdocs",'',$photo);
$photo = "/cms/images/cam2.jpg";
$photo = $photo."?".time();
//echo($photo);
$data = array(
'id'=>$uid,
'title'=>"Пустите животное!",
//'text'=> "<p style='text-align:center'><img src='\cms\images\cam2.jpg' width='400' height='300' / ></p>",
'text'=> "<p style='text-align:center'><img src='".$photo."' width='400' height='300' / ></p>",
'buttons'=>array(
//"Да_setGlobal"=>array("property"=>"Relay01.asas",'value'=>"1"),
//"Незнаю_runMethod"=>array("method"=>"noorelay2.switch"),
//"Нет_runScript"=>array("script"=>"mboard_event_test"),
"Отмена"=>array("close"=>$uid),
),
'color' => "grey",
'icon' => "fas fa-bolt",
'coloricon' => 'red'
);
callAPI('/api/module/mboard_pro/' . $command, 'GET', $data);
setTimeOut("tst1","callAPI('/api/module/mboard_pro/closequery', 'GET', array('id'=>'".$uid."'));",30);
// api/module/mboard_pro/closequery?id=unic_id10011
|
predict
|
//попробуем найти погоду на рассвете для определения закрытия шторы заранее
//найдём следующий рассвет
if(gg("blind1.level")==0) return;
$sunrise = getGlobal("weather_my.SunRise");
$SDateTime = timeConvert($sunrise); //today
if(timeAfter($sunrise)) $SDateTime = timeConvert($sunrise)+24*60*60;//tomorrow
if((int)date("H",$SDateTime)<6){
//take 3 and 6
$query = " `DATE_FORECAST` between '".date("Y-m-d",$SDateTime)." 03:00:00' and '".date("Y-m-d",$SDateTime)." 06:00:00'";
}elseif((int)date("H",$SDateTime)<9){
//take 6 and 9
$query = " `DATE_FORECAST` between '".date("Y-m-d",$SDateTime)." 06:00:00' and '".date("Y-m-d",$SDateTime)." 09:00:00'";
}elseif((int)date("H",$SDateTime)<12){
//take 9 and 12
$query = " `DATE_FORECAST` between '".date("Y-m-d",$SDateTime)." 09:00:00' and '".date("Y-m-d",$SDateTime)." 12:00:00'";
}
$sql = "select * from meteoinfo where $query and `TYPE`='phenomenon_name' order by `DATE_FORECAST`";
$recs = SQLSelect($sql);
if($recs){
$fr = $recs[0]['VALUE'];
$to = $recs[1]['VALUE'];
if($fr==$to){
$pred = "На рассвете будет ".$fr;
}else{
$pred = "На рассвете будет ".$fr.", а потом ".$to;
}
//$pos = strpos("Малооблачно",$fr.$to);
//echo($pos);
$pred .= '.';
$pred = str_replace("..",".",$pred);
if(!gg("AliceAsk.active")){// check! todo
sg('AliceAsk.Query',$pred.' Вопрос - Будем заранее опускать штору?');
sg('AliceAsk.yes','say("Принят ответ ДА",2);sg("blind1.levelSaved",0);');
sg('AliceAsk.no','say("Принят ответ НЕТ",2);');
sg('AliceAsk.cancel','say("Ответ непонятен, отмена",2);');
cm('AliceAsk.questActivate');
}else{
say('Не удалось спросить про штору',1);
}
}
|
qNewItem
|
sg('AliceAsk.query','Что покупаем?');
sg('AliceAsk.yes','say("Хорошо. Забудем",2);');
sg('AliceAsk.no','say("Хорошо. Забудем",2);');
sg('AliceAsk.cancel','rs("addNewItem");');
cm('AliceAsk.questActivate');
|
query_test
|
Проба активации контекста
//test
sg('AliceAsk.Query','Как вы ответите на вопрос?');
sg('AliceAsk.yes','rs("AnswerYes");');
sg('AliceAsk.no','say("нет так нет",1);');
//sg('AliceAsk.cancel','rs("AnswerCancel");');
//sg('AliceAsk.cancel','');
sg('AliceAsk.cancel','say("отмена",1);');
cm('AliceAsk.questActivate');
|
test_sc0
|
/*
запомним вопрос $query
спросим "Не знаю. Добавить в справочник?"
получим ответ
если Да
спросим Добавьте определение для термина "$query"
если (.+)
получим ответ другое
запишем в словарь $query $другое
*/
//part1
if(!isset($params['query'])) return;
$query = $params['query'];
sg('AliceAsk.query','Я не знаю, что такое '.$query.'. Добавить в справочник?');
sg('AliceAsk.yes','rs("part2",array("query"=>"'.$query.'"))');
sg('AliceAsk.no','');
sg('AliceAsk.cancel','');
cm('AliceAsk.questActivate');
return;
//part2
if(!isset($params['query'])) return;
$query = $params['query'];
sg('AliceAsk.query','Добавьте определение для термина "'.$query.'"');
sg('AliceAsk.yes','');
sg('AliceAsk.no','');
sg('AliceAsk.cancel','rs("part3",array("query"=>"'.$query.'"))');
cm('AliceAsk.questActivate');
//part3
if(!isset($params['query'])) return;
$query = $params['query'];
$answ = gg('AliceAsk.responce');
if($answ!=''){
SQLExec("insert into myglossary (TITLE,DESCRIPTION) values ('".$query."','".$answ."')");
}
|
WashControl
|
Контроль стирки по мощности
if($params['cmd'] == 'start'){
//sayto('стирка начата!',3,'mini');
//say_mini('стирка начата!');
//sayto('стирка начата!',3,'Irbis');
say("Стирка начата!",2);
//Запустим контроль стирки через 5 минут
setTimeOut("WMControlCheck","rs('WashControl',array('cmd'=>'check'));",5*60);
}
$pw = getGlobal("ya2_power.value");
if($pw >= 2){
// работаем
setTimeOut("WMControl","rs('WashControl',array('cmd'=>'work'));",3*60);
clearTimeOut("WMControlStop");
clearTimeOut("WMoff");
if($params['cmd'] == 'check' && $pw < 3 && timeBetween("23:00", "03:00")){
say("Проверьте стиралку!",4);
}
}else{ //pw<2
if($params['cmd'] == 'stop'){// мы тут не первый раз, стирка окончена
setTimeOut("WMoff","setGlobal('Yandex2.regime',0,0,'script WashControl');",3*60);
say("Стирка окончена!",2);
//say_mini('стирка окончена!');
clearCacheData("VAR:WashingStart");
//or SQLExec("delete from cached_values where KEYWORD = 'VAR:WashingStart'");
return;
}
// запустим таймер окончания стирки
setTimeOut("WMControlStop","rs('WashControl',array('cmd'=>'stop'));",4*60);
}
|
выключи свет в спальне
|
callMethod('grpLightBedroom.callGroupMethod',array('mg'=>'turnOff'));
|
расчет платежа за свет
|
runScript('расчет платежа за свет'); //за предыдущий месяц
runScript('расчет платежа за свет',array('period'=>'2022-01-01'));
function pow_payment($tariff, $date)
{
$mn = (int)date("n",$date);
$ye = (int)date("Y",$date);
$out = array();
$value_id = (int)getHistoryValueId('Mercury200.'.$tariff); //11631
$firstday = date("Y-m-d H:i:s", mktime(23, 59, 59, $mn, 0, $ye));
$lastday = date("Y-m-t H:i:s", mktime(23, 59, 59, $mn, 1, $ye));
//$val_in = SQLSelectOne("SELECT VALUE FROM `phistory` WHERE `VALUE_ID`=$value_id AND `ADDED`>='$firstday' order by ADDED");
$val_in = SQLSelectOne("SELECT VALUE FROM archive.history WHERE `PROPERTY_NAME`= 'Mercury200.$tariff' AND `ADDED`>='$firstday' order by ADDED");
//echo(" in SELECT VALUE FROM `phistory` WHERE `VALUE_ID`=$value_id AND `ADDED`>='$firstday' order by ADDED");
$val_last = SQLSelectOne("SELECT VALUE FROM `phistory` WHERE `VALUE_ID`=$value_id AND `ADDED`<='$lastday' order by ADDED desc");
//echo(" out SELECT VALUE FROM `phistory` WHERE `VALUE_ID`=$value_id AND `ADDED`<='$lastday' order by ADDED desc");
//rate
$val_rate = SQLSelectOne("SELECT * FROM archive.history WHERE `PROPERTY_NAME`= '".$tariff."rate.value' AND `ADDED`<'$lastday' order by ADDED desc");
$out['tariff'] = $tariff;
$out['period'] = $lastday;
$out['in'] = round($val_in['VALUE']);
$out['last'] = round($val_last['VALUE']);
//$out['rate'] = (float)gg($tariff."rate.value");
$out['rate'] = (float)$val_rate['VALUE'];
$out['begin'] = $firstday;
echo("<pre>");
print_r($out);
return $out;
}
if($params['period']){
$period = $params['period'];
}else{
//предыдущий месяц
$period = date("Y-m-d", strtotime("first day of previous month"));
//$period = "2022-01-01";
}
$t1 = pow_payment("T1",strtotime($period));
$t2 = pow_payment("T2",strtotime($period));
$months = array(1=>'январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
$s = $months[date('n',strtotime($t1['period']))].': ';
$s.= "Лесников С.В. уч.287 +79104515775 коммунальные платежи "; //за ".$months[date('n',strtotime($t1['period']))].': ';
$s.="T1:".$t1['last']." расход ".($t1['last']-$t1['in'])."х".$t1['rate']."=".($t1['last']-$t1['in'])*$t1['rate']."р; ";
$s.="T2:".$t2['last']." расход ".($t2['last']-$t2['in'])."х".$t2['rate']."=".($t2['last']-$t2['in'])*$t2['rate']."р; ";
$s.="Итого: ".round(($t1['last']-$t1['in'])*$t1['rate'] + ($t2['last']-$t2['in'])*$t2['rate'],2)."р";
echo($s);
//SendTelegram
rs("SendTelegram",array("message"=>$s));
|
Спросим про стирку
|
//wait for gg("AliceAsk.active") == 0 todo
if(getGlobal("Yandex2.status") == 1) return;
if( gg("AliceAsk.active") == 0){
if(gg("Yandex2.ya_online")){
//$mml = gg("minMsgLevel");
//$vol = gg("VolumeLevel");
//sg("minMsgLevel",2);
//sg("VolumeLevel",60);
sg('AliceAsk.Query','Вопрос - Будем сегодня стирать?');
sg('AliceAsk.yes','say("Принят ответ ДА. Включаю стиральную машинку. Предупрежу о начале и конце стирки.",2);callMethod("Yandex2.turnOn");');
sg('AliceAsk.no','say("Принят ответ НЕТ",2);callMethod("Yandex2.turnOff");');
sg('AliceAsk.cancel','say("Отмена",2);callMethod("Yandex2.turnOff");');
cm('AliceAsk.questActivate');
}else{
say("Недоступно реле стиральной машины",1);
}
}else{
say("Не удалось спросить про стирку",1);
}
|
AfterBlackout
|
восстановление после отключения 220
say("Начало восстановления после пропадания сети",2);
//Восстановим освещение
callmethod('grpLight.callGroupMethod',array('mg'=>'refresh'));
//Восстановим работу нагревателей -- в группу перевести
$objects = getObjectsByClass("NooThermostats");
foreach($objects as $obj) {
$trm = getObject($obj['TITLE']);
//if($trm->getProperty("Auto"))
CallMethod($obj['TITLE'].".AutoOn");
}
//яндекс-розетки ?
|
BackUpFull
|
архив кода
set_time_limit(20*60);
$filename = "z:/backups/mdm_full/mdm_full.7z";
$fileto = "c:/Users/User/YandexDisk/backup/".date("Y-m-d")."_mdm_full.7z";
exec(DOC_ROOT."\backups\backup_full.bat");
if (file_exists($filename)) {
rename($filename, $fileto);
debmes ("Архив $fileto готов");
} else {
debmes ("Архив $filename не сформирован!");
}
|
BackUpPHP
|
архив кода
set_time_limit(20*60);
$filename = "z:/backups/php/php.7z";
$fileto = "c:/Users/User/YandexDisk/php/".date("Y-m-d")."-php.7z";
exec(DOC_ROOT."\backups\backphp.bat");
if (file_exists($filename)) {
rename($filename, $fileto);
debmes ("Архив кода $fileto готов");
} else {
debmes ("Архив кода $filename не сформирован!");
}
|
CheckUptime
|
every minute
$started_time = getGlobal('ThisComputer.started_time');
$timestamp = time() - $started_time;
//setGlobal('ThisComputer.uptime', $timestamp);
saveToCache('MJD:ThisComputer.UPTIME', $timestamp);
$years = floor($timestamp / 31536000);
$days = floor(($timestamp - ($years*31536000)) / 86400);
$hours = floor(($timestamp - ($years*31536000 + $days*86400)) / 3600);
$minutes = floor(($timestamp - ($years*31536000 + $days*86400 + $hours*3600)) / 60);
$timestring = '';
if ($years > 0){
$timestring .= $years . 'г ';
}
if ($days > 0) {
$timestring .= $days . 'д ';
}
if ($hours > 0) {
$timestring .= $hours . 'ч ';
}
if ($minutes > 0) {
$timestring .= $minutes . 'м ';
}
//setGlobal('ThisComputer.uptimeText', trim($timestring));
saveToCache('MJD:ThisComputer.uptimeText', trim($timestring));
postToWebSocketQueue('ThisComputer.uptimeText',trim($timestring));
|
CleanOldBackups
|
//предполагается, что SETTINGS_BACKUP_PATH со слешом на конце
if (!defined('BACKUP_FILES_EXPIRE')) {
define('BACKUP_FILES_EXPIRE', 30);
}
if (defined('SETTINGS_BACKUP_PATH') && SETTINGS_BACKUP_PATH != '' && is_dir(SETTINGS_BACKUP_PATH)) {
$backups_dir = SETTINGS_BACKUP_PATH;
} else {
$backups_dir = DOC_ROOT . '/backup/';
}
// removing old backus
if (is_dir($backups_dir)) {
$backups = scandir($backups_dir);
foreach ($backups as $file) {
if ($file == '.' || $file == '..') continue;
$path = $backups_dir . $file;
//echo($path.' '.date('Y-m-d H:i:s',filemtime($path)).'<br>');
if (is_dir($path) && (filemtime($path) < time() - BACKUP_FILES_EXPIRE * 24 * 60 * 60)) {
echo("Removing tree $path".'<br>');
DebMes("Removing tree $path.", 'backup');
removeTree($path);
}
if (is_file($path) && (filemtime($path) < time() - BACKUP_FILES_EXPIRE * 24 * 60 * 60)) {
echo("Removing file $path".'<br>');
DebMes("Removing file $path.", 'backup');
@unlink($path);
}
}
echo "OK";
} else {
echo $backups_dir . " not found";
}
|
CleanOldLogs
|
if (!defined('LOG_FILES_EXPIRE')) {
define('LOG_FILES_EXPIRE', 5);
}
//removing old log files
$dir = ROOT."cms/debmes/";
foreach (glob($dir."*") as $file) {
if (filemtime($file) < time() - LOG_FILES_EXPIRE*24*60*60) {
//DebMes("Removing log file ".$file);
@unlink($file);
}
}
|
cleanOldSnaps
|
//removing old snapshots files
$dir = ROOT."cms/images/snapshots/";
foreach (glob($dir."*") as $file) {
if (filemtime($file) < time() - 1*24*60*60) {
//DebMes("Removing snapshot file ".$file);
@unlink($file);
}
}
|
ClearExeLogs
|
Очистка логов выполнения
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");
//
//keepLatestLimitedBySize('./cms/cached/voice', 50*1024*1024); //50Mb
|
closeMDM
|
Выключение МДМ
runScript('saveDumpDb_220');
say('Выключаюсь. До свидания!', 2);
safe_exec('c:\\_majordomo\\mdm_close.bat');
|
delete_oldies
|
if (!defined('LOG_FILES_EXPIRE')) {
define('LOG_FILES_EXPIRE', 5);
}
//removing old log files
$dir = ROOT."cms/debmes/";
foreach (glob($dir."*") as $file) {
if (filemtime($file) < time() - LOG_FILES_EXPIRE*24*60*60) {
//DebMes("Removing log file ".$file.'<br>');
@unlink($file);
}
}
//removing old snapshots files
$dir = ROOT."cms/images/snapshots/";
foreach (glob($dir."*") as $file) {
if (filemtime($file) < time() - 1*24*60*60) {
//DebMes("Removing snapshot file ".$file.'<br>');
@unlink($file);
}
}
// CHECKING DATA
$sqlQuery = "SELECT pvalues.*, objects.TITLE as OBJECT_TITLE, properties.TITLE as PROPERTY_TITLE
FROM pvalues
JOIN objects ON pvalues.OBJECT_ID = objects.id
JOIN properties ON pvalues.PROPERTY_ID = properties.id
WHERE pvalues.PROPERTY_NAME != CONCAT_WS('.', objects.TITLE, properties.TITLE)";
$data = SQLSelect($sqlQuery);
$total = count($data);
for ($i = 0; $i < $total; $i++)
{
$objectProperty = $data[$i]['OBJECT_TITLE'] . "." . $data[$i]['PROPERTY_TITLE'];
if ($data[$i]['PROPERTY_NAME'])
echo "Incorrect: " . $data[$i]['PROPERTY_NAME'] . " should be $objectProperty" . '<br>';
else
echo "Missing: " . $objectProperty .'<br>';
$sqlQuery = "SELECT *
FROM pvalues
WHERE ID = '" . $data[$i]['ID'] . "'";
$rec = SQLSelectOne($sqlQuery);
$rec['PROPERTY_NAME'] = $data[$i]['OBJECT_TITLE'] . "." . $data[$i]['PROPERTY_TITLE'];
SQLUpdate('pvalues', $rec);
}
|
mailFromUps
|
обработаем ворнинги от упса
$txt = $params['SUBJECT'];
// Warning from My UPS - Power fail
// Information from My UPS - Power O.K.
if(strpos($txt, "Power fail")!==false){
sg('ippon.powerState','off',0,'mailFromUps');
}elseif(strpos($txt, "Power O.K.")!==false){
sg('ippon.powerState','on',0,'mailFromUps');
}
if(strpos($txt, "Battery Low")!==false){
debmes('Battery Low - from ups mail');
sg('ippon.batVoltage',0,0,'mailFromUps');
}
$txt = str_replace(array("\r","\n")," ",$txt);
if(strpos($txt, "Warning")!==false) DebMes($txt);
|
md_refresh
|
передергивает дд.value, пока md.value=1
$obj = getObject($params['MD']);
if($obj->getProperty('value') == 0) return; //
if($obj->getProperty('type')!='impulse'){
$obj->setProperty('value',1,0,'md_refresh');
}
|
noodataF
|
//Noodata: /api/script/noodata?mode=1&ansv=0&togl=36&cell=1&cmd=0&fmt=0&d0=0&d1=0&d2=0&d3=0&id=0x00000000
$mode = $params['mode'];//0 nooLite TX/1 nooLite RX/2 nooLite-F TX/3 nooLite-F RX/4 – сервисный режим работы с nooLite-F/5 upd software
$ansv = $params['ansv'];//0-ok/1-no answer/2-error on work/3-bind ok
$togl = $params['togl'];
$cell = $params['cell'];
$cmd = (int)$params['cmd'];
$fmt = $params['fmt'];
$d0 = $params['d0'];
$d1 = $params['d1'];
$d2 = $params['d2'];
$d3 = $params['d3'];
$id = str_replace('0x','',$params['id']);
//check lost commands
if($mode == 0 && $cmd == 128) return; // wtf?
if($mode == 1){ //датчики и пульты MODE=RX
//$toglWait = (registeredEventDetails('NooToggle')+ 1)%64;
$toglWait = (checkFromCache('Noo:Toggle')+ 1)%64;
//$toglWait = (getGlobal('ThisComputer.NooToggle') + 1)%64;
if($togl<>$toglWait){
debmes('Lost Noo cmd! #togl='.$togl.', wait for '.$toglWait,'noolite');
}
SaveToCache('Noo:Toggle',$togl);
}
$m = '';
//find command
$cmds = array(
0=>"onTurnOff",1=>"onBrightDown",2=>"onTurnOn",3=>"onBrightUp",
4=>"onSwitch",5=>"onBrightBack",6=>"onSetBrightness",7=>"onLoadPreset",
8=>"onSavePreset",9=>"onUnbind",10=>"onStopReg",11=>"onBrightStepDown",
12=>"onBrightStepUp",13=>"onBrightReg",15=>"onBind",16=>"onRollColour",
17=>"onSwitchColour",18=>"onSwitchMode",19=>"onSpeedModeBack",20=>"onBatteryLow",
21=>"onTemp",25=>"onTemporaryOn",26=>"onModes",128=>"onReadState",
129=>"onWriteState",130=>"onSendState",131=>"onService",132=>"onClearMemory",
);
if(IsSet($cmds[$cmd])){
$m = $cmds[$cmd];
}else{
//debmes("Not find Noo command #".$cmd);
registerError('noo_error', "Not find Noo command #".$cmd);
return;
}
//find object
$oo = SQLSelectOne("SELECT * FROM `noomodules` WHERE CH=$cell and `ADDR`='". $id."'");
if(IsSet($oo['ID'])){
$o = $oo['LINKED_OBJ'];
$obj = getObject($o);
//$otype = $obj->getProperty('type');
//$onote = $obj->getProperty("name");
$otype = $oo['TYPE'];//есть в свойствах объекта
$onote = $oo['NOTES'];//есть в свойствах объекта
unset($oo);
}else{
registerError('noo_error', "Not find Noo object for ch#".$cell." addr=".$id);
return;
}
$msg = str_replace("/api/script/noodataF?","",$_SERVER['REQUEST_URI']);
DebMes("NoodataF<-: ".$msg." $o",'noolite');
//обработаем ошибку
if($ansv <> 0){
debmes('nooF ERROR '.$_SERVER['REQUEST_URI'],'noolite');
if($cmd == 130 && $id == '00000000') return; // wtf?
if($mode == 2 && $id == '00000000') return; // wtf?
registerError('noo_error', 'nooF ERROR ANSW-> '.$ansv.' '.$o.'.'.$m.' note='.$onote);
return;
}
// debmes('nooF -> '.$o.'.'.$m.' type='.$otype.' note='.$onote);
if ($o != '' && $m != '') {//PULT,SENSOR
if ($m == 'onBatteryLow') {
say('Низкий заряд батарейки у прибора '.$o);
registerEvent('BatteryLow/'.$o, $details = $o.' BatteryLow');
return;
}
$pos = stripos($o,'motion');
if (($pos !== false) && ($m == 'onTurnOn')) {//SENSOR motiondetect
if($obj->getproperty('type') == 'impulse'){//PK314 special -> off no deal
return;
}
$obj->setProperty("value", 1, 0,$msg);
return;
} elseif (($pos !== false) && ($m =='onTurnOff')) {
if($obj->getproperty('type') == 'impulse'){//PK314 special -> on
$obj->setProperty("value", 1, 0,$msg);
return;
}
$obj->setProperty("value", 0, 0,$msg);
} elseif ($cmd == 21) {//SENSOR temperature
$b1 =(int)str_replace('-','',$d0);
$b2 =(int)str_replace('-','',$d1);
$y_temp=256*($b2 & 15)+$b1;
if (($b2 & 8) != 0 ) { // отрицательное значение температуры
$y_temp=4096-$y_temp;
$temp = -1*($y_temp)/10;
}else{ // положительное значение температуры
$temp = round($y_temp/10);
}
$obj->setProperty("value",$temp, 0,$msg);
}elseif ($cmd == 130){ //POWER_F THERMO_F
if($d0 == 6){//THERMO_F
$obj->setProperty("temp",$d3, 0,$msg);
//если вкл($d2 бит 0==1) режим авто, иначе выкл
$auto = $d2 & 1; //check 0 bit
$obj->setProperty("auto",$auto, 0,$msg);
if($auto){//при режиме авто статус $d2 бит 4==1 нагрев вкл, ==0 нагрев выкл
$obj->setProperty("status",($d2 & 16)==16?1:0, 0,$msg);
}else{
$obj->setProperty("status",0, 0,$msg);
}
}elseif($d0 == 3 || $d0 == 4 || $d0 == 5){ //POWER_F,DIMMER_F
$obj->setProperty("status",$d2==0?0:1, 0,$msg);
}
}elseif($otype == 'PULT' || $otype == 'SENSOR'){
callMethod($o.'.'.$m,array('desc'=>$msg));//PULT yes
}elseif($m == 'onTurnOn'||$m == 'onBrightUp'||$m == 'onBrightStepUp'){//else DIMMER RGB POWER
$obj->setProperty("status",1, 0,$msg);
}elseif($m == 'onTurnOff'||$m == 'onBrightDown'){//else DIMMER?? RGB POWER
$obj->setProperty("status",0, 0,$msg);
}elseif($m == 'onSetBrightness'){// DIMMER
if($obj->getProperty("brightness")==0 ){
//$obj->setProperty("status",0, 0,$msg);
}else{
$obj->setProperty("status",1, 0,$msg);
}
}
}
|
nooPollphp
|
поллинг устройств нооФ
$recs = getObjectsByProperty('Poll',">","0");
if(is_array($recs)){
foreach ($recs as $rec)
{
$obj = getObject($rec);
$noo = $obj->object_title;
$ch = $obj->getProperty('channel');
$poll = $obj->getProperty('Poll');
$addr = $obj->getProperty('addr');
if(!TimeOutExists("nooPoll".$noo) && $addr != '00000000'){ //чтобы не частить и не опрашивать старые
$cmd = 'sendNooAPICmd("2 0 0 '.$ch.' 128 0 0 0 0 0 00000000 0","'.$noo.'");';
setTimeOut("nooPoll".$noo,$cmd,$poll);//самозапуск
//registerEvent('nooPollLastStart',$noo);
saveToCache('Noo:PollLastStart',time());
}
}
}
|
nooRedis
|
запихнем описание ноо-устройств в редис
$oo = SQLSelect("SELECT * FROM `noomodules`");
//echo('<pre>');
//print_r($oo);
$redis = new Redis();
$redis->connect(USE_REDIS);
//$redis->del("NOOD:*");
$total = count($oo);
for ($i = 0; $i < $total; $i++) {
if(isset($oo[$i]['LINKED_OBJ'])){
$key = "NOOD:". $oo[$i]['CH'].".". $oo[$i]['ADDR'];
$value = $oo[$i]['LINKED_OBJ']."/". $oo[$i]['TYPE']."/". $oo[$i]['NOTES'];
$redis->set($key, $value);
}
}
$redis->close();
|
rebootMJD
|
Перезагрузка Majordomo
runScript("saveDumpDb");
say('Внимание, перегружаюсь!', 2);
sleep(5);
safe_exec('c:\\_majordomo\\reboot_mdm.bat');
|
rebootSys
|
Перезагрузка с дампом базы
runScript("saveDumpDb");
say('Перезагрузка машины. До свидания!', 2);
safe_exec('c:\\_majordomo\\reboot_sys.bat');
|
resetCameras
|
safe_exec('c:\\_majordomo\\mjpegcam.bat');
|
ResetDing
|
Восстановим свои файлы вместо системных
$file = ROOT.'3rdparty/freeboard/index_my.php';
$newfile = ROOT.'3rdparty/freeboard/index.php';
if (!copy($file, $newfile)) {
say("не удалось скопировать ".$file);
} else{
debmes('Freeboard обновился');
}
$file = ROOT.'rc/sapi_cached_my.js';
$newfile = ROOT.'rc/sapi.js';
/*
if (!copy($file, $newfile)) {
say("не удалось скопировать ".$file);
} else{
debmes('sapi обновился');
}
*/
$file = ROOT.'cms/sounds/bell_ring.mp3';
$newfile = ROOT.'cms/sounds/dingdong.mp3';
if (!copy($file, $newfile)) {
say("не удалось скопировать ".$file);
} else{
say('Диндон обновился');
}
//copy from $src to $dst
$src = ROOT.'img/icons/my';
$dst = ROOT.'img/icons';
$files = glob($src."/*.png");
foreach($files as $file){
$file_to_go = str_replace($src,$dst,$file);
copy($file, $file_to_go);
}
//copy from $src to $dst
$src = ROOT.'img/modules/my';
$dst = ROOT.'img/modules';
$files = glob($src."/*.png");
foreach($files as $file){
$file_to_go = str_replace($src,$dst,$file);
copy($file, $file_to_go);
}
echo("ResetDing ok");
|
router_reboot
|
say('Подключение к интернету отсутствует. Попробую перезагрузить роутер...');
//safe_exec('c:\_majordomo\reboot_zyx.bat');
//safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\reboot_zyx.ncl"');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.1/ci');
//<request id="1"><command name="show interface stat"><name>ISP</name></command></request>');
curl_setopt($ch, CURLOPT_POSTFIELDS, '<request id="0"><command name="system reboot"></command></request>');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/xml']);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:lsv23031964');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$objectResult = new SimpleXMLElement($data);
print_r ($objectResult);
|
saveBackUp
|
set_time_limit(600);
file_get_contents('http://192.168.1.7/modules/saverestore/update_iframe.php?with_extensions=&with_backup=&backup=1&design=1&code=1&data=1&save_files=1',0);
|
saveDumpDb
|
Создадим дамп базы YaDisk
//debmes('Сохраняю копию базы');
//$filename = ROOT . '/database_backup_my/db.sql';
$filename = 'c:/Users/User/YandexDisk/DumpDb/db.sql';
$mysqlDumpPath = 'c:/_majordomo/mysql/bin/mysqldump.exe';
$mysqlDumpParam = ' --user=' . DB_USER . ' --password=' . DB_PASSWORD;
$mysqlDumpParam .= ' --no-create-db --add-drop-table --databases ' . DB_NAME;
if (file_exists( $filename . '.prev'.date("H"))) @unlink( $filename . '.prev'.date("H"));
if (file_exists($filename)) rename($filename, $filename . '.prev'.date("H"));
exec($mysqlDumpPath . $mysqlDumpParam . ' > ' . $filename);
//debmes('Дамп сохранён');
|
saveDumpDb_220
|
Создадим дамп базы YaDisk
debmes('Сохраняю копию базы в /database_backup/db.sql');
$filename = ROOT . '/database_backup/db.sql';
//$filename = 'c:/Users/User/YandexDisk/DumpDb/db.sql';
$mysqlDumpPath = 'c:/_majordomo/mysql/bin/mysqldump.exe';
$mysqlDumpParam = ' --user=' . DB_USER . ' --password=' . DB_PASSWORD;
$mysqlDumpParam .= ' --no-create-db --add-drop-table --databases ' . DB_NAME;
if (file_exists( $filename . '.prev'.date("H"))) @unlink( $filename . '.prev'.date("H"));
if (file_exists($filename)) rename($filename, $filename . '.prev'.date("H"));
exec($mysqlDumpPath . $mysqlDumpParam . ' > ' . $filename);
debmes('Дамп сохранён. Он восстановится при следующем старте.');
|
save_remove_history
|
$sql = "INSERT INTO archive.history
SELECT p.`ADDED` , p.`VALUE` , t.property_name
FROM `phistory` p
JOIN vw_clobjpr t ON p.`VALUE_ID` = t.value_id
WHERE p.ADDED < DATE_SUB( NOW( ) , INTERVAL 1 MONTH )" ;
sqlExec($sql);
$sql = "DELETE FROM `phistory` p
JOIN vw_clobjpr t ON p.`VALUE_ID` = t.value_id
WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
and not (t.property_name like '%.valueMonth'
or t.property_name like 'T_rate.value'
or t.property_name like 'Mercury200.T_')" ;
sqlExec($sql);
/*
SELECT DATE_FORMAT(p.`ADDED`,'%Y-%m') added , p.`VALUE` , t.property_name
FROM `phistory` p
JOIN vw_clobjpr t ON p.`VALUE_ID` = t.value_id
WHERE DATE_FORMAT(p.`ADDED`,'%Y-%m-%d') = DATE_FORMAT(last_day(p.ADDED),'%Y-%m-%d')
and t.property_name='Mercury200.T1'
union
select DATE_FORMAT(`ADDED`,'%Y-%m') added, `VALUE` , property_name FROM archive.history
WHERE property_name='Mercury200.T1'
ORDER BY `added` DESC;
*/
|
simple_devices_add
|
/*$name = 'Соляная лампа';
$title = 'noodimmer1';
$type = 'relay'; //relay,openable,motion
*/
$name = 'Температура в гараже';
$title = 'temp_tasmota1';
$type = 'sensor_temp'; //relay,openable,sensor_temp,tv
$ob = getObject($title);
$location = $ob->location_id;
if($ob){
$rec = SQLExec("INSERT INTO devices ( `TITLE`, `TYPE`, `LINKED_OBJECT`, `LOCATION_ID`) VALUES ('".$name."' , '".$type."', '".$title."', '".$location."')");
if($rec){
echo("add to devices '".$name."' obj '".$title."'...");
$rec = SQLSelectOne("select * from devices where TITLE='".$name."'");
if($rec['ID']){
$id_dev = $rec['ID'];
SQLExec("UPDATE objects SET `SYSTEM`='sdevice".$id_dev."' WHERE `TITLE`='".$title."'");
echo("add to obj with id ".$id_dev."...");
}
}
echo("ok");
}
//$sql0 = "select * from objects WHERE `TITLE`='".$title."'";
|
camLast
|
$img = ROOT.'cms/images/cam2.jpg';
$descr = date('Y-m-d H:i:s',filemtime($img));
rs('sendTelegram',array('img'=>$img,'description'=>$descr));
$img = ROOT.'cms/images/cam4.jpg';
$descr = date('Y-m-d H:i:s',filemtime($img));
rs('sendTelegram',array('img'=>$img,'description'=>$descr));
|
camLast_1
|
/*
$img = ROOT.'cms/images/cam2.jpg';
$descr = date('Y-m-d H:i:s',filemtime($img));
rs('sendTelegram',array('img'=>$img,'description'=>$descr));
cm('cam1.takeSnapshot');
*/
$img = ROOT .str_replace('./cms/','cms/',gg('cam1.snapshot'));
$descr = date('Y-m-d H:i:s',filemtime($img));
rs('sendTelegram',array('img'=>$img,'description'=>$descr));
|
camLast_2
|
$img = ROOT.'cms/images/cam2.jpg';
$descr = date('Y-m-d H:i:s',filemtime($img));
rs('sendTelegram',array('img'=>$img,'description'=>$descr));
cm('cam1.takeSnapshot');
|
del_image
|
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$img = DOC_ROOT.'/cms/images/report.png';
$chat_id = '216241839';
$res = $telegram_module->sendImageTo($chat_id, $img, 'will be deleted after 20 s');
$message_id = $res["result"]["message_id"];
echo '<pre>';
print_r($res);
echo '</pre>';
sleep(20);
$res = $telegram_module->deleteMessage($chat_id, $message_id);
echo '<pre>';
print_r($res);
echo '</pre>';
|
img_report
|
//Картинка-информер для телеграмм
define('WIDTH', 230);
define('HEIGHT', 230);
$font = DOC_ROOT."/cms/font/impact.ttf";
$image = imagecreatetruecolor(WIDTH,HEIGHT)
or die('Cannot create image');
$image = imageCreateFromPng(DOC_ROOT."/cms/images/report0.png");
imagettftext($image,14,0,60,140,0xffa500,"$font","Дома ".getGlobal('ws.tempInside').'°C, '.getGlobal('ws.relHumInside').'%.');
imagettftext($image,14,0,70,165,0xffa500,"$font","На улице ".getGlobal('ws.tempOutside').'°C ');
$alarmmsg=gg('ThisComputer.timeNow');
$alarm="0";
$alarmname=gg('ThisComputer.DateNow');
$sizefont="16";
$colorfont="0xFFFFFF";
$WIDTHMSG="30";
$HEIGHTMSG="85";
$sizefont1="16";
$colorfont1="0xFFFFFF";
$WIDTHMSG1="50";
$HEIGHTMSG1="110";
imagettftext($image,$sizefont,0,$WIDTHMSG,$HEIGHTMSG,$colorfont,"$font",$alarmmsg);
imagettftext($image,$sizefont1,0,$WIDTHMSG1,$HEIGHTMSG1,$colorfont,"$font",$alarmname);
$res='';
if (gg('Security.stateColor')=='green' && gg('System.stateColor')=='green' && gg('Communication.stateColor')=='green') {
$res='Все системы работают';
$colorstat="0x00FF00";
} else {
if (gg('Security.stateColor')!='green') {
$colorstat="0xff3030";
$res.="Проблема безопасности: ".getGlobal('Security.stateDetails');
}
if (gg('System.stateColor')!='green') {
$res.="Системная проблема: ".getGlobal('System.stateDetails');
$colorstat="0xff3030";
}
if (gg('Communication.stateColor')!='green') {
$res.=" Проблема связи: ".getGlobal('Communication.stateDetails');
$colorstat="0xff3030";
}
}
$aa=0;
if ($aa == "0") $colortlevel="0x008b00";
if ($aa == "1") $colortlevel="0x008b00";
if ($aa == "2") $colortlevel="0xc0ff3e";
if ($aa == "3") $colortlevel="0xcaff70";
if ($aa == "4") $colortlevel="0xfff68f";
if ($aa == "5") $colortlevel="0xffff00";
if ($aa == "6") $colortlevel="0xff8247";
if ($aa == "7") $colortlevel="0xff3030";
if ($aa == "8") $colortlevel="0xcd2626";
if ($aa == "9") $colortlevel="0x8b1a1a";
if ($aa == "10") $colortlevel="0x8b1a1a";
imagettftext($image,12,0,20,20,0xffa500,"$font",'USD: '.gg('usd.value'));
imagettftext($image,12,0,20,40,0xffa500,"$font",'EURO: '.gg('eur.value'));
//imagettftext($image,12,0,150,20,$colortlevel,"$font",'Пробки: '.$aa);
imagettftext($image,10,0,10,190,$colorstat,"$font",gg('somebodyHomeText'));
imagettftext($image,10,0,10,210,$colorstat,"$font",$res);
header('Content-type: image/png');
imagepng($image,DOC_ROOT."/cms/images/report.png");
imagedestroy($image);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToAll(DOC_ROOT.'/cms/images/report.png', 'report');
|
newcall
|
кто звонит
if($params['name']){
$str = urldecode($params['name']);
if(preg_match("/^[\d\+]+$/",$str)){
say('Сергей, звонок! Номер неизвестный',2);
}else{
if($str=='Ольга Викторовна Лесникова') $str = 'Ольга';
say('Сергей, вас вызывает '.$str,3);
}
}else{
say('Сергей, звонок! Номер неизвестный',2);
}
|
sendCam2
|
Отошлём видео
https://majordomo.smartliving.ru/forum/viewtopic.php?f=5&t=2768&start=580#p65005
$url = "rtsp://192.168.1.23:554/user=admin&password=admin&channel=4&stream=0.sdp?real_stream--rtp-caching=100";
$video = "C:/_majordomo/htdocs/cms/cached/img/out.mp4";
exec('C:\_majordomo\apps\ffmpeg\ffmpeg.exe -y -i "'.$url.'" -t 5 -f mp4 -vcodec libx264 -pix_fmt yuv420p -an -vf scale=w=640:h=480:force_original_aspect_ratio=decrease -r 15 "'.$video.'" 2> null');
rs('sendTelegram',array('video'=>$video));
|
SendCameras
|
$objects = getObjectsByClass("myCameras");
$photos = array();
foreach($objects as $obj) {
$url = ROOT.'cms/images/'. gg($obj['TITLE'].".snapshot");
$img = ROOT."cms/files/".$obj['TITLE'].".jpg";
try {
$data = file_get_contents($url);
$i = strlen($data);
$handle = fopen($img, "w");
fwrite($handle, $data);
fclose($handle);
if ($i > 0) $photos[] = $img;
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
//print_r($photos);
$descr = 'Камеры';
//rs('sendTelegram',array('album'=>$photos,'description'=>$descr));
echo 'Вы удалили C:\*.*?';
|
SendChart
|
$url = BASE_URL.'/pChart/?p=Kitchen.Temperature&title=Кухня&type=1d>ype=line&gcolor=green';
$path = ROOT.'cms/cached/img/chart1.jpg';
file_put_contents($path, file_get_contents($url));
rs('sendTelegram',array('img'=>$path));
sleep(3);
$url = BASE_URL.'/pChart/?p=Outside.Temperature&title=Улица&type=1d&gcolor=red&fil01=0';
$path = ROOT.'cms/cached/img/chart2.jpg';
file_put_contents($path, file_get_contents($url));
rs('sendTelegram',array('img'=>$path));
|
SendTeleAgenda
|
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$sun = json_decode('"'.'\ud83c\udf1e'.'"');
$day = json_decode('"'.'\ud83d\udcc5'.'"');
$clock = json_decode('"'.'\u23f1'.'"');
$bell = json_decode('"'.'\ud83d\udd14'.'"');
$fire = json_decode('"'.'\ud83d\udd25'.'"');
$bad = json_decode('"'.'\ud83d\ude21'.'"');
$done = json_decode('"'.'\u2705'.'"');
$telegram_module = new telegram();
$chat_id = 216241839;
$events = SQLSelect("SELECT DATE_FORMAT( clnd_events.due, '%H:%i' ) due_time,
DATE_FORMAT( clnd_events.due, '%d.%m %H:%i' ) due_dat,
DATE_FORMAT( clnd_events.DONE_WHEN, '%H:%i %d.%m.%y' ) done_date, clnd_events.*,
clnd_categories.ICON, clnd_categories.title CAT_NAME
FROM clnd_events left join clnd_categories
on clnd_events.calendar_category_id=clnd_categories.id
WHERE ((TO_DAYS(DUE)<=TO_DAYS(NOW()) AND TO_DAYS(END_TIME)>=TO_DAYS(NOW())) or IS_DONE!=0)
and IS_NODATE=0 AND ifnull(AT_CALENDAR,1)!=0 ORDER BY DUE,IS_DONE");
if ($events)
{
$tasks = '';
$cals = '';
$i = 0;
$j = 0;
foreach($events as $ev)
{
if($ev['ALL_DAY']) {
$duetm = $day.' ';
}else{
$duetm = $clock.$ev['due_time'].' ';
}
if( $ev['IS_DONE'] == 0)
{
$i++;
$tsk = $ev['TITLE'];
$cat = '';
if($ev['CAT_NAME']) {
$cat = $ev['CAT_NAME'];
}
//$tasks.= $duetm.' '.$cat.$tsk.'<br>';
//$tasks.= $duetm.$ev['TITLE'].' ['.$ev['CAT_NAME'].']<br>'; //или просто текст
$option[] = $telegram_module->buildInlineKeyboardButton($text=$duetm.$ev['TITLE'].' ['.$cat.']',"","Callback_Todoer_Task_".$ev['ID'],"");
} elseif( $ev['IS_DONE'] == 2) {
$j++;
$duetm = $ev['due_dat'].' ';
$tsk = $ev['TITLE'];//$ev['ID']
$cat = '';
if($ev['CAT_NAME']){
$cat = $ev['CAT_NAME'];
}
$cals.= $duetm.' '.$cat.$tsk.' <i>в '.$ev['done_date'].'</i><br>';
$option[] = $telegram_module->buildInlineKeyboardButton($text=$fire.$duetm.$ev['TITLE'].' ['.$cat.']',"","Callback_Todoer_Task_".$ev['ID'],"");
}
}
}
$count_row = 1;
$option = array_chunk($option, $count_row);
$keyb = $telegram_module->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Дела на сегодня: ", 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$telegram_module->sendContent($content);
|
SendTelegram
|
// params message, img
$message = $params['message'];
$img = $params['img'];
$video = $params['video'];
$album = $params['album'];
$descr = $params['description'];
$addr = $params['to'];
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
/*$message='<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<a href="URL">inline URL</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>';*/
//Если текст
if ($message){
$res = $telegram_module->sendMessageToAdmin($message);
}
//Если картинка
if ($img) {
$telegram_module->sendAction($chat_id,"upload_photo");
$telegram_module->sendImageToAll($img,$descr);
}
//Если кино
if ($video) {
$telegram_module->sendVideoToAll($video);
}
//Если альбом
if ($album) {
$telegram_module->sendAlbumToAll($album,$descr);
}
|
SendTeleOnline
|
$text ='<code>';
$sql='SELECT TITLE, status FROM pinghosts ORDER BY TITLE';
$recs = SQLSelect($sql);
foreach($recs as $rec)
{
if ($rec['status']==1){$stat=hex2bin('e29c85');}
elseif ($rec['status']==2){$stat=hex2bin('f09f9aab');}
$text .= mb_substr($rec['TITLE']."...............",0,15); // тут основная фишка!
$text .= $stat;
$text .= PHP_EOL;
}
$text .='</code>';
runScript('SendTelegram', array("message"=>$text));
|
SendTeleSensors
|
$green = json_decode('"'.'\ud83d\udc9a'.'"');
$yellow = json_decode('"'.'\ud83d\udc9b'.'"');
//runScript('SendTelegram', array("message"=>'Сенсоры'));
$ss = array('hum_sensors','temp_sensors','motion_sensors','switch_sensors');
foreach($ss as $s){
$text ='<code>'.$s.PHP_EOL;
$text .= "имя............знач..жив?".PHP_EOL;
$sensors = getObjectsByClass($s);
foreach($sensors as $sensor)
{
$name = gg($sensor['TITLE'].".name")=='' ? $sensor['TITLE'] : gg($sensor['TITLE'].".name");
$text .= mb_substr($name."...............",0,15); // тут основная фишка!
$text .= mb_substr(gg($sensor['TITLE'].".value")."..........",0,6);
$text .= gg($sensor['TITLE'].".alive")?$green:$yellow;
$text .= date('j/m H:i',gg($sensor['TITLE'].".LastUpdated"));
$text .= PHP_EOL;
}
$text .='</code>';
runScript('SendTelegram', array("message"=>$text));
}
|
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 .='Безопасность: ';//.gg('Communication.stateTitle').PHP_EOL;
if(gg('Security.stateColor')=='green'){
$subj .= $green.PHP_EOL;
}else{
if(gg('Security.stateColor')=='yellow') $subj .= $yellow;
if(gg('Security.stateColor')=='red') $subj .= $red;
$subj .= gg('Security.stateDetails').PHP_EOL;
}
/*
$subj .='Модули : ';//.gg('Communication.stateTitle').PHP_EOL;
if(gg('mod240.alive')){
$subj .= $green.PHP_EOL;
}else{
$subj .= $red.PHP_EOL;
}
*/
$subj .='...'.PHP_EOL.'</code>';
$subj .='<b>Комнаты</b><code> '.$tmp.'°С '.$drop.'%'.PHP_EOL;
$objects = getObjectsByClass("myRooms");
foreach($objects as $obj) {
$room = mb_substr(gg($obj['TITLE'].".title")." ",0,12);
$room .= mb_substr(str_replace("+","",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));
|
Snapshot2Telegram
|
сделаем снимок и отошлём в тлг
// получаем картинку
//$url="rtsp://192.168.1.10:554/user=admin&password=&channel=4&stream=0.sdp?real_stream--rtp-caching=100";
//$jpg="C:/_majordomo/htdocs/cms/cached/img/snapshot.jpg";
//exec('C:\_majordomo\apps\ffmpeg\ffmpeg -ss 2 -i '.$url.' -y -f image2 -qscale 0 -frames 1 '.$jpg.'');
// отправляем картинку в телеграмм
//rs('sendTelegram',array('img'=>$jpg));
//Itxmini\c\_majordomo\htdocs\cms\icons\weather\bkn_-ra_d.svg
$jpg =ROOT. "cms/icons/weather/".gg('weather_my.ya_icon').".svg";
echo($jpg);
rs('sendTelegram',array('img'=>$jpg));
|
tele_inline
|
$telegram_module = new telegram();
$option = array(
array($telegram_module->buildInlineKeyboardButton("Url", "http://majordomo.smartliving.ru/")),
array($telegram_module->buildInlineKeyboardButton("Query", '','',"Query select chat")),
array($telegram_module->buildInlineKeyboardButton("Query current chat", '','',null,'Query current chat'))
);
$keyb = $telegram_module->buildInlineKeyBoard($option);
$telegram_module->sendMessageToUser(139809586 ,"Text",null,$keyb);
$telegram_module->sendImageToUser(139809586 ,'/var/www/files/Camera01.jpg',"Text",null,$keyb);
|
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));
|
calDav_export_todos
|
require_once '3rdparty/simpleCalDAV/SimpleCalDAVClient.php';
header("Content-type: text/text; charset=UTF-8"); //вывод в браузер
$todos = SQLSelect("SELECT DATE_FORMAT( clnd_events.DONE_WHEN, '%H:%i %d.%m.%y' ) done_date, clnd_events.*,
clnd_categories.ICON, clnd_categories.title CAT_NAME
FROM clnd_events left join clnd_categories
on clnd_events.calendar_category_id=clnd_categories.id
WHERE clnd_categories.title in ('Работа','Дела','ToDo')
AND ifnull(AT_CALENDAR,1)!=0 and IS_DONE=0");
$NewToDoH ="BEGIN:VCALENDAR".PHP_EOL.
"VERSION:2.0".PHP_EOL.
"PRODID:-//mdm todoer".PHP_EOL.
"X-WR-CALNAME:MDM todoer".PHP_EOL.
"CALSCALE:GREGORIAN".PHP_EOL.
"BEGIN:VTIMEZONE".PHP_EOL.
"TZID:Europe/Moscow".PHP_EOL.
"TZURL:http://tzurl.org/zoneinfo/Europe/Moscow".PHP_EOL.
"X-LIC-LOCATION:Europe/Moscow".PHP_EOL.
"BEGIN:STANDARD".PHP_EOL.
"TZOFFSETFROM:+0300".PHP_EOL.
"TZOFFSETTO:+0300".PHP_EOL.
"TZNAME:MSK".PHP_EOL.
"DTSTART:19700101T000000".PHP_EOL.
"END:STANDARD".PHP_EOL.
"END:VTIMEZONE".PHP_EOL;
$client = new SimpleCalDAVClient();
try {
$client->connect(
'https://caldav.yandex.ru:443/',
'sergey-lesnikov@yandex.ru', // login with @yandex.ru
'esctgjcwkresqppx' // password
);
$arrayOfCalendars = $client->findCalendars(); // Returns an array of all accessible calendars on the server.
} catch (Exception $e) {
echo $e->__toString();
}
$client->setCalendar($arrayOfCalendars["todos-5685811"]);
if($todos){
//для каждой задачи
foreach ($todos as $ev )
{
$newToDo = "BEGIN:VTODO".PHP_EOL;
$newToDo .= "CREATED:".date('Ymd').'T'.date('His').'Z'.PHP_EOL;
if($ev['DUE'] && !$ev['IS_NODATE'] ){
$dt = date_create($ev['DUE']);
$newToDo .= "DUE;TZID=Europe/Moscow:".date_format($dt,'Ymd').'T'.date_format($dt,'His').PHP_EOL;
}
if($ev['IS_DONE']){
$dt = date_create($ev['DONE_WHEN']);
$newToDo .= "COMPLETED;TZID=Europe/Moscow:".date_format($dt,'Ymd').'T'.date_format($dt,'His').PHP_EOL;
}
$newToDo .= "SUMMARY:".$ev['CAT_NAME']."/".$ev['TITLE'].PHP_EOL;
if($ev['NOTES']){
$newToDo .= "DESCRIPTION:".$ev['NOTES'].PHP_EOL;
}
$newToDo .= "UID:".date("YmdHis")."_".$ev['ID'].'@mdm.cld'.PHP_EOL;
$newToDo .= "END:VTODO".PHP_EOL;
echo($NewToDoH.$newToDo."END:VCALENDAR".PHP_EOL);
$client->create($NewToDoH.$newToDo."END:VCALENDAR".PHP_EOL);
}
}
echo("ok");
|
ClearGPSlog
|
/*set_time_limit(6000);
$records=SQLSelect("SELECT gpslog.ID, gpslog.DEVICEID, gpslog.LOCATION_ID, gpsdevices.ID as GPS_DEVICE_ID FROM gpslog LEFT JOIN gpsdevices ON gpslog.DEVICE_ID=gpsdevices.ID ORDER BY gpslog.DEVICEID, gpslog.ADDED DESC");
$total=count($records);
for($i=1;$i<$total-1;$i++) {
if (!$records[$i]['GPS_DEVICE_ID']) {
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
continue;
}
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']
&& $records[$i]['GPS_DEVICE_ID']==$records[$i+1]['GPS_DEVICE_ID'] && $records[$i]['GPS_DEVICE_ID']==$records[$i-1]['GPS_DEVICE_ID']) {
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
}
}
*/
getURL(BASE_URL.'/panel/popup/app_gpstrack.html?optimize_log=1', 0);
SQLExec("OPTIMIZE TABLE `gpslog`");
|
createBackgroundImage
|
$image = imagecreatetruecolor(1024,800)
or die('Cannot create image');
$color = strtolower(gg('weather_my.ya_sky_color'));
$color = preg_replace('/^#/','',$color);
$color = hexdec($color);
$red = $color >> 16 & 0xFF;
$green = $color >> 8 & 0xFF;
$blue = $color & 0xFF;
$background = imagecolorallocate($image, $red, $green, $blue);
imagefill($image,0,0,$background);
header('Content-type: image/png');
imagepng($image,DOC_ROOT."/cms/scenes/backgrounds/fon.png");
imagedestroy($image);
|
defConst
|
echo "<pre>";
print_r(get_defined_constants(true));
|
fito
|
//https://habr.com/ru/post/114265/
//Спектр видимого излучения в компьютерной графике
function Red($l)
{
if ($l>560 && $l<=760) $n=255;
if ($l>495 && $l<=555) $n=0;
if ($l>570 && $l<=580) $n=round(127.5+127.5*($l-570)/10);
if ($l>555 && $l<=570) $n=round(127.5*($l-555)/15);
if ($l>480 && $l<=495) $n=round(127.5-127.5*($l-480)/15);
if ($l>380 && $l<=480) $n=round(255-127.5*($l-380)/100);
return $n;
}
function Blue($l)
{
if ($l>380 && $l<=525) $n = 255;
if ($l>555 && $l<=760) $n = 0;
if ($l>540 && $l<=555) $n = round(127.5-127.5*($l-540)/15);
if ($l>525 && $l<=540) $n = round(255-127.5*($l-525)/15);
return $n;
}
function Green($l)
{
if ($l>525 && $l<=580) $n = 255;
if ($l>380 && $l<=495) $n = 0;
if ($l>610 && $l<=760) $n = round(63.5-63.5*($l-610)/150);
if ($l>600 && $l<=610) $n = round(127.5-63.5*($l-600)/10);
if ($l>590 && $l<=600) $n = round(190.5-63.5*($l-590)/10);
if ($l>580 && $l<=590) $n = round(255-63.5*($l-580)/10);
if ($l>495 && $l<=510) $n = round(127.5*($l-495)/15);
if ($l>510 && $l<=525) $n = round(127.5+127.5*($l-510)/15);
return $n;
}
$lambda = 440;
echo('for '.$lambda.'nm = rgb('.Red($lambda).','.Green($lambda).','.Blue($lambda).')<br>');
$lambda = 660;
echo('for '.$lambda.'nm = rgb('.Red($lambda).','.Green($lambda).','.Blue($lambda).')');
|
function_list
|
https://majordomo.smartliving.ru/forum/viewtopic.php?f=6&t=5044
//Запишем все доступные функции в переменную
$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>');
|
json_test
|
$t="dt:24.10.2022//tm:22.14//from:LEROYMERLIN//txt:Ваш заказ 221097047289 будет доставлен 25.10.22, 08:00-16:00. Отследить: https://leroymerlin.ru/otsledit-zakaz?id=dvlTXzrUbjUWEgnayKrd";
//$t="dt:15.03.22//tm:14.46//from:Alfa-Bank//txt:**1982 Postupleniye Summa: 74 621,43 RUR Ostatok: 247 406,54 RUR 15.03.2022 Podrobnosti v mobilnom banke alfabank.ru/app";
//$t = $params['NEW_VALUE'];
$t = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $t);
$t = str_replace(['₽','RUR'],' руб',$t);
$t = str_replace('+7','телефон +7',$t);
echo $t;
$msg = explode("//",$t);
echo("<pre>");
$trans = 0;
foreach($msg as $key=>$val){
if (str_starts_with($val, 'from:')){
$from = str_replace('from:','',$val);
if($from == "Alfa-Bank"){
$trans = 1;
$from = "Альфабанк";
}
if($from == "LEROYMERLIN"){
$trans = 0;
}
}elseif(str_starts_with($val, 'txt:')){
$txt = str_replace('txt:','',$val);
}
}
if($trans) $txt = lat2ru($txt);
echo $from."-> ".$txt."<br>";
//say("Новое СМС - отправитель ".$from.". ".$txt,2);
if($from == "LEROYMERLIN"){
$re = '/Ваш заказ (\d+) будет доставлен (\d+.\d+.\d+), (\d+:\d+)-(\d+:\d+)./su';
$str = $txt; //'Ваш заказ 221097047289 будет доставлен 25.10.22, 08:00-16:00. Отследить:
if(preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0)){
echo "<pre>";
print_r($matches);
include_once(DIR_MODULES . 'todoer/todoer.class.php');
$todo = new todoer();
$tsk = array(
'TITLE' => "Заказ Леруа Мерлин ".$matches[1][0]." из смс",
'DUE' => date('Y-m-d H:i:00', strtotime($matches[2][0].' '.$matches[3][0])), //or comment if IS_NODATE=1
'END_TIME' => date('Y-m-d H:i:00', strtotime($matches[2][0].' '.$matches[4][0])), //or comment if IS_NODATE=1
'NOTES' => $txt,//your notes
// 'BEGIN_CODE' => "say('задача началась!',1);", //code for beginning
// 'DONE_CODE' => "say('задача закончена!',1);", //code for ending
'AUTODONE' => 1, //autoends at end_time and done_code execs
'REMIND_TIME' => date('Y-m-d H:i:00', strtotime($matches[2][0].' '.$matches[3][0]) - 60*60), // напомним за час
'CATEGORY' => "Дела",
// ... and so on
);
echo "<pre>";
print_r($tsk);
$todo->create_new_task($tsk);
//say("Задача добавлена в календарь",2);
}
}
|
microtime
|
$time_start = microtime(1);
usleep(10000);
$time_end = microtime(1);
$time = $time_end - $time_start;
echo "microtime(1) Ничего не делал $time_end - $time_start = $time секунд<br>";
$time_start = getmicrotime();
usleep(10000);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo "getmicrotime() Ничего не делал $time_end - $time_start = $time секунд<br>";
|
mp3_duration
|
require_once 'lib/class.mp3.php';
$mp3 = new mp3();
$mp3->get_mp3(ROOT."cms/sounds/12h.mp3", false, false);
echo $mp3->get_time();
/*
//всё посмотреть
echo "<pre>";
print_r($mp3);
echo "</pre>";
*/
|
nircmd_pause
|
debmes('start measure');
exec("c:\_majordomo\apps\nircmd\nircmd.exe cmdwait 500 exec hide 'c:\_majordomo\apps\noo\nooLiteF.exe' api 0 0 0 10 0 0 0 0 0 0 00000000 0");
//exec("c:\_majordomo\apps\noo\nooLiteF.exe api 0 0 0 10 0 0 0 0 0 0 00000000 0");
//exec("c:\_majordomo\apps\nircmd\nircmd.exe wait 500");
//exec("c:\_majordomo\apps\noo\nooLiteF.exe api 0 0 0 10 2 0 0 0 0 0 00000000 0");
debmes('stop measure');
|
NooTable
|
Print Noo devs as table
echo '|!name| !what | !channel |<br>';
$objects=getObjectsByClass("Noo");
foreach($objects as $obj) {
echo '| '.$obj['TITLE'].' | '.gg($obj['TITLE'].'.name').' | '.gg($obj['TITLE'].'.channel').' |<br>';
}
echo '<br>';
//$objects=getObjectsByProperty('channel');
//print_r($objects);
echo '|!name| !linkedRoom | !nooSwitch | !descr |<br>';
$objects=getObjectsByClass("NooRemotes");
foreach($objects as $obj) {
echo '| '.$obj['TITLE'].' | '.gg($obj['TITLE'].'.linkedRoom').' | '.gg($obj['TITLE'].'.nooSwitch').' |'.$obj->description.'| '.gg($obj['TITLE'].'.Channel').'<br>';
}
echo '<br>';
|
phpmailer
|
/**
* This example shows settings to use when sending via Google's Gmail servers.
*/
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
//date_default_timezone_set('Etc/UTC');
require_once 'lib/PHPMailer/PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
$mail->setLanguage('ru', 'lib/PHPMailer/language/');
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = 'smtp.yandex.com';
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
$mail->CharSet = "UTF-8";
//Username to use for SMTP authentication - use full email address
$mail->Username = gg('Sergey.YaMailAddress');
//Password to use for SMTP authentication
//$mail->Password =gg('Sergey.YaPassword');
$mail->Password =gg('Sergey.YaIMAPpwd');
//Set who the message is to be sent from
$mail->setFrom(gg('Sergey.YaMailAddress'), 'Alice');
//Set an alternative reply-to address
//$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('serge.lesnikov@gmail.com', 'Sergey Lesnikov');
//Set the subject line
$subj='Второй Текст в кодировке UTF';
$mail->Subject = $subj;
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
//$mail->msgHTML(file_get_contents('lib\PHPMailer\examples\index.html'), dirname(__FILE__));
//$body=iconv("UTF-8", "WINDOWS-1251", 'тестовая отправка <b>in bold!</b>');
$body='Проба кодировки';
$mail->Body = $body ;
//Replace the plain text body with one created manually
//$mail->AltBody = 'This is a plain-text message body';
//Attach a file
//$mail->addAttachment('c:/myip.txt');
//send the message, check for errors
if (!$mail->send()) {
echo "Ошибка почты: " . $mail->ErrorInfo;
} else {
echo "Письмо отправлено!";
}
|
phpmorphy
|
$string= "в следующий понедельник в восемь часов вечера сварить пельмени";
echo "Разбор строки - ".$string."<br>";
$string = preg_replace('/[^\w\s]/u', ' ', $string);
$string = preg_replace('|[\s]+|s', ' ', $string);
echo "Разбор строки - ".$string."<br>";
// массив, в котором будут записаны слова
$array_words = array();
// разбиваем строку
// разделителем выступает пробел, табуляция
// и перенос строки
$tok = strtok($string, " \t\n");
// разбиваем строку, пока не кончится предложение
while($tok) {
$array_words[] = $tok;
$tok = strtok(" \t\n");
}
// вывод результата
$i=0; while ($i < count($array_words))
{
$Word=$array_words[$i];
$i++;
require_once ("lib/phpmorphy/common.php");
// задаем настройки для использования модуля
$opts = array(
'storage' => PHPMORPHY_STORAGE_FILE,
'predict_by_suffix' => true,
'predict_by_db' => true,
'graminfo_as_text' => true,
);
// Path to directory where dictionaries located
$dir = 'C:/_majordomo/htdocs/lib/phpmorphy/dicts';
$lang = 'ru_RU';
// Создаем экземпляр phpMorphy
try{
$morphy = new phpMorphy($dir, $lang, $opts);
}
catch(phpMorphy_Exception $e){
die('Error occured while creating phpMorphy instance: ' . PHP_EOL . $e);
}
// получаем слово из шаблона
$Word = mb_strtoupper($Word, 'UTF-8');
$base = $morphy->getBaseForm($Word); // возвращает массив значений
//var_dump($morphy->getAncode($Word));
if(false === ($paradigms = $morphy->findWord($Word))) {
die('Can`t find word');
}
foreach($paradigms->getByPartOfSpeech('Г') as $paradigm) {
$msg= 'ГЛАГОЛ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('С') as $paradigm) {
$msg= 'СУЩЕСТВИТЕЛЬНОЕ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('П') as $paradigm) {
$msg= 'ПРИЛАГАТЕЛЬНОЕ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('МС') as $paradigm) {
$msg= 'МЕСТОИМЕНИЕ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('СОЮЗ') as $paradigm) {
$msg= 'СОЮЗ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('ЧИСЛ') as $paradigm) {
$msg= 'ЧИСЛИТЕЛЬНОЕ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('ПРЕДЛ') as $paradigm) {
$msg= 'ПРЕДЛ - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('Н') as $paradigm) {
$msg= 'Н - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
foreach($paradigms->getByPartOfSpeech('ЧИСЛ-П') as $paradigm) {
$msg= 'ЧИСЛ-П - '. $paradigm->getBaseForm();
echo $msg."<br>";
}
}
|
player_test
|
include_once(DIR_MODULES . 'app_player/app_player.class.php');
$player = new app_player();
$player->play_terminal = 'Zolo'; // Имя терминала
$player->command = 'pl_get'; // Команда
$player->param = '//192.168.1.7/radio/Spokoynoe.m3u'; // Параметр
$player->ajax = TRUE;
$player->intCall = TRUE;
$player->usual($out);
$terminal = array();
if ($player->json['success']) {
$js = $player->json['data'];
print_r($js);
echo('<br>----------------------<br>');
$vol = $js["volume"];
echo ('volume ='.$vol);
echo('<br>----------------------<br>');
echo ($player->json['message']);
} else {
// Если произошла ошибка, выводим ее описание
echo ($player->json['message']);
}
|
read file with check
|
//$file_pointer = "http://majord.zzz.com.ua/gps.txt";
//$rec = file_get_contents($file_pointer);
//echo ($rec);
//readfile($file_pointer);
$url= 'http://majord.zzz.com.ua/gps.txt';
function file_get_contents_from_url($url){
//if (function_exists('curl_init')){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
$data = curl_exec($curl);
curl_close($curl);
//}
return $data;
}
$rec = file_get_contents_from_url($url);
echo ($rec);
// Функция, которая открывает файл, читает его и возвращает
function loadDataFromFile($file)
{
if (!file_exists($file))
throw new Exception("Ошибка: файл $file не существует!");
if (!filesize($file))
throw new Exception("Файл $file пустой!");
// Открываем поток и получаем его дескриптор
$f = fopen($file, "r");
// В переменную $content запишем то, что прочитали из файла
$content = fread($f, filesize ($file));
// Заменяем переносы строки в файле на тег BR. Заменить можно что угодно
//$content = str_replace("\r\n","<br>", $content);
// Закрываем поток
fclose ($f);
// Возвращаем содержимое
return $content;
}
// Файл, с которым работаем
$file = 'http://majord.zzz.com.ua/gps.txt';
// Выводим информацию из файла
try {
echo loadDataFromFile($file);
} catch (Exception $e) {
echo $e->getMessage();
}
|
rssNewsFull_copy
|
if(gg('Kitchen.SomebodyHere')){
$volume=2;
} else {
$volume=0;
}
//$volume=0;//silent
$t=$params['BODY'];
say($params['TITLE'],$volume);
say($t,$volume);
|
rss_sql
|
say('последние новости',1);
$news = SQLSelect('SELECT `TITLE` , `ADDED` FROM `rss_items` ORDER BY `ADDED` DESC LIMIT 0 , 5');
$cnt=Count($news);
For($i=0; $i<$cnt; $i++) {
say($news[$i]['TITLE'],1);
}
|
setBrDimm100
|
cm('nooRelay_4.turnOn');
sleep(1);
sg('nooRelay_4.level',90,0,'setBrDimm100');
|
setBrDimm50
|
cm('nooRelay_4.turnOn');
sleep(1);
sg('nooRelay_4.level',30,0,'setBrDimm50');
|
simple_say
|
debmes('новая запись в логе ошибок Апача!');
|
test onvif
|
https://github.com/KuroNeko-san/ponvif
require_once( "c:\_majordomo\htdocs\lib\class.ponvif.php");
$onvif = new Ponvif();
/*
$result = $onvif->discover();
echo "<pre>";
print_r($result);
*/
$onvif->setUsername('admin');
$onvif->setPassword('admin');
$onvif->setIPAddress('192.168.1.23');
// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above).
$onvif->setMediaUri('http://192.168.1.23:8899/onvif/device_service');
try
{
$onvif->initialize();
$sources = $onvif->getSources();
$profileToken = $sources[0][0]['profiletoken'];
//$mediaUri = $onvif->media_GetStreamUri($profileToken);
//var_dump($mediaUri);
$ptz0 = $onvif->ptz_GetPresets($profileToken);
echo "<pre>";
print_r($ptz0);
}
catch(Exception $e)
{
echo('sorry..');
}
|
test bright
|
tst_br(gg("cam2.snapshot"));
//tst_br(gg("cam4.snapshot"));
function tst_br($img){
$final;
$Y;
$y_hsv;
if(filesize($img)){
$source = imagecreatefromjpeg($img);
imagefilter($source, IMG_FILTER_GRAYSCALE);
$size = getimagesize($img);
//list($width, $height, $type, $attr) = getimagesize($img);
$width = imagesx($source);
$height = imagesy($source);
//echo($imgw.' '. $imgh.' ');
for($y=0; $y<$height; $y++)
{
for($x=0; $x < $width; $x++)
{
$rgb = imagecolorat($source, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$Y = 0.299*$r + 0.587*$g + 0.114*$b + $Y;
$rgb_tot = $rgb + $rgb_tot;
$hsv = rgbToHsv($r,$g,$b);
$y_hsv = $hsv[2] + $y_hsv;
}
}
$result = round($rgb_tot / ($width*$height), 0);
$resultY = round($Y / ($width*$height), 0);
$result_hsv= ($y_hsv / ($width*$height));
$final = round($result / 1000000, 2);
imagedestroy($source);
}
debmes ($img.' rgb='.$final.' Y='.$resultY.' hsv='.$result_hsv);
return;
}
|
test getObject
|
$name ="ThisComputer";
//$time_start = microtime(1);
$start=hrtime(true);
/*
$sqlQuery = "SELECT objects.*
FROM objects
WHERE TITLE = '" . DBSafe($name) . "'";
$rec = SQLSelectOne($sqlQuery);
*/
$f = checkFromCache("MJD:ThisComputer.uptimeText");
//$time_end = microtime(1);
$end=hrtime(true);
//$time = $time_end - $time_start;
$time=$end-$start;
echo($time/1e+6);
echo("<br>");
//$time_start1 = microtime(1);
$start1=hrtime(true);
//$f = checkFromCache("MJD:ThisComputer.uptimeText");
$sqlQuery = "SELECT objects.*
FROM objects
WHERE TITLE = '" . DBSafe($name) . "'";
$rec = SQLSelectOne($sqlQuery);
$end1=hrtime(true);
//$time_end1 = microtime(1);
//$time1 = $time_end1 - $time_start1;
$time1=$end1-$start1;
echo($time1/1e+6);
//echo($time1);
|
test long job
|
//saveToCache("VAR:test",false);
$cached_value = checkfromcache("VAR:test");
if ($cached_value != false) {
echo "not false";
}else{
echo "false";
}
/*
$start = time() + 60;
debmes("10 s delay");
AddScheduledJob('longlongTask','debmes("start longlongTask");rs("BackUpPHP");',$start);
AddScheduledjob('s10_j1','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j1");',$start);
AddScheduledjob('s10_j2','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j2");',$start);
AddScheduledjob('s10_j3','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j3");',$start);
AddScheduledjob('s10_j4','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j4");',$start);
AddScheduledjob('s10_j5','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j5");',$start);
AddScheduledjob('s10_j6','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j6");',$start);
AddScheduledjob('s10_j7','sleep(10);debmes(date("H:i:s",'.($start+10).')." s10_j7");',$start);
*/
/*
debmes("10 s delay");
setTimeout('s10_j1','DebMes(date("H:i:s",'.(time()).')." j1");sleep(10);DebMes(date("H:i:s",'.(time()).')." s10_j1");',10);
setTimeout('s10_j2','debmes(date("H:i:s",'.(time()).')." j2");sleep(10);DebMes(date("H:i:s",'.(time()).')." s10_j2");',10);
setTimeout('s10_j3','debmes(date("H:i:s",'.(time()+10).')." s10_j3");',10);
setTimeout('s10_j4','debmes(date("H:i:s",'.(time()+10).')." s10_j4");',10);
setTimeout('s10_j5','debmes(date("H:i:s",'.(time()+10).')." s10_j5");',10);
setTimeout('s10_j6','debmes(date("H:i:s",'.(time()+10).')." s10_j6");',10);
setTimeout('s10_j7','debmes(date("H:i:s",'.(time()+10).')." s10_j7");',10);
*/
|
test objects
|
$Thermostats=getObjectsByClass('NooThermostats');
echo('getObjectsByClass:<br>');
echo'<pre>';
print_r($Thermostats);
echo'<pre>';
foreach($Thermostats as $ObjTherm) {
echo('$ObjTherm:<br>');
echo'<pre>';
print_r($ObjTherm);
echo'<pre>';
echo('getObject:<br>');
echo'<pre>';
print_r(getObject($ObjTherm['TITLE']));
echo'<pre>';
$ThermCurrTemp=getGlobal($ObjTherm['TITLE'] . '.temp');
echo($ThermCurrTemp.'<br>');
echo'-----------------------------<br>';
$ThermCurrTemp=getObject($ObjTherm['TITLE'])->getProperty('temp');
echo($ThermCurrTemp.'<br>');
}
|
test post
|
$sURL = "http://192.168.1.8:8765"; // URL-адрес
//$sURL = "http://thacthab.herokuapp.com/broadcast";
//$sPD = "?login=xor2020&pass=lsv23031964&title=test&message={'say':'Я тут! Я тут! Я тут лежу!'}";
$sPD = "?login=xor2020&pass=lsv23031964&title=test&message={'findme':'привет'}";
echo(geturl($sURL.$sPD,0));
|
test regexp
|
$re = '/BEGIN:VEVENT\r\n(.*?)\r\nEND:VEVENT/ums';
$str = 'BEGIN:VCALENDAR
PRODID:-//SomeExampleStuff//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20140403T091024Z
LAST-MODIFIED:20140403T091044Z
DTSTAMP:20140416T091044Z
UID:ExampleUID1
SUMMARY:ExampleEvent1
DTSTART;TZID=Europe/Berlin:20140418T090000
DTEND;TZID=Europe/Berlin:20140418T100000
LOCATION:ExamplePlace1
DESCRIPTION:ExampleDescription1
END:VEVENT
END:VCALENDAR';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
echo "<pre>";
print_r($matches);
|
test0timer
|
debmes('start test 0 timer');
settimeout('ttt','debmes("stop test 0 timer ");',0.001);
|
testEmail
|
|
testGeoYandex
|
function Getgeocode($lon, $lat) {
$data_file="http://geocode-maps.yandex.ru/1.x/?geocode=E".$lon.",N".$lat;
$xml = simplexml_load_file($data_file);
$res=$xml->{'GeoObjectCollection'}->{'featureMember'}[0]->{'GeoObject'}->{'metaDataProperty'}->{'GeocoderMetaData'}->{'AddressDetails'}->{'Country'}->{'AddressLine'};
return $res;
}
echo Getgeocode(37.7841557,55.4735833);
|
testLogics
|
/*$p1 = false;
$p2 = 'C';
$p3 = 0;
echo ($p3 == 'C');
echo (!$p1 && $p2 == 'C') ;
echo (!$p1 && $p3 == 'C') ;
echo (($p1 == false) && ($p2 == 'C')) ;
echo (($p1 == false) && ($p3 == 'C')) ;
*/
// --------------------
// foo() никогда не буде вызвана, так как эти операторы являются шунтирующими (short-circuit)
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// --------------------
// "||" имеет больший приоритет, чем "or"
// Результат выражения (false || true) присваивается переменной $e
// Действует как: ($e = (false || true))
$e = false || true;
// Константа false присваивается $f, а затем значение true игнорируется
// Действует как: (($f = false) or true)
$f = false or true;
var_dump($e, $f);
// --------------------
// "&&" имеет больший приоритет, чем "and"
echo("<br>");
// Результат выражения (true && false) присваивается переменной $g
// Действует как: ($g = (true && false))
$g = true && false;
// Константа true присваивается $h, а затем значение false игнорируется
// Действует как: (($h = true) and false)
$h = true and false;
var_dump($g, $h);
|
testRealFeel
|
https://www.wpc.ncep.noaa.gov/html/heatindex_equation.shtml
$w = 0;
$t = -4;
$h = 84;
$w=$w*3.6/1.609;//m/s -> mph
$tF = $t *1.8+32; // перевод температуры в Farenheit
if ($t <= 10 && $w>=3){ //1.34m/s=3mph
// Считаем фактор WindChild
$_f = 35.74+(0.6215*$tF)-(35.75*pow($w,0.16))+((0.4275*$tF)*pow($w,0.16));
}else{
if($t>20 && $t<47 && $h<81){
$_f = 0.363445176+0.988622465*$tF+4.777114035*$h-0.114037667*$tF*$h-8.50208*$tF*$tF/10000.-2.0716198*$h*$h/100.+6.87678*$tF*$tF*$h/10000.+2.74954*$h*$h*$tF/10000.;
}else{$_f=$tF;}
}
// переводим в цельсии
$rf = round(($_f-32)/1.8);
echo 't= '.$t.'C ='.$tF.'F h= '.$h.'% w='.round($w,2).' mph --> RealFeel t='.$rf.' C ='.$_f.' F';
|
testSayImage
|
// $full_path = "192.168.1.7\cms\images\cam4.jpg";
//$full_path = "c:\_majordomo\htdocs\cms\images\cam4.jpg";
$full_path = ROOT."cms/images/cam4.jpg";
$message = 'Снимок';
//$full_path = "c:/tele/cam2.jpg";
//$full_path = "192.168.1.7\cms\images\cam4.jpg";
$message .= "\n"."image:".$full_path; // добавляем картинку к сообщению
say($message,2); // делаем уведомление
|
testSQL
|
/*$sql='DROP TABLE IF EXISTS `meteoinfo1`';
SQLExec($sql);
$sql='CREATE TABLE IF NOT EXISTS `meteoinfo1` ('
.'`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,'
.'`ADDED` datetime NOT NULL,'
.'`DATE_FORECAST` datetime NOT NULL,'
.'`TYPE` varchar(20) NOT NULL,'
.'`VALUE` varchar(32) DEFAULT NULL,'
.'UNIQUE KEY `ID` (`ID`))';
SQLExec($sql);
*/
$recs = SQLSelect("SELECT ID FROM myconditions WHERE LINKED_OBJECT LIKE 'DarknessMode' AND LINKED_PROPERTY LIKE 'active' AND ACTIVE=1");
print_r($recs);
|
test_address
|
https://connect.smartliving.ru/profile/1502/blog13.html
$lat=55.473534;
$lng=37.784524;
$URL = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lng&language=ru";
echo $URL;
$data = getUrl( $URL ,0);
$json = json_decode( $data );
$addr = $json->results[0]->formatted_address;
echo $addr;
|
test_autolink
|
if(gg("ThisComputer.DateNow") ){
debmes("happy ny!");
}else{
debmes("script test_autolink fire!");
}
|
test_avg
|
$pvalue = getHistoryValueId("Outside.Temperature");
$tmr_now = time();
//$tmr_now = strtotime('2019-2-21 08:00:00');
$tmr_start = $tmr_now-24*60*60;
//$tmr_start = strtotime($start_time);
echo(date('Y-m-d H:i:s', $tmr_now).'<br>');
echo(date('Y-m-d H:i:s', $tmr_start).'<br>');
$tmr_mem = 0; //накопитель времени в секундах
$ss = 0;
// Получить количество записей за нужный период времени
$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID=".$pvalue." and not value is null AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");
// Взять это количество записей +1
$arr_s = SQLSelect("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." and not value is null ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));
//print_r($arr_s);
$tmr2 = $tmr_now;
// Переберем весь массив
foreach($arr_s as $s) {
$tmr1 = $tmr2;
$tmr2 = strtotime($s['ADDED']);
// Ограничить началом
if ($tmr2<$tmr_start) { $tmr2=$tmr_start; }
// Двигаясь вниз по массиву времени складывать отрезки если режим включен
//echo(date('H:i:s', $tmr1).' - '.date('H:i:s', $tmr2).' = '.($tmr1 - $tmr2).'c --- t='.$s['VALUE'].'<br>');
$tmr_mem = $tmr_mem + $tmr1 - $tmr2;
$ss = $ss + $s['VALUE']*($tmr1 - $tmr2);
}
$avg = $ss / ($tmr_now - $tmr_start) ;//или /$tmr_mem
echo(($tmr_now - $tmr_start).' avg='.$avg.'<br>');
echo('getHistoryAvg='.getHistoryAvg("Outside.Temperature", strtotime("-1 day")));
|
test_cal_ierarhy
|
$recs = SQLSelectone( "SELECT sum(IS_DONE)*100/count(ID) PR FROM calendar_events WHERE PARENT_ID=20681");
echo($recs['PR']);
$total = count($recs);
if ($total) {
for($i=0;$i<$total;$i++) {
echo('<pre>');
print_r($recs);
echo('</pre>');
}
}
|
test_cam
|
$lines=file(gg('cam1.snapshotURL'));
if(!$lines) {
DebMes(' - Не удалось получить снимок');
return;
}
// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
//echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
if (preg_match('/img src="(.+?)"/is',$line,$m)) {
$snapshotPreviewURL=$m[1];
$snapshotPreviewURL=str_replace('../../..','http://192.168.1.100',$snapshotPreviewURL);
//echo $snapshotPreviewURL. "<br />\n";
$fileto = './cms/images/snapshots/cam1_'.date('Y-m-d-H-i').'.jpg';
if(copy($snapshotPreviewURL,$fileto)){
echo $fileto. "<br />\n";;
}
}
}
|
test_chart_print
|
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(37, 350, 1000);
print('Путь к файлу: ' . $chartPNG . '<br><br>');
print('<img src="' . $chartPNG . '">');
rs('sendTelegram',array('img'=>DOC_ROOT.$chartPNG));
|
test_clearCache
|
function clearCacheDataMy($keys = false) {
if($keys){
debmes("delete from cached_values where KEYWORD like '".DBSafe($keys)."%'");
}else{
debmes("SQLTruncateTable('cached_values');");
}
}
clearCacheDataMy();
|
test_Cron_syntax
|
$cron ='*/15 * 11-22 * *';
$timestamp = parse_cr($cron,time()+60);
echo '<br>';
echo( date('d-m-y H:i:s').' '.$cron.' cron ='. date('d-m-y H:i:00',$timestamp));
function parse_cr($_cron_string,$_after_timestamp=null){
$cron = preg_split("/[\s]+/i",trim($_cron_string));
$start = empty($_after_timestamp)?time():$_after_timestamp;
$date = array( 'minutes' =>_parseCronNumbers1($cron[0],0,59),
'hours' =>_parseCronNumbers1($cron[1],0,23),
'dom' =>_parseCronNumbers1($cron[2],1,31),
'month' =>_parseCronNumbers1($cron[3],1,12),
'dow' =>_parseCronNumbers1($cron[4],0,6),
);
//echo '<pre>';
//print_r($date);
// limited to time()+366 - no need to check more than 1year ahead
for($i=0;$i<=60*60*24*366;$i+=60){
if( in_array(intval(date('j',$start+$i)),$date['dom']) &&
in_array(intval(date('n',$start+$i)),$date['month']) &&
in_array(intval(date('w',$start+$i)),$date['dow']) &&
in_array(intval(date('G',$start+$i)),$date['hours']) &&
in_array(intval(date('i',$start+$i)),$date['minutes'])
){
return $start+$i;
}
}
return null;
}
function _parseCronNumbers1($s,$min,$max){
$result = array();
$v = explode(',',$s);
foreach($v as $vv){
$vvv = explode('/',$vv);
$step = empty($vvv[1])?1:$vvv[1];
$vvvv = explode('-',$vvv[0]);
$_min = count($vvvv)==2?$vvvv[0]:($vvv[0]=='*'?$min:$vvv[0]);
$_max = count($vvvv)==2?$vvvv[1]:($vvv[0]=='*'?$max:$vvv[0]);
for($i=$_min;$i<=$_max;$i+=$step){
$result[$i]=intval($i);
}
}
ksort($result);
echo '<pre>';
print_r($result);
return $result;
}
|
test_date_parse
|
$dt='2015-11-05 21:40:16';
$arr_due = date_parse($dt);
//print_r($arr_due);
echo($dt.'<br>');
echo($arr_due['year'].'<br>');
echo($arr_due['month'].'<br>');
echo($arr_due['day'].'<br>');
echo($arr_due['hour'].'<br>');
echo($arr_due['minute'].'<br>');
|
test_eval
|
echo('--------------------<br>');
echo '<pre>';
//print_r($matches);
$object = 'DarknessMode';
$property ='active';
$value =0;
$table = 'myconditions';
$recs = SQLSelect("SELECT * FROM $table WHERE LINKED_OBJECT LIKE '".DBSafe($object)."' AND LINKED_PROPERTY LIKE '".DBSafe($property)."' AND ACTIVE=1");
$total = count($recs);
if ($total) {
for($i=0;$i<$total;$i++) {
$id = $recs[$i]['ID'];
$title = $recs[$i]['TITLE'];
$op = $recs[$i]['OPERAND'];
$check = $recs[$i]['CHECK_PART'];
$check2 = $recs[$i]['CHECK_PART2'];
if (is_integer(strpos($check, "%"))) { //for [=='%ThisComputer.timeNow%']
$check = processTitle($check);
}
if (is_integer(strpos($check2, "%"))) { //for [=='%ThisComputer.timeNow%']
$check2 = processTitle($check2);
}
if($op == "=" || $op == "=="){$ch = $value." == ".$check;$typeOp = 0;
}elseif($op == ">"){ $ch = $value." > ".$check;$typeOp = 0;
}elseif($op == "<"){ $ch = $value." < ".$check;$typeOp = 0;
}elseif($op == ">="){$ch = $value." >= ".$check;$typeOp = 0;
}elseif($op == "<="){$ch = $value." <= ".$check;$typeOp = 0;
}elseif($op == "betw"){$ch = $value." >= ".$check." && ".$value." <= ".$check2;$typeOp = 0;
}elseif($op == "!betw"){$ch = $value." < ".$check." || ".$value." > ".$check2;$typeOp = 0;
}elseif($op == "renew"){$ch = 'renew';$res = 1;$typeOp = 1;
}elseif($op == "php"){$ch = $check; $typeOp = 2;}
echo('check condition ['.$ch. '] for ['.$title.'] typeOp='.$typeOp.'<br>');
if($typeOp == 0){
$chk = "\$res = (".$ch.")?1:0;"; //only 1/0
debmes('eval ('.$chk. ') for ['.$title.']'.'<br>');
$res = 0;
try {
$success = eval($chk);
} catch(Exception $e){
echo('Error: exception '.get_class($e).', '.$e->getMessage().'<br>');
}
}
if($typeOp == 2){ //php code: if($a>$b){$res = 1;} else {$res =0;};
//$chk = "\$res = (".$ch.")?1:0;"; //only 1/0
$res = 0;
try {
$success = eval($ch);
} catch(Exception $e){
echo('Error: exception '.get_class($e).', '.$e->getMessage().'.'.'<br>');
}
}
echo('res='.$res.' '.$recs[$i]['VALUE'].'<br>');
$old_result = $recs[$i]['VALUE'];
if($old_result<>$res || $typeOp == 1){//если значение условия не изменилось, ничего не делаем. кроме renew
//set Condition's value and search linked Rules and calculate
$recs[$i]['VALUE'] = $res;
SQLUpdate($table, $recs[$i]);
//$this->findRulesByCond($title);
}
}
}
echo('--------------------<br>');
echo($str.'<br>');
|
test_exec
|
echo exec('whoami');
exec("c:/_majordomo/apps/noo/nooLiteF.exe api 0 0 0 10 0 0 0 0 0 0 00000000 0");
|
test_export_tab
|
Экспорт из запроса в tab/csv файл
$file = 'data_'.date('Y_m_d_H_i_s').'.tab';
$sql = "SELECT p.`ADDED`, DATE_FORMAT( p.`ADDED`, '%H:%i:%s' ) dt,p.`VALUE`,n.property_name "
. "FROM `phistory` p "
. "join vw_clobjpr n on n.`VALUE_ID`=p.`VALUE_ID` "
. "WHERE `ADDED`>'2021-12-30' and n.value_id='11442' "
. "INTO OUTFILE 'C:/tele/".$file."' "
. "FIELDS TERMINATED BY '\\t' "
. "LINES TERMINATED BY '\\r\\n';";
echo($sql);
$a = sqlexec($sql);
echo($a);
|
test_fann
|
$num_input = 2;
$num_output = 1;
$num_layers = 3;
$num_neurons_hidden = 3;
$desired_error = 0.001;
$max_epochs = 500000;
$epochs_between_reports = 1000;
$ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);
if ($ann) {
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
$filename = "z:/xor.data";
if (fann_train_on_file($ann, $filename, $max_epochs, $epochs_between_reports, $desired_error))
fann_save($ann, "z:/xor_float.net");
fann_destroy($ann);
}
|
test_getobj
|
$objects = getObjectsByClass("motion_sensors");
print_r($objects);
echo('<br>');
foreach($objects as $obj) {
echo($obj['TITLE'].'<br>');
echo('='.$obj->getProperty('value').'<br>');
if ($obj->getProperty('value')){
echo('Yes!<br>');
}
}
|
test_mboard_api
|
/*
/api/module/mboard_pro/openpanel/dom
/api/module/mboard_pro/viewnotify?text=12345&icon=fas fa-bolt&color=yellow
/api/module/mboard_pro/viewinfo?title=title&text=12345
*/
//$var = urlencode("приветик, это тестовое сообщение!...");
$title = "Title";
//$text = getGlobal("List.text");
$text = "first line".PHP_EOL."second line";
//$text = urlencode( $text);
//geturl("http://192.168.1.7/api/module/mboard_pro/viewinfo?title=$title&text=$text",0);
//echo(geturl("http://192.168.1.7/api/module/mboard_pro/viewinfo?title=$title&text=$text",0));
$object_value='Cabinet.Temperature';
callapi("/api/module/mboard_pro/viewHistory?object_value=$object_value&title=$title&color=yellow");
//echo(geturl("192.168.1.7/api/module/mboard_pro/viewHistory?object_value=$object_value&title=$title&color=yellow",0));
|
test_out
|
//test
$rec = '1,2,3,4,6';
$dd = time();
$due = date("N", $dd); //переведём в формат пн=1...вс=7
//$due = ($due == 0) ? 6 : $due-1;
$week_days = array();
if ($rec!=='') {$week_days = explode(',', $rec);}
echo '<pre>';
print_r($week_days);
echo '<pre>';
for($i = 0; $i < 7;$i++){
$dd = $dd + 24*60*60; //след. дата
$due = $due + 1;
if($due > 7) $due = 1;
if(in_array($due, $week_days)) { //первый следующий запуск
$next = date('Y-m-d N l', $dd);
break;
}
}
echo '<pre>';
echo ($next);
echo '<pre>';
|
test_period
|
/*
//возвращает долю времени на интервале, где истинно сравнение $objprop со значением $value по правилу $oper
//$oper{'=','<>','>','>=','<','<=','betw','!betw'};
//ex gg('obj.prop') == 1 / gg('obj.prop') betw -1,1/ gg('obj.prop') !betw 10,15
//return t(true part)/t(whole interval)
*/
function getHistoryPart($objprop, $start_time, $stop_time = 0, $oper, $value = '1', $value2 = '0') {
/*
//test section
$objprop = 'Noorelay_1.status';
$value = 0.5; // какое значение считаем
$value2 = 1.1;
$oper = 'betw';
$start_time = time()-60*60*24+1;// strtotime(date("Y-m-d").' 00:00:00');
$stop_time = 0;
//end test section
*/
if($start_time <= 0) $start_time = (time() + $start_time);
if($stop_time <= 0) $stop_time = (time() + $stop_time);
if(!$oper) $oper = '=';
$pvalue = getHistoryValueId($objprop);
if(defined('SEPARATE_HISTORY_STORAGE') && SEPARATE_HISTORY_STORAGE == 1) {
$table_name = createHistoryTable($pvalue);
} else {
$table_name = 'phistory';
}
// Получить количество записей за нужный период времени
$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM $table_name ".
"WHERE VALUE_ID=".$pvalue." and not value is null ".
"AND ADDED between '".date('Y-m-d H:i:s', $start_time)."' AND '".date('Y-m-d H:i:s', $stop_time)."'");
// Взять это количество записей +1
$arr_s = SQLSelect("SELECT * FROM $table_name WHERE VALUE_ID=".$pvalue." and not value is null ".
" AND ADDED<='".date('Y-m-d H:i:s', $stop_time)."' ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));
$tmr2 = $stop_time;
// Переберем весь массив
foreach($arr_s as $s) {
$tmr1 = $tmr2;
$tmr2 = strtotime($s['ADDED']);
// Ограничить началом
if($tmr2<$start_time) $tmr2 = $start_time;
// Двигаясь вниз по массиву времени складывать отрезки
//echo(date('H:i:s', $tmr1).' - '.date('H:i:s', $tmr2).' = '.($tmr1 - $tmr2).'c t='.$s['VALUE'].'<br>');
if($oper == '=' || $oper == '=='){
if($s['VALUE']==$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '>'){
if($s['VALUE']>$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '<'){
if($s['VALUE']<$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '>='){
if($s['VALUE']>=$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '<='){
if($s['VALUE']<=$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '<>' || $oper == '!='){
if($s['VALUE']<>$value) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == 'betw'){
if($s['VALUE']>=$value && $s['VALUE']<=$value2) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}elseif($oper == '!betw'){
if($s['VALUE']<$value || $s['VALUE']>$value2) $tmr_mem = $tmr_mem + $tmr1 - $tmr2;
}
}//foreach
$all = $stop_time - $start_time; //всего времени с начала интервала до конца
/*$proc = ($tmr_mem/$all)*100; //%%
echo('part = '.$tmr_mem.' sec of value '.$oper.' '.$value.'<br>') ;
echo('start = '.date("Y-m-d H:i:s",$start_time).'<br>') ;
echo('stop = '.date("Y-m-d H:i:s",$stop_time).'<br>') ;
echo('all = '.$all.' sec<br>');
echo('proc = '.$proc);*/
return $tmr_mem/$all;
}
echo(getHistoryPart('Noorelay_1.status',-60*60*24+1,0,'=',1));
|
test_redis
|
//echo phpinfo();
$host = '127.0.0.1';
$port = 6500;
$user = 'username';
$pwd = 'password1234';
$key = 'the_stored_key';
/*
$redis = new Redis();
if ($redis->connect($host, $port) == false) {
die($redis->getLastError());
}
// if ($redis->auth($pwd) == false) {
// die($redis->getLastError());
// }
if ($redis->set($key, 'this is a test string. '.rand(100, 10000)) == false) {
die($redis->getLastError());
}
$value = $redis->get($key);
echo '<hr/>get data from Redis: '.$key.' = '.$value;
*/
$redis = new Redis();
$redis->connect($host,$port);
//$cycles = $redis->keys('MJD:ThisComputer.cycle*Run');
//$redis->set("test","test");
//$redis->flushDB();
$cycles = $redis->keys('*');
echo('<pre>');
print_r($cycles); // nothing here
echo('<pre>');
echo('--------->');
echo('<---------');
/*
$total = count($cycles);
for ($i = 0; $i < $total; $i++) {
$value = $redis->get($cycles[$i]);//команда
echo '<hr/>get data from Redis: '.$cycles[$i].' = '.$value;
echo '<hr/>get data from checkFromCache:= '.checkFromCache($cycles[$i]);
}
echo '<hr/>get data from checkFromCache:= '.checkFromCache('MJD:msgAgenda.text');
*/
|
test_table
|
DebMes(json_encode($params));
|
test_websockets
|
$tst = postToWebSocket('test', 'test');
var_dump($tst);
echo date('Y-m-d H:i:s') .' >'. $tst.'< ';
/*
global $websockets_script_started;
if ($websockets_script_started) {
echo date('Y-m-d H:i:s') . " websockets_script_started\n";
}
require_once ROOT . 'lib/websockets/client/lib/class.websocket_client.php';
$wsClient = new WebsocketClient;
if (!(@$wsClient->connect('127.0.0.1', WEBSOCKETS_PORT, '/majordomo'))) {
$wsClient = false;
echo date('Y-m-d H:i:s') . " Failed to connect to websocket\n";
}else{
echo date('Y-m-d H:i:s') . " Connect to websocket!\n";
}
*/
echo('WSClientsTotal - '.gg('ThisComputer.WSClientsTotal'));
|
tst_noo_redis
|
$cell = 4;
$id ="00005B59";
$redis = new Redis();
$redis->connect(USE_REDIS);
$ooo = $redis->get("NOOD:".$cell.".".$id);
$redis->close();
echo($ooo."<br>");
$oo = explode("/",$ooo);
$o = $oo[0];
$otype = $oo[1];//есть в свойствах объекта
$onote = $oo[2];//есть в свойствах объекта
echo($o." ".$otype." ".$onote);
|
tst_safe1
|
debmes('tst_safe1 start!');
sleep(10);
debmes('tst_safe1 finish!');
|
tst_safe2
|
debmes('tst_safe2 start!');
sleep(10);
debmes('tst_safe2 finish!');
|
wiki_api_2
|
https://habr.com/ru/post/104480/
$zap = $params['zapros'];
$pages_data = get_wiki_url($zap);
//$pages_data = get_wiki_url("'Леон' (фильм)");
foreach ($pages_data as $data)
{
//echo (string)$data->Text."<br><hr>";
// echo (string)$data->Description."<br>";
$otvet = (string)$data->Description;
//избавимся от ударений
$otvet = iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet = iconv("CP1251","UTF-8",$otvet);
//избавимся от скобок
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
echo $otvet."<br>";
}
|
word2number
|
$txt = 'температура на кухне двадцать три с половиной';
$replace = array();
for ($x = 30; $x > 3; $x--){
$replace[mynum2str($x,'','','',0)] = $x;
}
//$txt1 = str_replace(array_keys($replace),array_values($replace),$txt);
//$txt1 = str_replace(array(' градуса',' градусов',' градус'),'',$txt1);
$txt = str_replace(' ', ' ', $txt);
$replace[' с половиной'] = '.5';
$txt1 = strtr($txt, $replace);
$txt1 = strtr($txt1,array(' градуса'=>'',' градусов'=>'',' градус'=>''));
echo $txt1."<br>";
//echo str_replace(' с половиной','.5',$txt1);
|
_google_loc
|
$cookie="c:/_majordomo/htdocs/cookies.txt";
$ch = curl_init();
//$ch = curl_init('https://www.google.com/maps/preview/locationsharing/read?authuser=0&hl=ru&gl=ru&pb=');
curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/maps/preview/locationsharing/read?authuser=0&hl=ru&gl=ru&pb=');
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
foreach($info as $k=>$v){
if(is_array($k) or is_array($v)){
echo('----- '.'<br>');
echo($k.' '.$v .'<br>');
print_r($v);
print_r($k);
}else{
echo($k.' '.$v .'<br>');
}
}
echo $response;
|
_recs
|
$table = 'myrules';
$recs = SQLSelect("SELECT * FROM $table WHERE RULE_TEXT LIKE '%[Темно]%' AND ACTIVE=1");
$total = count($recs);
if ($total) {
for($i=0;$i<$total;$i++) {
procRule($recs[$i]);
}
}
function procRule($rule){
//получим значения условий, вычислим правило
echo ('<pre>');
print_r($rule);
$rule_str = $rule['RULE_TXT'];
$re = "/@[^@]*@/";
preg_match_all($re, $rule_str, $matches);
$total = count($matches[0]);
if($total>0){
for($i=0;$i<$total;$i++) {
$rr = str_replace('@','',$matches[0][$i]);
$rr = str_replace('CON','',$rr);
$rc = SQLSelectOne("SELECT * FROM myconditions WHERE id=".(int)$rr);
$rule_str = str_replace($matches[0][$i],"'".$rc['VALUE']."'",$rule_str);
}
echo($rule_str.'<br>');
$chk = "\$res = (".$rule_str.")?1:0;"; //only 1/0
$res = 0;
try {
$success = eval($chk);
} catch(Exception $e){
echo('Error: exception '.get_class($e).', '.$e->getMessage().'<br>');
}
}
echo('res='.$res.'<br>');
$rule['VALUE'] = $res;
// SQLUpdate('myrules', $rule);
}
|
frostCalc
|
if (date('G')< 20) {return;} //Расчет заморозков возможен только после 21 часа
$objects=getObjectsByClass("Weather"); //имя класса
foreach($objects as $obj) {
sg($obj['TITLE'].".frost",'-');
$t13 = gg($obj['TITLE'].".Temp13h"); // Считываем значение температуры в 13 часов дня
$t21 = gg($obj['TITLE'].".Temp21h"); // Считываем значение температуры в 21 час вечера
if ($t13 == "" or $t21 == "") {return;} //Недостаточно данных для расчета заморозков
$z = "0";
$x = $t13 - $t21;
if ( $t21 >= $t13 ) {return;} //Расчет заморозков невозможен. Температура растет
if ( $t21 < 0 ) {return;} //Расчет заморозков невозможен. Температура ниже нуля
if ( ($t21 < 11) && ($x < 11) )
{
$t_graph = array(
0 => array(0.375, 11, 0),
1 => array(0.391, 8.7, 10),
2 => array(0.382, 6.7, 20),
3 => array(0.382, 4.7, 40),
4 => array(0.391, 2.7, 60),
5 => array(0.4, 1.6, 80));
$z = "100";
for ( $i = 0; $i < count($t_graph); $i++ )
{
$y1 = $t_graph[$i][0] * $x + $t_graph[$i][1];
if ( $t21 > $y1)
{
$z = $t_graph[$i][2];
break;
}
}
}
//$frost="Вероятность заморозков: ";
//$frost.=$z;
// sg($obj['TITLE'].".frost",$frost);
sg($obj['TITLE'].".frost",$z);
}
|
getSceneImage
|
// /objects/?script=getSceneImage&scene=Погода
if($params['scene'] == "Погода") {
$img = DOC_ROOT.'\cms\scenes\backgrounds\fon.jpeg';
if (file_exists($img)) {
header("Content-type: image/jpeg");
readfile($img);
}
}
|
get_meteoinfo
|
Текущая погода meteoinfo
//Для разных пунктов может быть разный набор полей -- картинки и описания может не быть
//debmes('get_meteoinfo - start');
$lines = file('http://meteoinfo.ru/pogoda/russia/moscow-area/domodedowo');
if(!$lines) {
DebMes('get_meteoinfo - Не удалось прочитать файл с фактом с meteoinfo.ru');
return;
}
// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
//echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
$temp = strip_tags($line);
$temp = $line;
$pos = mb_strpos( $temp,"Прогноз погоды");
if(!$pos === false){
$mystr = mb_substr($line,$pos,3000);
//break;
}
}
//echo('<br>------------------<br>');
$pos = mb_strpos( $mystr,"<table");
$pos1 = mb_strpos( $mystr,"</table>");
$mystr = mb_substr($mystr,$pos,$pos1-$pos+8);
//echo($mystr);
//echo('<br>------------------<br>');
$re = '/<td.*?>(.*?)<\/td>/';
preg_match_all($re, $mystr, $matches, PREG_SET_ORDER, 0);
/*
// Print the entire match result
echo('<pre>');
print_r($matches);
echo('<pre>');
*/
$fl = 0;
foreach($matches as $k=>$cell){
//echo ($cell[1].'<br>');
switch ($fl){
case 1:
$temp = (float)$cell[1];
break;
case 2:
$humidity = (float)$cell[1];
break;
case 3:
$windgust = $cell[1];
break;
case 4:
$winddir = trim($cell[1]);
break;
case 5:
$windspeed = (float) $cell[1];
break;
case 6:
$clouds = (float)$cell[1];
break;
case 7:
$rain = trim($cell[1]);
break;
case 10:
//<img src="/images/ico/2d_s.png">
//https://meteoinfo.ru/images/ico/2d_s.png
//c:\_majordomo\htdocs\cms\cached\meteoinfo\2d_s.png
$DT = explode('"',$cell[1]);
$path = $DT[1];
$fil = explode("/",$path);
$img = $fil[3];
if(!file_exists(DOC_ROOT."/cms/cached/meteoinfo/".$img)){
@copy("https://meteoinfo.ru".$path,DOC_ROOT."/cms/cached/meteoinfo/".$img);
}
break;
case 11:
$metcast = trim($cell[1]);
//echo("metcast=".$metcast);
break;
}
$fl=0;
//time
$pos = strpos( $cell[1],'(время м');
if($pos!== false){
$cell[1] = str_replace(" (время местное)","",$cell[1]);
$DT = explode(",",$cell[1]);
$t_update = $DT[1];
$dat_update = $DT[0];
sg("minfo.day_txt",trim($dat_update));
sg("minfo.hour",trim($t_update));
}
$pos = mb_strpos( $cell[1],'Температура воздуха');
if($pos !== false){
$fl=1;
}
$pos = mb_strpos( $cell[1],'Относительная влажность');
if($pos !== false){
$fl=2;
}
$pos = mb_strpos( $cell[1],'Порывы');
if($pos !== false){
$fl=3;
}
$pos= mb_strpos( $cell[1],'Направление ветра');
if( $pos !==false){
$fl=4;
}
$pos = mb_stripos( $cell[1],'скорость');
if($pos!==false){
$fl=5;
}
$pos= mb_strpos( $cell[1],'Балл общей облачности');
if($pos!==false){
$fl=6;
}
$pos= mb_strpos( $cell[1],'Осадки за 12 часов');
if($pos!==false){
$fl=7;
}
if($cell[1] == ''){
$fl = 10;
}
$pos = strpos($cell[1], "img src");
if($pos!== false){
$fl = 11;
}
}
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)) 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));
if(isset($windgust)) sg("minfo.WindGust",trim($windgust));
$pos = mb_stripos($metcast, "дожд");
if ($pos === false) {
$perc = 0;
} else {
$perc = 1;
}
$pos = mb_stripos($metcast, "снег");
if ($pos === false) {
$perc1 = 0;
} else {
$perc1 = 1;
}
sg("minfo.Rain",max($perc,$perc1));
$cast = 'Погода '.trim($dat_update).' на '.trim($t_update).'.';
if($img){
$cast .= "<img src='/cms/cached/meteoinfo/".$img."'>";
}
$cast = $cast.trim($metcast).'.';
$cast .= max($perc,$perc1)?" Осадки!":"";
$cast = $cast.' Температура за окном '.trim($temp).' °C.';
$rf = myRealFeel($temp,$humidity,$windspeed);
$cast = $cast.' Ощущается как '.$rf.' °C.';
$cast=$cast.' Относительная влажность '.trim($humidity).' %.';
if($windspeed>0){
$cast .= ' Ветер '.trim($winddir).'. Скорость '.trim($windspeed).' м в секунду.';
}
$cast=$cast.' Облачность '.($clouds*10).' %.';
if($rain>0){
$cast=$cast.' Осадки за 12 часов '.trim($rain).' мм.';
}
echo($cast);
$cast = str_replace('..','.',$cast);
sg('minfo.metcast',$cast);
//debmes('get_meteoinfo OK');
|
get_meteoinfo_forecast
|
получим прогноз в таблицу meteoinfo
//debmes('get_meteoinfo_forecast start');
//$lines=file('http://old.meteoinfo.ru/forecasts5000/russia/moscow-area/domodedowo');
function forecast($line, $name){
$mystr = $line;
$pos = mb_strpos( $mystr,'arr_'.$name.'=[{'); //температура
if($pos !== false){
$pos1 = mb_strpos( $mystr,"}];",$pos);
$mystr = mb_substr($mystr,$pos,$pos1-$pos+3);
//echo "Строка #<b>{$line_num}</b> : " . ($mystr) . "<br />\n";
$repl = array('arr_'.$name.'=[{', '}];', '}, {'); //заменим на |
$mstr = str_replace($repl,"|",$mystr);
$arr_temp = explode('|',$mstr);
$repl = array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_temp as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month = $month + 1;//месяцы с 0!
$date = $year.'-'.$month.'-'.$day.' '.$hour.':00';
//echo($name.' = '.$temp.'<br>');
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='".$name."';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']= $name;
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
}
function forecast1($line, $name){
$mystr = $line;
$pos = mb_strpos( $mystr,'arr_'.$name.'=[{'); //температура
if($pos !== false){
$pos1 = mb_strpos( $mystr,"}];",$pos);
$mystr = mb_substr($mystr,$pos,$pos1-$pos+3);
//echo "Строка #<b>{$line_num}</b> : " . ($mystr) . "<br />\n";
$repl = array('arr_'.$name.'=[{', '}];', '}, {'); //заменим на |
$mstr = str_replace($repl,"|",$mystr);
$arr_temp = explode('|',$mstr);
$repl = array('x: Date.UTC(','), y:', ', ind:');
foreach($arr_temp as $t1){
$t1 = str_replace($repl," ",$t1);
list($year, $month, $day,$hour) = sscanf($t1, "%d,%d,%d,%d");
if($year>2000){
$ps = strpos($t1,'"');
if($ps !== false){
$ps1 = strpos($t1,'"',$ps+1);
$temp = substr($t1,$ps+1,$ps1-$ps-1);
}
$month = $month + 1;//месяцы с 0!
$date = $year.'-'.$month.'-'.$day.' '.$hour.':00';
//echo($name.' = '.$temp.'<br>');
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='".$name."';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']= $name;
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
}
$lines=file('https://meteoinfo.ru/forecasts/russia/moscow-area/domodedowo');
if(!$lines){
debmes('get_meteoinfo_forecast - Не могу прочесть файл с meteoinfo.ru');
return;
}
// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
//echo "Строка #<b>{$line_num}</b> : " . strip_tags($line) . "<br />\n";
$clnline = strip_tags($line); //очистим строку
$pos = mb_strpos( $clnline,'arr_temperature=[{');
if($pos !== false){
forecast($clnline,'temperature');
forecast($clnline,'wind_dir');
forecast($clnline,'wind_speed');
forecast($clnline,'pressure');
forecast($clnline,'precip_val');
forecast($clnline,'precip_ver');
forecast($clnline,'humidity');
forecast1($clnline,'phenomenon');
forecast1($clnline,'phenomenon_name');
}
}
//удалим старьё
//$dt= mktime(0, 0, 0, gg('ThisComputer.MonthNum'), gg('ThisComputer.DayOfMonthNum'), gg('ThisComputer.YearNow'));//start date
SQLExec("delete from `meteoinfo` WHERE `DATE_FORECAST` <'".date('Y-m-d 00:00:00')."'");
echo('get_meteoinfo_forecast-OK');
|
get_meteoinfo_old
|
Текущая погода meteoinfo
//Для разных пунктов может быть разный набор полей -- картинки и описания может не быть
//debmes('get_meteoinfo - start');
$lines = file('http://old.meteoinfo.ru/pogoda/russia/moscow-area/domodedowo');
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)) 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.' Облачность '.($clouds*10).' %.';
if($rain>0){
$cast=$cast.' Осадки за 12 часов '.trim($rain).' мм.';
}
$cast = str_replace('..','.',$cast);
sg('minfo.metcast',$cast);
//debmes('get_meteoinfo OK');
|
mchs
|
//for tomorrow
$months2 = array(1=>'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$dat_tom = time()+24*60*60;//tomorrow
$month_num = (int)date('m',$dat_tom);
$day_month = (int)date('j',$dat_tom);
$month_txt2 = $months2[$month_num];
$today = gg('DayOfMonthNum').' '.gg('MonthTXTalt'); //31 мая
$tomorrow = $day_month.' '.$month_txt2; //1 июня
//
$volume = 2;
$title = $params['TITLE'];
//debmes($title);
$pos = strpos($title, "Внимание");
$title = str_replace('/ Ежедневный оперативный прогноз','',$title);
if($pos===false){
return;
}else{
//debmes($params['URL']);// -- ссылка на новость
//debmes($params['TITLE']);// -- заголовок новости
//debmes($params['BODY']);// -- тело новости
//debmes($params['CHANNEL_ID']);// -- ID канала
//debmes($params['CHANNEL_TITLE']);// -- название канала
$pos0 = strpos($params['BODY'], $today);
$pos1 = strpos($params['BODY'], $tomorrow);
if($pos0===false && $pos1===false) return;// не сегодня и не завтра - уходим 20200520
$txt = 'МЧС предупреждает: '.$title.'. '. $params['BODY'];
$txt = strip_tags($txt);
$txt = str_replace('м/с','м в секунду',$txt);
$txt = str_replace('федерального государственного бюджетного учреждения "Центральное управление по гидрометеорологии и мониторингу окружающей среды"','',$txt);
//todo 13.00 -> 13:00
$txt = str_replace('.00',':00',$txt);
say($txt,$volume);
//rs('mchs_2',array('URL' => $params['URL']));
}
|
mchs_copy
|
//$params = SQLSelectOne("select * from rss_items where id=8071");
//for tomorrow
$months2 = array(1=>'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$dat_tom = time()+24*60*60;//tomorrow
$month_num = (int)date('m',$dat_tom);
$day_month = (int)date('j',$dat_tom);
$month_txt2 = $months2[$month_num];
$today = gg('DayOfMonthNum').' '.gg('MonthTXTalt'); //31 мая
$tomorrow = $day_month.' '.$month_txt2; //1 июня
//
$volume = 2;
$title = $params['TITLE'];
//debmes($title);
$pos = strpos($title, "Внимание");
//$title = str_replace('/ Ежедневный оперативный прогноз','',$title);
if($pos===false){
return;
}else{
//debmes($params['URL']);// -- ссылка на новость
//debmes($params['TITLE']);// -- заголовок новости
//debmes($params['BODY']);// -- тело новости
//debmes($params['CHANNEL_ID']);// -- ID канала
//debmes($params['CHANNEL_TITLE']);// -- название канала
$pos0 = strpos($params['BODY'], $today);
$pos1 = strpos($params['BODY'], $tomorrow);
// if($pos0===false && $pos1===false) return;// не сегодня и не завтра - уходим 20200520
$txtBody = strip_tags( $params['BODY']);
$txtBody = str_replace('м/с','м в секунду',$txtBody);
$txtBody = str_replace('.00',':00',$txtBody);
$txtBody = iconv("UTF-8","CP1251//IGNORE",$txtBody);
$txtBody = str_replace(" ",' ',$txtBody);
$txtBody = iconv("CP1251","UTF-8",$txtBody);
//$txtBody = str_replace(" ",' ',$txtBody);
$txtBody = str_replace('федерального государственного бюджетного учреждения "Центральное управление по гидрометеорологии и мониторингу окружающей среды"','',$txtBody);
//echo($txtBody);
$txtBody = str_replace(array("\r\n", "\r", "\n"), "@@@", $txtBody);
$txt = explode( "@@@", $txtBody);
echo "<pre>";
print_r($txt);
$body = trim($txt[1]);
$pos = strpos($body, "При ");
if($pos>0){
$body = substr($body,0,$pos);
}
$txt1 = 'МЧС предупреждает: '.$title.'. '. $body;
say($txt1,2);
//rs('mchs_2',array('URL' => $params['URL']));
}
|
moon
|
moon->weather_my, время в UTC, если надо по мск gmdate-->date
require_once('lib/MoonPhase.php');
// create an instance of the class, and use the current time
$moon = new MoonPhase();
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$newmoon = gmdate('d.m.y H:i', $moon->new_moon() );
$fullmoon = gmdate('d.m.y H:i', $moon->full_moon() );
$nextnewmoon = gmdate( 'd.m.y H:i', $moon->next_new_moon() );
$nextfullmoon = gmdate( 'd.m.y H:i', $moon->next_full_moon() );
$phasename = $moon->phase_name();
$phaseimg = $moon->phase_img();
$illumination = round( $moon->illumination()*100, 2 );
sg('weather_my.MoonPhase',$illumination); //Фаза луны %
sg('weather_my.MoonAge',$age); //Возраст луны (лунный день)
sg('weather_my.MoonStage',$stage); //Стадия луны
sg('weather_my.MoonDistance',$distance); //Дистанция до луны
//Следующее Новолуние
if($moon->new_moon()>time()){
sg('weather_my.MoonNextNewTime',$moon->new_moon() );
sg('weather_my.MoonNextNewDate',gmdate('d.m.y H:i', $moon->new_moon()) );
}else{
sg('weather_my.MoonNextNewTime',$moon->next_new_moon() );
sg('weather_my.MoonNextNewDate',gmdate('d.m.y H:i', $moon->next_new_moon()) );
}
//Следующее полнолуние
if($moon->full_moon()>time()){
sg('weather_my.MoonNextFullTime',$moon->full_moon() ); //Время следующего полнолуния
sg('weather_my.MoonNextFullDate', gmdate('d.m.y H:i', $moon->full_moon()) ); //Дата следующего полнолуния
}else{
sg('weather_my.MoonNextFullTime', $moon->next_full_moon() ); //Время следующего полнолуния
sg('weather_my.MoonNextFullDate', gmdate('d.m.y H:i',$moon->next_full_moon()) ); //Дата следующего полнолуния
}
sg('weather_my.MoonPhaseName',$phasename); //Фаза луны
//\cms\icons\my\moon\WaningCrescent.png
sg('weather_my.MoonPhaseImg',DOC_ROOT."\\cms\\icons\\my\moon\\".$phaseimg.".png"); //Фаза луны image file
sg('weather_my.MoonPhaseImg2',"//192.168.1.7/cms/icons/my/moon620/moon".$age.".png?ts=".time()); //Фаза луны image file
sg('weather_my.MoonNew',$newmoon); //Новолуние
sg('weather_my.MoonFull',$fullmoon); //Полнолуние
|
readWeatherToday
|
$weather.=gg('weather_my.metcast');
$weather.=" Прогноз - ".getGlobal('weather_my.forecast');
$weather=str_replace('°','',$weather);
$weather=str_replace('0.','0,',$weather);
$weather=str_replace('..','.',$weather);
say($weather,2);
//$last = getHistory("weather_my.metcast_ya", -15*60);
$last = gg("weather_my.metcast_ya");
if($last){
$retc = $last;
$retc = str_replace('В течение 30','В течение тридцати',$retc);
$retc = str_replace('В течение 2 часов','В течение двух часов',$retc);
$retc = str_replace('В ближайшие 2 часа','В ближайшие два часа',$retc);
say("По мнению Яндекса - ".$retc,2);
}
|
rssNewsFull
|
if(gg('Kitchen.SomebodyHere')){
$volume=2;
} else {
$volume=0;
}
$volume = 2;//silent
$t = $params['BODY'];
$ttl = $params['TITLE'];
$txt = str_replace('м/с','м в секунду',$t);
$txt = str_replace('мм рт.ст.,','мм,',$txt);
$txt = str_replace('мм рт.ст.','мм. ',$txt);
$two_days = '';
$pos = strpos($ttl, gg('ThisComputer.DayOfMonthNum').' '.gg('ThisComputer.MonthTXTalt'));
//tomorrow date
$pos_t = strpos($ttl, gg('ThisComputer.DateTomDay'));
if($pos > 0){
$title = 'Сегодня: ';
//type - вырезаем первое предложение - тип погоды
$pos1 = strpos($t,'Температура');
if($pos1 > 0){
$metcast = substr($t,0,$pos1-1);
sg('minfo.type',$metcast);
sg('ThisComputer.weatherFull',$metcast);
}
$subject = $t;
$pattern = '/днём (\d+) мм/isu';
if(preg_match($pattern,$t,$matches)){
sg('minfo.pressure',$matches[1]);
}
$pattern = '/Вероятность осадков (\d+)%/isu';
if(preg_match($pattern,$t,$matches)){
sg('minfo.chance_precip',$matches[1]);
}
sg('minfo.two_days','<b>Сегодня:</b><br>'.$txt.'<br>');
}elseif($pos_t > 0){ //завтра
$title = 'Завтра: ';
sg('minfo.two_days',gg('minfo.two_days').'<b>Завтра:</b><br>'.$txt.'<br>(на '.date('H:i d.m.y').')');
}else{
$title = $ttl .': ';
}
$txt = str_replace('..','.',$txt);
say($title.$txt,2);
//sleep(12);
|
say_weather
|
$status="";
$status.="Сегодня - ".gg("ThisComputer.DayOfMonthTXT")." ".gg("ThisComputer.MonthTXTalt").", ".gg("ThisComputer.DayOfWeekTXT")." - ".gg("weather_my.Type");
$status.=". Восход - в ".gg("weather_my.SunRise").", закат - в ".gg("weather_my.SunSet").'. ';
//say($status,1);
$tempcels = "";
//$status = "";
$temp = round(getGlobal('weather_my.temp'));
$tempw = abs($temp);
$tempcels = GetNumberWord($tempw,array('градус','градуса','градусов'));
$status .= ' Температура на улице '.$temp." ".$tempcels .'. ';
//say($status,1);
//$status="";
$h = round(gg("weather_my.Humidity"));
$tempcels = GetNumberWord($h,array('процент','процента','процентов'));
$status .= " Относительная влажность ".$h." ".$tempcels;
//say($status,1);
//$status = "";
$pressure = round(gg("ws.pressureRt"));
if ($pressure<745) {
$status .= '. Атмосферное давление пониженное - '.$pressure.' мм,';
} elseif ($pressure>755) {
$status .= '. Атмосферное давление повышенное - '.$pressure.' мм, ';
} else {
$status .= '. Атмосферное давление нормальное - '.$pressure.' мм, ';
}
//say($status,1);
$status .= ' за последний час ';
$prd = gg('ws.pressureTrend');
$txt = abs($prd);
$txt = str_replace('.',',',$txt);
if (abs($prd)>1.5) {
$status .= 'сильно ';
}
if ($prd==0) { $status .= ' не менялось. ';
} elseif ($prd<0) { $status .= ' упало на '.$txt.' мм. ';
} else { $status .= ' выросло на '.$txt.' мм. ';
}
// say($status,1);
//$status="";
// ветер
$WindSpeed = getGlobal('weather_my.windSpeed');
if ($WindSpeed==0) { $status.=' Безветренно.';
} elseif ($WindSpeed<2) { $status.=' Возможен тихий ветер.';
} elseif ($WindSpeed<3) { $status.=' Возможен легкий ветер.';
} elseif ($WindSpeed<5) { $status.=' Возможен слабый ветер.';
} elseif ($WindSpeed<8) { $status.=' Умеренный ветер.';
} elseif ($WindSpeed<11) { $status.=' Свежий ветер.';
} elseif ($WindSpeed<14) { $status.=' Сильный ветер.';
} elseif ($WindSpeed<17) { $status.=' Крепкий ветер.';
} elseif ($WindSpeed<20) { $status.=' Очень крепкий ветер. Без нужды из дома лучше не выходить.';
} elseif ($WindSpeed<25) { $status.=' На улице шторм. Выходить из дома не рекомендуется.';
} else { $status.=' На улице ураган. Выходить из дома не рекомендуется.';
}
if ($WindSpeed>0) $status.=' Направление -'.myWindDirFull(getGlobal('weather_my.WindDirDegree')).'.';
//say($status,1);
if (gg("ws.rainfallHour") > 0){
say("Внимание, осадки!",1);
}
$tempw = abs(round(gg('weather_my.t_day')));
$tempcels = GetNumberWord($tempw,array('градус','градуса','градусов'));
$status .= ' Максимальная температура сегодня днём '.round(gg('weather_my.t_day')).' '.$tempcels;
//$status = "";
$status .= '. По мнению метеостанции, погода - '.getGlobal('ws.forecast');
$status = str_replace('..','.',$status);
say($status,1);
//say_irbis($status);
//callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'повтори за мной '.$status));
/*
$status="";
if(date("G")>20 && $temp>5){
$h = round(gg('weather_my.frost'));
$tempcels = GetNumberWord($h,array('процент','процента','процентов'));
say(' Вероятность заморозка '.$h.' '.$tempcels,1);
}
*/
//$last = getHistory("weather_my.metcast_ya", -15*60);
$last = gg("weather_my.metcast_ya");
$last = str_replace("\n",'.',$last);
$last = str_replace(";",'.',$last);
$last = str_replace("…",',',$last);
$last = str_replace("м/с",'метров в сек',$last);
$last = str_replace("°",' град',$last);
echo $last;
if($last){
say("По мнению Яндекса - ".$last,1);
}
|
sky_color
|
берём иконку погоды и цвет неба у яндекса
$url = 'https://yandex.ru/time/sync.json?geo=121655';
$content = getURL($url, 0);
$data = json_decode($content,true);
sg('weather_my.ya_sky_color',$data['clocks']['121655']['skyColor']);
sg('weather_my.ya_icon',$data['clocks']['121655']['weather']['icon']);
//обновим фон под цвет неба
//rs('createBackgroundImage');
$image = imagecreatetruecolor(1024,800)
or die('Cannot create image');
$color = strtolower($data['clocks']['121655']['skyColor']);
$color = preg_replace('/^#/','',$color);
$color = hexdec($color);
$red = $color >> 16 & 0xFF;
$green = $color >> 8 & 0xFF;
$blue = $color & 0xFF;
$background = imagecolorallocate($image, $red, $green, $blue);
imagefill($image,0,0,$background);
header('Content-type: image/jpeg');
imagejpeg($image,DOC_ROOT."/cms/scenes/backgrounds/fon.jpeg");//выложим в доступ
imagedestroy($image);
|
tempOutsideDinamic
|
покажем динамику уличной температуры
$data1 = getHistoryValue("Outside.Temperature", strtotime("-1 hour"));
$data2 = gg("ws.tempOutside");
$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',"≡");
*/
|
testYaWeather
|
текст погода сейчас от яндекса
$page_url = "https://yandex.ru/pogoda/kiseliha";
$page_cont = file_get_contents($page_url);
if ($page_cont) {
//echo($page_cont);
//ищем <p class="maps-widget-fact__title">(.*?)</p>
preg_match_all("/<p class=\"maps-widget-fact__title\">(.*?)<\/p>/ui", $page_cont, $match);
//echo("<pre>");
//print_r($match);
$ret = $match[1][0];
if($ret){
if($ret<>"Открыть карту осадков" && $ret<>"Погода сейчас и прогноз — на картах"){
$ret = str_replace("Открыть карту осадков",'',$ret);
if(gg("weather_my.metcast_ya") != $ret){
$retc =$ret;
$retc = str_replace('В течение 30','В течение тридцати',$retc);
$retc = str_replace('В течение 2 часов','В течение двух часов',$retc);
say($retc,gg('QuietMode.active')==1?0:1 );
}
//sg("weather_my.metcast_ya",$ret);
}
//echo "<br>" . $ret."<br>";
preg_match_all("/Сегодня: (.*?)<\/div>/iu", $page_cont, $match);
//echo("<pre>");
//print_r($match);
$ret1 = $match[1][0];
if($ret1){
$ret = $ret.PHP_EOL."Сегодня: ".$ret1;
}
saveToCache("MJD:weather_my.metcast_ya",$ret);
postToWebSocketQueue('weather_my.metcast_ya',$ret);
}
preg_match_all("/МЧС: (.*?)<\/div>/iu", $page_cont, $match);
$ret = $match[1][0];
if($ret){
$ret = str_replace("/","@@@",$ret);
$ret = str_replace("м@@@с","м в секунду",$ret);
$regexMisc = '/[\x{2060}]/u';//уберём хитрый пробел-объединитель
$ret = str_replace($regexMisc, '', $ret);
//$ret = str_replace(" м/c"," м в секунду",$ret);
//$ret = str_replace(" м/с"," м в секунду",$ret);
//$ret = str_replace(" м/c"," м в секунду",$ret);
$event_name = "МЧС:alarm_".md5($ret);
$num = registeredeventdetails( $event_name);
if(registeredEventTime($event_name)<0){ //первый раз
$num = 0;
}else{
$num = registeredeventdetails( $event_name);
}
if($num < 2){
say("Внимание! Предупреждение от МЧС: ".$ret,gg('QuietMode.active')==1?1:2);
registerEvent($event_name,$details = $num + 1,1/3);
}
}
} else {
DebMes("скрипт testYaWeather - Данные не получены.");
}
|
upd_Weather_MY
|
Актуальная погода + прогноз на сегодня
//debmes('upd_Weather_MY start');
//sg('weather_my.source','minfo');
//todo уходим с meteoinfo
sg('weather_my.source','ws');
//дождь
$rain=0;
if(gg('ws.rainfallRate')>0) $rain=1;
sg("weather_my.Rain",$rain);
//sg("weather_my.Snow",null);
//температура внешняя
$temp = gg('ws.tempOutside');
$temp = round($temp,0);
if ($temp > 0) $temp = '+'.$temp;
sg("weather_my.temp",$temp);
//
sg('weather_my.Humidity',gg('ws.relHumOutside'));
//приведем к высоте отн. уровня моря
sg('weather_my.pressure',gg('ws.pressureRt'));
//
//sg('weather_my.uptime',gg('ws.updatedTime'));
sg('weather_my.windSpeed',gg('ws.windAverage'));
sg('weather_my.windDir',myWindDirection((float)gg('ws.windBearing')));
sg('weather_my.windDirDegree',gg('ws.windavgbearing'));
sg('weather_my.day0',date('d.m.Y',gg('ws.updatedTimestamp')));
sg('weather_my.forecast',gg('ws.forecast'));
//from meteoinfo
//температура внешняя meteoinfo
// $temp=gg('minfo.temp');
$temp=round($temp);
if ($temp>0) $temp='+'.$temp;
//sg("weather_my.temp",$temp);
//sg("temp_out.value",$temp); //sensor
//sg('weather_my.Humidity',gg('minfo.Humidity'));
//sg('humidity01.value',gg('minfo.Humidity'));//sensor
//sg('weather_my.windDirDegree',myWindDegree(gg('minfo.Winddir')));
if(gg('minfo.type')) sg('weather_my.type',gg('minfo.type')); //meteoinfo.ru
sg('weather_my.Clouds',gg('minfo.clouds')); //meteoinfo.ru
sg('weather_my.percip12',gg('minfo.percip12')); //meteoinfo.ru
// sg('weather_my.windSpeed',gg('minfo.WindSpeed'));
// sg('weather_my.uptime',gg('minfo.hour'));
// sg('weather_my.pressure',gg('minfo.pressure'));
//
$today = date('d.m.Y');
$sql="SELECT round(min(`VALUE`+0.0)) t_n FROM `meteoinfo` where `TYPE`='temperature'";
$sql=$sql." and date_format(`DATE_FORECAST`,'%d.%m.%Y')='".$today."' and date_format(`DATE_FORECAST`,'%H') between '00' and '06'";
$rec= SQLSelectOne($sql);
if($rec) sg('weather_my.t_night',$rec['t_n']);
//
$sql="SELECT round(max(`VALUE`+0.0)) t_d FROM `meteoinfo` where `TYPE`='temperature'";
$sql=$sql." and date_format(`DATE_FORECAST`,'%d.%m.%Y')='".$today."' and date_format(`DATE_FORECAST`,'%H') between '06' and '23'";
$rec= SQLSelectOne($sql);
if($rec) sg('weather_my.t_day',$rec['t_d']);
//найдем иконку из прогноза на сегодня
$sql="SELECT * FROM `meteoinfo` WHERE `TYPE` = 'phenomenon' ";
$sql=$sql."AND DATE_FORMAT(`DATE_FORECAST`,'%d.%m.%Y') = '".$today."' and date_format(`DATE_FORECAST`,'%H')<='".date('H')."' order by `DATE_FORECAST` desc";
//debmes($sql);
$rec= SQLSelectOne($sql);
if($rec) {
$img=str_replace('/images/icons/30px/','',$rec['VALUE']);
$img=str_replace('.png','',$img);
if(gg('DarknessMode.active')){
sg('weather_my.Image',$img.'_n');
}else{
sg('weather_my.Image',$img.'_d');
}
}
//-->
if(gg('ws.sensorContactLost')==1){ //если не получилось забрать температуру с ws, берем альтернативу
sg('weather_my.source','module');
//if(gg('mod10.alive')==1) sg('weather_my.pressure',gg('mod10.presRt'));
}
//-->
$metcast='';
if(gg("weather_my.type")) $metcast="На улице ".gg("weather_my.type").'.';
// состояние ветра, согласно шкалы Бофорта
$WindSpeed=(float)gg("weather_my.windSpeed");
if ($WindSpeed==0) { $metcast.=' Безветренно.';
} elseif ($WindSpeed<2) { $metcast.=' Возможен тихий ветер.';
} elseif ($WindSpeed<3) { $metcast.=' Возможен легкий ветер.';
} elseif ($WindSpeed<5) { $metcast.=' Возможен слабый ветер.';
} elseif ($WindSpeed<8) { $metcast.=' Умеренный ветер.';
} elseif ($WindSpeed<11) { $metcast.=' Свежий ветер.';
} elseif ($WindSpeed<14) { $metcast.=' Сильный ветер.';
} elseif ($WindSpeed<17) { $metcast.=' Крепкий ветер.';
} elseif ($WindSpeed<20) { $metcast.=' Очень крепкий ветер. Без нужды из дома лучше не выходить.';
} elseif ($WindSpeed<25) { $metcast.=' На улице шторм. Выходить из дома не рекомендуется.';
} else { $metcast.=' Ураган! Выходить из дома не рекомендуется.';
}
//$rf = myRealFeel(gg('weather_my.Temp'),gg('weather_my.Humidity'), gg('weather_my.windSpeed'));
$rf = gg('ws.apparentTemp');
$w = round(gg('weather_my.temp'));
sg('weather_my.realFeel',$rf); //from Cumulus apparent temp
//$tempcels = GetNumberWord($w,array('градус','градуса','градусов'));
$metcast .= ' Температура '.$w.'°.'; //.$tempcels.'.';
$tm = (float)gg("weather_my.temp");
if ($tm < -40) { $metcast.=' СОВСЕМ ХОЛОДНО!';
} elseif ($tm<-30) { $metcast.=' Очень холодно, оденьтесь теплее.';
} elseif ($tm<-20) { $metcast.=' Мороз.';
} elseif ($tm<-10) { $metcast.=' Холодновато.';
} elseif ($tm<-3) { $metcast.=' Не особо холодно.';
} elseif ($tm<3) { $metcast.=' Возможен гололёд.';
} elseif ($tm<10) { $metcast.=' Довольно прохладно.';
} elseif ($tm<25) { $metcast.=' Тепло.';
} elseif ($tm<30) { $metcast.=' Жарко.';
} elseif ($tm>30) { $metcast.=' Очень ЖАРКО.';
}
$rfm = '';
if ($rf>54) { $rfm.=' Чрезвычайная опасность: тепловой удар неизбежен.';
} elseif ($rf>41) { $rfm.=' Опасность: возможны судороги и тепловое истощение; тепловой удар является вероятным с продолжением деятельности.';
} elseif ($rf>32) { $rfm.=' Предостережение: возможны судороги и тепловое истощение. Постоянная активность может привести к тепловому удару.';
} elseif ($rf>27) { $rfm.=' Внимание: возможна усталость при длительном воздействии и активности.';
} elseif ($rf<-55) { $rfm.=' Опасно! Крайне высокий риск переохлаждения и обморожения открытых участков кожи менее чем в течение 2 минут.';
} elseif ($rf<-48) { $rfm.=' Очень высокий риск переохлаждения и обморожения открытых участков кожи в течение 2—5 минут.';
} elseif ($rf<-40) { $rfm.=' Высокий риск переохлаждения и обморожения открытых участков кожи в течение 5—10 минут.';
} elseif ($rf<-28) { $rfm.=' Средний риск переохлаждения и обморожения открытых участков кожи в течение 10—30 минут.';
} elseif ($rf<-10) { $rfm.=' Небольшой риск обморожения и переохлаждения.';
}
$metcast.= ' Ощущается как '.round(gg('weather_my.realFeel')).'°.'.$rfm;
if(gg("minfo.percip12")>0){
$metcast.=' Осадки за последние 12 часов '. str_replace('.',',', gg("minfo.percip12")).' мм.';
}
$metcast = str_replace('..','.',$metcast);
sg("weather_my.metcast",$metcast);
//debmes('upd_Weather_MY OK');
|
YaWeather
|
//Получаем данные от Яндекса, region= указывает на код региона
$getYandexPogoda = simplexml_load_string(file_get_contents('https://export.yandex.ru/bar/reginfo.xml?region=121655'));
$getYandexPogoda = json_decode(json_encode($getYandexPogoda), TRUE);
//Меняем некрасивые картинки на красивые, анимированные
$arrayIcon = [
'bkn_d.png' => '/cms/icons/meteoIcon/cloudy-day-3.svg',
'bkn_n.png' => '/cms/icons/meteoIcon/cloudy-night-3.svg',
'ovc.png' => '/cms/icons/meteoIcon/cloudy.svg',
'ovc_-sn.png' => '/cms/icons/meteoIcon/snowy-4.svg',
'ovc_sn.png' => '/cms/icons/meteoIcon/snowy-5.svg',
'ovc_+sn.png' => '/cms/icons/meteoIcon/snowy-6.svg',
'ovc_-ra.png' => '/cms/icons/meteoIcon/rainy-4.svg',
'ovc_ra.png' => '/cms/icons/meteoIcon/rainy-5.svg',
'ovc_ts_ra.png' => '/cms/icons/meteoIcon/thunder.svg',
'skc_d.png' => '/cms/icons/meteoIcon/day.svg',
'skc_n.png' => '/cms/icons/meteoIcon/night.svg',
'fg_d.png' => '/cms/icons/meteoIcon/cloudy.svg',
'bl.png' => '/cms/icons/meteoIcon/snowy-6.svg',
'bkn_-ra_d.png' => '/cms/icons/meteoIcon/rainy-2.svg',
'bkn_-ra_n.png' => '/cms/icons/meteoIcon/cloudy-night-3.svg',
'bkn_-sn_d.png' => '/cms/icons/meteoIcon/snowy-2.svg',
'bkn_-sn_n.png' => '/cms/icons/meteoIcon/cloudy-night-3.svg',
'bkn_ra_d.png' => '/cms/icons/meteoIcon/rainy-1.svg',
'bkn_ra_n.png' => '/cms/icons/meteoIcon/rainy-1.svg',
'bkn_sn_d.png' => '/cms/icons/meteoIcon/snowy-1.svg',
'bkn_sn_n.png' => '/cms/icons/meteoIcon/snowy-5.svg',
'ovc_ra_sn.png' => '/cms/icons/meteoIcon/rainy-5.svg',
];
//echo '<pre>';
//print_r($getYandexPogoda);
//echo '</pre>';
//Цикл для перебора данных
foreach($getYandexPogoda['weather']['day']['day_part'] as $key => $array) {
//Самый первый массив - в нем данные о текущей погоде
if($key == 0) {
//Текущая часть суток
sg('YandexWeather.nowDayPart',$getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
//Текущая температура
sg('YandexWeather.nowTemp', $array["temperature"]);
//Иконка
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('YandexWeather.nowWeatherIcon', $arrayIcon[$searchIcon[8]]);
$file = DOC_ROOT.$arrayIcon[$searchIcon[8]];
$newfile = ROOT.'cms\cached\img\weather_Now.svg';
//DebMes('file '.$file);
@copy($file, $newfile);
//Скорость ветра
sg('YandexWeather.nowWindSpeed', $array["wind_speed"]);
// print_r($array["wind_speed"] );
//Направление ветра
sg('YandexWeather.nowWindDirection', $array["wind_direction"]);
sg('YandexWeather.dampness',$array["dampness"]);
sg('YandexWeather.pressure',$array["pressure"]);
sg('YandexWeather.observation',$array["observation"]);
sg('YandexWeather.weather_type',$array["weather_type"]);
$metcast = $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]." - ".$array["weather_type"].". Температура за окном ".$array["temperature"];
$metcast .= ". Относительная влажность ".$array["dampness"]." %";
if( (int)$array["wind_speed"] > 0){
$metcast .= ". Направление ветра - ". $array["wind_direction"];
$metcast .= ". Скорость ".$array["wind_speed"]." м в секунду";
}
$metcast .= ". Давление ".$array["pressure"]." мм рт ст.";
//$metcast .= '<br><img width="50" height="42" src="\cms\cached\img\weather_Now.svg">';
sg('YandexWeather.metcast',$metcast);
continue;
}
if(isset($getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"])) {
$searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"];
} else {
$searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature_to"];
}
//Раскидываем данные по принципу temp_1, temp_2, temp_3, temp_4 это утро, день, вечер, ночь
$typ = (int)$getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["typeid"];
sg('YandexWeather.name_'.$typ, $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
sg('YandexWeather.temp_'.$typ, $searchTemp);
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('YandexWeather.WeatherIcon_'.$typ, $arrayIcon[$searchIcon[8]]);
$file = DOC_ROOT.$arrayIcon[$searchIcon[8]];
$newfile = ROOT.'cms\cached\img\weather_'.$typ.'.svg';
@copy($file, $newfile);
}
//Время обновления
sg('YandexWeather.update', date('d.m.Y H:i', time()));
//$ya_metcast = "Погода на ".date('d/m/yy H:i',strtotime(gg('YandexWeather.observation')))." - ".gg('YandexWeather.weather_type').". Температура за окном ".gg('YandexWeather.nowTemp').". Относительная влажность ".gg('YandexWeather.dampness')." %. Напррвление ветра - ".gg('YandexWeather.nowWindDirection');
//$ya_metcast .= ". Скорость ".gg('YandexWeather.nowWindSpeed')." м в секунду. Давление ".gg('YandexWeather.pressure')." мм рт ст.";
echo $metcast;
|
yaweat_say
|
$last = gg("weather_my.metcast_ya");
echo $last."<br>";
$last = iconv("UTF-8","CP1251//IGNORE",$last);
echo $last."<br>";
$last = iconv("CP1251","UTF-8",$last);
echo $last."<br>";
//$last = str_replace("/","@@@",$last);
//$last = str_replace("м@@@с","м в секунду",$last);
//$regexMisc = '/[\x{2060}]/u';//уберём хитрый пробел-объединитель
//$last = str_replace($regexMisc, '', $last);
$last = str_replace("\n",'.',$last);
$last = str_replace(";",'.',$last);
$last = str_replace("…",',',$last);
$last = str_replace("м/с",'метров в сек',$last);
$last = str_replace("°",' град',$last);
echo $last;
|
checkGmail
|
$user = gg('Sergey.GmailAddress'); //имя пользователя
$pass = gg('Sergey.GmailPassword'); //пароль
$data_file = "https://".$user.":".$pass."@mail.google.com/mail/feed/atom";
$xml = simplexml_load_file($data_file); //раскладываем xml на массив
$unread = $xml->fullcount;
if ($unread == "") {$unread = "0";}
echo ('unread '.(int)$unread);
sg('Sergey.GMailUnread',(int)$unread);
|
checkPhones
|
$Obl = gg('Olga.BattLevel');$Sbl = gg('Sergey.BattLevel');$Vbl = gg('VI.BattLevel');
$Och = gg('Olga.Charging') ;$Sch = gg('Sergey.Charging') ;$Vch = gg('VI.Charging') ;
$Osa = gg('Olga.seenAt') ;$Ssa = gg('Sergey.seenAt') ;$Vsa = gg('VI.seenAt') ;
if (($Obl<>0) && ($Obl<15) && (!$Och) && ($Osa=="Дача")) {say ("Мама, заряди телефон!",2);}
if (($Sbl<>0) && ($Sbl<=5) && (!$Sch) && ($Ssa=="Дача")) {say ("Сергей! Телефон сейчас отключится!",2);}
if (($Vbl<>0) && ($Vbl<15) && (!$Vch) && ($Vsa=="Дача")) {say ("Валентина Ивановна! Надо зарядить телефон!",2);}
if (($Sbl<>0) && ($Sbl<15) && ($Sbl>5) && (!$Sch) && ($Ssa=="Дача")) {say ("Папа, заряди телефон!",2);}
/////////
if (($Obl==100) && $Och && ($Osa=="Дача")) {say ("Мама! Телефон зарядился!",2);}
if (($Sbl==100) && $Sch && ($Ssa=="Дача")) {say ("Папа, Телефон зарядился!",2);}
//if (($Vbl==100) && $Vch && ($Vsa=="Дача")) {say ("Валентина Ивановна, Телефон зарядился!",2);}
|
check_ups
|
//debmes('check_ups - start');
$cmdUrl = 'http://192.168.1.7:8888';
$state = file_get_contents($cmdUrl);
if($state){
preg_match('|<b>Report from My UPS</b> - (.*)</br>|', $state, $matches);
//echo("<pre>");
//print_r($matches);
sg('ippon.measurTime',$matches[1]);
preg_match('|I?P Voltage = (.*) |', $state, $matches);
if(isset($matches[1]) && $matches[1]>=0)
sg('ippon.inVoltage',$matches[1]);
preg_match('|O?P Voltage = (.*) |', $state, $matches);
sg('ippon.outVoltage',$matches[1]);
preg_match('|O?P Current = (.*) |', $state, $matches);
sg('ippon.load',(int)$matches[1]);
preg_match('|I?P Frequency = (.*) |', $state, $matches);
sg('ippon.Frequency',$matches[1]);
preg_match('|Battery Voltage = (.*) |', $state, $matches);
sg('ippon.batVoltage',$matches[1]);
$batVoltage = $matches[1];
preg_match('|Temperature = (.*) |', $state, $matches);
sg('ippon.inTemp',$matches[1]);
//Battery Low Power fail
if(strpos($state, "Power fail")!==false){
debmes('Power fail - from ups http');
}
if(strpos($state, "Battery Low")!==false){
debmes('Battery Low - from ups http');
sg('ippon.batVoltage',0,0,'check_ups');
}
sg('ippon.updated',time());
sg('ippon.batCharge',round( ($batVoltage - 9.8) / (13.6 - 9.8) *100 ),0,'check_ups');
}
|
chkBrlnk
|
запуск проверки температуры бродлинка без цикла
include_once(DIR_MODULES . 'dev_broadlink/dev_broadlink.class.php');
$br = new dev_broadlink();
$br->check_params('1m');
|
db_optimize
|
echo "<pre>";
echo "OPTIMIZE TABLES\n";
$tables = SQLSelect("select table_name as TN, round(data_length) as data_length, round(data_free) as data_free from information_schema.tables where TABLE_SCHEMA='" . DB_NAME . "' and data_free>0;");
$total = count($tables);
$defr = 0;
for ($i = 0; $i < $total; $i++) {
$table = $tables[$i]['TN'];
echo 'Optimize table [' . $table . '] for defragment '.$tables[$i]['data_free'].' bytes...';
$defr = $defr + (int)$tables[$i]['data_free'];
SQLExec("OPTIMIZE TABLE " . $table . ";");
echo "OK\n";
}
DebMes("OPTIMIZE TABLES done. Defragments ".$total." tables for ".round($defr/1024,2)." kB");
|
db_repair
|
echo('<pre>');
echo "CHECK/REPAIR TABLES\n";
$tables = SQLSelect("select TABLE_NAME Tbl from information_schema.tables where TABLE_SCHEMA='".DB_NAME."' AND ENGINE !='MEMORY';");
$total = count($tables);
$checked = 0;
$broken = 0;
$repaired = 0;
$fatal = 0;
for ($i = 0; $i < $total; $i++) {
$table = $tables[$i]['Tbl'];
//echo 'Checking table [' . $table . '] ...';
$result = SQLSelectOne("CHECK TABLE " . $table . ";");
if ($result['Msg_text'] == 'OK') {
//echo "OK\n";
$checked = $checked + 1;
} else {
echo "Checking table [" . $table . "]... broken ... try to repair ...";
$broken = $broken + 1;
SQLExec("REPAIR TABLE " . $table . ";");
sleep(10);
$result = SQLSelectOne("CHECK TABLE " . $table . ";");
if ($result['Msg_text'] == 'OK') {
echo "OK\n";
$repaired = $repaired + 1;
} else {
echo "try to repair extended...";
SQLExec("REPAIR TABLE " . $table . " EXTENDED;");
sleep(10);
$result = SQLSelectOne("CHECK TABLE " . $table . ";");
if ($result['Msg_text'] == 'OK') {
echo "OK\n";
$repaired = $repaired + 1;
} else {
echo "try to repair use_frm...";
SQLExec("REPAIR TABLE " . $table . " USE_FRM;");
sleep(10);
$result = SQLSelectOne("CHECK TABLE " . $table . ";");
if ($result['Msg_text'] == 'OK') {
echo "OK\n";
$repaired = $repaired + 1;
} else {
echo "NO RESULT(...try restore from backup\n";
$fatal = $fatal + 1;
}
}
}
}
}
echo "CHECK/REPAIR TABLES. Total: ".$total." checked Ok: ".$checked." broken: ".$broken." repaired: ".$repaired." FATAL Errors : ".$fatal;
DebMes("CHECK/REPAIR TABLES done. Total: ".$total." checked Ok: ".$checked." broken: ".$broken." repaired: ".$repaired." FATAL Errors : ".$fatal);
|
detection
|
вывод с распознанным в рамке
//$params['image'] = 'c:/_majordomo/htdocs/cms/images/cam3.jpg';
//$params['from'] = 'cam3';
if(isset($params["from"])){
$from = $params["from"];
}else{
$from = "unknown";
}
if(isset($params['image'])){
$img = $params['image'];
$img = str_replace("C:\_majordomo\htdocs","c:/_majordomo/htdocs",$img);
//работаем с копией
$img1 = DOC_ROOT."/cms/images/".$from."_".time().".jpeg";
copy($img, $img1);
$img = $img1;
}else{
return;
}
$upload_url = "http://192.168.1.7:85/v1/vision/detection"; // URL-адрес POST
// Инициализируем cURL
$ch = curl_init();
// Поля POST-запроса
$parameters = ['image' => new CURLFile($img)];
// Ссылка, куда будем загружать картинку - это upload_url
curl_setopt($ch, CURLOPT_URL, $upload_url);
// Говорим cURL, что это POST-запрос
curl_setopt($ch, CURLOPT_POST, true);
// Говорим cURL, какие поля будем отправлять
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
// Говорим cURL, что нам нужно знать, что ответит сервер, к которому мы будем обращаться
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Выполняем cURL-запрос. В этой переменной будет JSON-ответ от ВКонтакте
$curl_result = curl_exec($ch);
// Закрываем соединение
curl_close($ch);
$pred = json_decode( $curl_result,true);
echo "<pre>";
print_r($pred);
if($pred["success"] != 1){
unlink ($img1);
return 0;
}
$pr = $pred["predictions"];
//echo "<pre>";
//print_r($pr);
$image = imageCreateFromjpeg($img);
$blue = imageColorAllocate($image, 0, 0, 250);
$green = imageColorAllocate($image, 0, 250, 0);
$white = imageColorAllocate($image, 255, 255, 255);
$red = imageColorAllocate($image, 255, 0, 0);
$font = "c:\Windows\Fonts\arial.ttf";
$font_size = 10; // Размер шрифта
$degree = 0; // Угол поворота текста в градусах
$person_count = 0;
$catdog_count = 0;
foreach($pr as $value){
$obj = $value;
extract($value,EXTR_OVERWRITE);
/*
foreach($obj as $key=>$value1){
switch ($key){
case 'label': $label = $value1; break;
case 'confidence': $confidence = $value1; break;
case 'y_min': $y_min = $value1; break;
case 'x_min': $x_min = $value1; break;
case 'y_max': $y_max = $value1; break;
case 'x_max': $x_max = $value1; break;
}
}
*/
$color = $white;
// if($label == 'dog' || $label == 'cat' || $label == 'person'){
if($label == 'person'){
$person_count = $person_count + 1;
//sg("test_event.value","person/".$from."/".$person_count,0,"detect_php");
$color = $red;
}elseif($label == 'dog' || $label == 'cat'){
if($label == 'dog') {$color = $blue;}else{$color = $green;}
$catdog_count = $catdog_count + 1;
$catdog = $label;
}
//}
imageRectangle($image, $x_min, $y_min, $x_max, $y_max, $color);
imagettftext($image, $font_size, $degree, $x_min, $y_min + 10, $color, $font, $label.":".round($confidence,3));
}
$img_temp = DOC_ROOT."/cms/images/".$from."_detect.jpeg";
imagejpeg($image, $img_temp);
imagedestroy($image);
unlink ($img1);
rs('sendTelegram',array('img'=>$img_temp));
//copy($img_temp, $params['image']);
//if($person_count > 0) sg("test_event.value","person/".$from."/".$person_count,0,"detection");
//if($catdog_count > 0) sg("test_event.value",$catdog."/".$from,0,"detection/".$params['image']);
|
detect_php
|
post запрос к серверу deepstack
//$params['image'] = 'c:/_majordomo/htdocs/cms/images/cam3.jpg';
//$params['from'] = 'cam2';
if(isset($params['image'])){
$img = $params['image']; //'c:/_majordomo/htdocs/cms/images/cam4.jpg
$img = str_replace("C:\_majordomo\htdocs","c:/_majordomo/htdocs",$img);
//debmes($img);
}else{
return;
}
if(isset($params["from"])){
$from = $params["from"];
}else{
$from = "unknown";
}
$upload_url = "http://192.168.1.7:85/v1/vision/detection"; // URL-адрес POST
// Инициализируем cURL
$ch = curl_init();
// Поля POST-запроса
$parameters = ['image' => new CURLFile($img)];
// Ссылка, куда будем загружать картинку - это upload_url
curl_setopt($ch, CURLOPT_URL, $upload_url);
// Говорим cURL, что это POST-запрос
curl_setopt($ch, CURLOPT_POST, true);
// Говорим cURL, какие поля будем отправлять
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
// Говорим cURL, что нам нужно знать, что ответит сервер, к которому мы будем обращаться
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Выполняем cURL-запрос. В этой переменной будет JSON-ответ от ВКонтакте
$curl_result = curl_exec($ch);
// Закрываем соединение
curl_close($ch);
$pred = json_decode( $curl_result,true);
//echo "<pre>";
//print_r($pred);
$pr = $pred["predictions"];
$person_count = 0;
$dog_count = 0;
$cat_count = 0;
foreach($pr as $value){
$obj = $value;
foreach($obj as $key=>$value1){
//if($key == 'confidence' && $value1 >= 0.48){
if($key == 'label' && $value1 == 'person'){
$person_count = $person_count + 1;
}elseif($key == 'label' && $value1 == 'dog'){
$dog_count = $dog_count + 1;
}elseif($key == 'label' && $value1 == 'cat'){
$cat_count = $cat_count + 1;
}
//echo "[$key] => ", $value1, "<br>";
}
//echo "===============<br>";
}
if($person_count > 0) sg("test_event.value","person/".$from."/".$person_count,0,"detect_php");
if($dog_count > 0) sg("test_event.value","dog/".$from,0,"detect_php/".$img);
if($cat_count > 0) sg("test_event.value","cat/".$from,0,"detect_php/".$img);
|
FotoDetect
|
вызов после снапшота с параметром камера/распознает объекты
///////////////////////////////////////////
//вызов после снапшота с параметром камера
//image file
//распознает объекты
///////////////////////////////////////////
if($params['cam']) $cam = $params['cam'];
if($params['file']){
$file = $params['file'];
}else{
$file = gg($cam.'.snapshot');
$file = str_replace('./cms/',SERVER_ROOT.'/htdocs/cms/',$file);
}
if(file_exists($file)){
//safe_exec('python '.SERVER_ROOT.'/apps/py/dlod_new.py --from "' . $cam . '" --image '.$file);
runScriptSafe('detect_php',array("image"=>$file,"from"=>$cam));
//runScriptSafe('detection',array("image"=>$file,"from"=>$cam));
//померяем заодно яркость
//if($cam == 'cam4') sg('lux1_virt.value',lightsensor($file));
//if($cam == 'cam2') sg('lux2_virt.value',lightsensor($file));
}
|
FotoMail
|
smtpcatcher выкладывает фото, если режим Охрана, отсылаем сразу в телеграм, иначе -- просто сохраняем как фото последнего движения
// debmes('start FotoMail script!');
if($params['TEXT']){
//debmes('text '.$params['TEXT']);
$txt = $params['TEXT'];
}
if($params['TO']){
//debmes('TO '.$params['TO']);
$to = $params['TO'];
}
if($params['SUBJECT']){
$subj = $params['SUBJECT'];
}
if($params['FROM'])
{//FROM
$cam = explode('@',$params['FROM']);
$camn = $cam[0];
if(!$camn) return;
$mov = 0; //move flag
if($camn=='cam4' && stripos($txt, "alert")) {
if(time()-gg('noorelay1.updated')<5) return; //исключим срабатывание во время вкл/выкл света
$mov = 1;
}
if(($camn=='cam2' || $camn == 'dvr') && strpos($txt, "движенияСтарт")){
if(time()-gg('noorelay3.updated')<5) return; //исключим срабатывание во время вкл/выкл света
$mov = 1;
$camn = 'cam2';
}
if($camn=='besder1' && strpos($subj, "Motion Detection")){
$mov = 1;
$camn = 'cam3';
}
if($camn=='besder3' && strpos($subj, "Motion Detection")){
$mov = 1;
$camn = 'cam4';
}
if(!$mov) return; //no move
if($params['ATTACHEMENTS']) {
$att = $params['ATTACHEMENTS'];
$fn = DOC_ROOT.'/cms/cached/cam/'.$att;
if(gg('SecurityMode.active')){
//можно отослать в телеграм
include_once(DIR_MODULES.'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($txt);
$telegram_module->sendImageToAll($fn, 'Движение обнаружено');
//Say('Улыбайтесь, идет трансляция видео!');
}//TELEGRAM
$fileto = DOC_ROOT.'/cms/images/'.$camn.'.jpg';
if(copy($fn,$fileto)){
unlink($fn);
if(file_exists($fileto)){
runScriptSafe('FotoDetect',array('cam'=>$camn,'file'=>$fileto));
}
}
}//ATTACHEMENTS
}//FROM
|
InFile
|
//InFile
//runScript("InFile",array("subject"=>$subj, "body"=>$body, "filename"=>$filename ));
$date = gg("ThisComputer.DateNow");
$timeNow = gg("ThisComputer.timeNow");
$subject = $params['subject'];
$body = $params['body'];
$filename = $params['filename'];
$fp = fopen($filename , "a"); // Открываем файл
$test = fwrite($fp, $date." ".$timeNow." ");
$test = fwrite($fp, $subject." ");
$test = fwrite($fp, $body."\r\n");
fclose($fp); //Закрытие файла
|
morningGreeting
|
//say('Доброе утро!');
say( getRandomLine('hello'),2);
runScript('reportStatus');
runScript('say_check_state');
runScript('say_weather');
//runScript('sayAgenda');
|
refreshAllThermo
|
Обновим все термостаты
$objects = getObjectsByClass("NooThermostats");
foreach($objects as $obj) {
$trm = getObject($obj['TITLE']);
if($trm->getProperty("Auto"))
CallMethod($obj['TITLE'].".AutoOn");
}
|
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,2);
|
say_check_state
|
$sensors = getObjectsByProperty('alive','!=',1);
$count = 0;
foreach($sensors as $k=>$v) {
if (!gg($k.'.alive')) {
if (gg($k.'.alivetimeout')>0){
say("Не обновляется ".gg($v.'.name'),2);
$count += 1;
}
}
}
if($count == 0){
say("Все сенсоры активны.",2);
}
|
setMemo
|
Для шаблона Напомни разбор времени и установки напоминания
//для шаблона Напомни
if(!$params['txt']) return;
$cmd = $params['txt'];
//https://regexr.com/
//$cmd = 'в 11:30 дня в следующий вторник проверить кое-что';
//$cmd = 'проверить кое-что через четверть часа';
//$cmd = 'вечером в выходные проверить кое-что';
//$cmd = 'проверить кое-что в полдень послезавтра';
//$cmd = 'через два с половиной часа сделать кое-что';
//$cmd = 'сделать кое-что через два с половиной часа';
//$cmd = 'сегодня сделать кое-что';
debmes('setMemo - '.$cmd);
$cmd = mb_strtolower($cmd, 'utf-8');
$newtime = 0;
$newdate = 0;
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd); //уберём лишние пробелы
$chislo = array('один'=> '1','одну'=> '1','одни'=> '1','полтора' => '1.5','полторы' =>'1.5','два'=> '2','две'=> '2','двое'=> '2','три'=> '3','трое'=> '3','четыре'=> '4','четверо'=> '4','пять'=> '5','шесть'=> '6','семь'=> '7','восемь'=> '8','девять'=> '9');
$tim1 = array('минуту'=>'m','минуты'=>'m','минут'=>'m','часов'=>'H','часа'=>'H','час'=>'H','день'=>'D','дня'=>'D','дней'=>'D','сутки'=>'D','суток'=>'D');
$MonthNames = array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
//через?
if(preg_match('/через /isu', $cmd1)){
if(preg_match('/через полчаса/isu', $cmd1, $m)){
$cmd1 = str_replace('через полчаса','через 30 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через четверть часа/isu', $cmd1, $m)){
$cmd1 = str_replace('через четверть часа','через 15 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через (час|минуту|день|сутки)/isu', $cmd1, $m)){
$cmd1 = str_replace('через','через 1',$cmd1); //через час -> через 1 час
}
$half = 0;
if(preg_match('/(часов|часа|час) с половиной /isu', $cmd1, $m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
if(preg_match('/с половиной (часов|часа|час)/isu',$cmd1,$m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
if(preg_match('/через (.+) (часов|часа|час|минуты|минуту|минут|день|дня|дней|сутки|суток)/isu', $cmd1, $m)){
//print_r($m);
$cmd1 = str_replace($m[0],'',$cmd1);
foreach($chislo as $key => $value) {$m[1] = str_replace($key,$value,$m[1]);} //'один'=> '1'
foreach($tim1 as $key => $value) {$m[2] = str_replace($key,$value,$m[2]);} //'минуту'=>'m','минуты'=>'m'...
//вычислим новое время
$delta = (float)$m[1];
if($delta<=0){
echo('wrong interval '.$delta);
say('Непонятно! Попробуйте задать время по другому',2);
return;
}
switch ($m[2]){
case 'm':
$newtime = time() + $delta*60;//minutes
break;
case 'H':
$newtime = time() + $delta*60*60 + $half*60*60;//hours
break;
case 'D':
$newtime = time() + $delta*60*60*24;//days ToDo - add to calendar?
break;
default:
say('Непонятно! Попробуйте переформулировать задание',2);
return;
}
AddScheduledJob($cmd1,"playSound('r2d2',1); say('Вы просили напомнить ".$cmd1."',5);",$newtime, 60);
$nmes=date( "n" , $newtime)-1;
$nmonth=$MonthNames[$nmes];
debmes("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth);
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
return;
}
}
////////////////////////////////////////////////////////////////////
$newtime = time();
if(preg_match('/(сегодня|завтра|послезавтра)/isu', $cmd1, $m)){
switch($m[0]){
case 'завтра':
$newtime = strtotime("+1 day");
break;
case 'послезавтра':
$newtime = strtotime("+2 days");
break;
case 'сегодня':
$newtime = strtotime("+2 minute");
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
if(preg_match('/в (следующий|следующую|следующее|следующие) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
if(preg_match('/в (этот|эту|это|эти) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(в|во) (понедельник|вторник|среду|четверг|пятницу|субботу|воскресенье|выходные) /isu', $cmd1, $m)){
switch($m[2]){
case 'понедельник':
$newtime = strtotime("next Monday");
break;
case 'вторник':
$newtime = strtotime("next Tuesday");
break;
case 'среду':
$newtime = strtotime("next Wednesday");
break;
case 'четверг':
$newtime = strtotime("next Thursday");
break;
case 'пятницу':
$newtime = strtotime("next Friday");
break;
case 'субботу':
$newtime = strtotime("next Saturday");
break;
case 'воскресенье':
$newtime = strtotime("next Sunday");
break;
case 'выходные':
$newtime = strtotime("next Saturday");
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
//проверим время
if(preg_match('/в (полдень|полночь)/isu', $cmd1)){
$cmd1 = str_replace('в полдень','в 12:00',$cmd1);
$cmd1 = str_replace('в полночь','в 23:59',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(утром|вечером|днём|днем|ночью)/isu', $cmd1, $m)){ //напомни утром
$cmd2 = $m[0]; //для удаления
if(!preg_match('/в (\d+):(\d+)/isu', $cmd1)){ //
switch($cmd2){
case 'утром':
$newtimes = 'в 8:00';
break;
case 'вечером':
$newtimes = 'в 20:00';
break;
case 'днём':
$newtimes = 'в 13:00';
break;
case 'днем':
$newtimes = 'в 13:00';
break;
case 'ночью':
$newtimes = 'в 23:00';
break;
}
}
$cmd1 = str_replace($cmd2,$newtimes,$cmd1);
}
if(preg_match('/в (\d+):(\d+)/isu', $cmd1, $m)){
$hour = $m[1];
$minute = $m[2];
$cmd2 = $m[0]; //для удаления
if(preg_match('/в (\d+):(\d+) (ночи|дня|утра|вечера)/isu', $cmd1, $m)){
switch ($m[3]){
case 'дня':
if((int)$hour<12){$hour = $hour +12;} // в 3 часа дня = в 15:00
break;
case 'вечера':
if((int)$hour<12){$hour = $hour +12;} // в 6 часов вечера = в 18:00
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
$cmd1 = str_replace($cmd2,'',$cmd1);
$newtime = mktime( (int)$hour,(int)$minute,0,date("n",$newtime),date("j",$newtime), date("Y",$newtime));
if($newtime<time()){$newtime = strtotime(date('Y-m-d H:i',$newtime)."+ 1 days");}
}
AddScheduledJob($cmd1,"playSound('r2d2',1);sleep(2); say('Вы просили напомнить - ".$cmd1."',5);",$newtime, 60);
$nmes = date( "n" , $newtime)-1;
$nmonth = $MonthNames[$nmes];
debmes("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth);
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
//return;
|
setSergeyBat
|
if($params["charging"]>=0){
//debmes('setSergeyBat charg='.$params["charging"]);
sg('Sergey.Charging',(int)$params["charging"]);}
if($params["batt"]>0){
//debmes('setSergeyBat batt='.$params["batt"]);
sg('Sergey.BattLevel',(int)$params["batt"]);}
|
switchOffSystem
|
Перезагрузка Majordomo
say('Внимание, выключаюсь!', 2);
sleep(15);
safe_exec("c:\_majordomo\mdm_close.bat");
|
turnOffOutside
|
Выключим свет на улице
//выключим свет в саду
cm('grpOutside.callGroupMethod',array('mg'=>'turnOff'));
|
wiki
|
Запрашиваю у Wikipedia информацию $params['zapros'] https://mjdm.ru/forum/viewtopic.php?f=27&p=113924#p113924
$zap=$params['zapros']; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию - '.$zap,2);
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=query&list=search&srlimit=1&format=xml&srsearch='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->search->p->attributes();
$zapurl=urlencode($otvet['title']);
$url='https://ru.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->pages->page->extract;
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
if (empty($otvet)) { say ("Я не знаю такого слова",2);} else {
echo( $otvet);
//Оставляем первый абзац - начало
/*
preg_match_all('#<p[^>]*?>(.+?)</p>#su', $otvet, $res);
$abz= $res[0][0];
$kstr = array("\r\n", "\n", "\r"); $lch = substr(str_replace($kstr, '', strip_tags($abz)), -1);
if ( $lch!=':') $otvet=$abz;
*/
// Оставляем первый абзац - конец
say(strip_tags($otvet),2);
}
|
wiki_api
|
запрос у вики json
$zap = $params['zapros'];
say('Запрашиваю у Wikipedia информацию о '.$zap);
//$zap = '"Конец света 2013: Апокалипсис по-голливудски" (фильм)';
$zapurl = urlencode($zap);
$url = 'http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&format=json';
$answ = file_get_contents($url);
$answ = json_decode($answ);
$total = count($answ[1]);
if($total==0){
say('Ничего не найдено');
return;
}else{
$speak = 1;
//debmes('wiki_api $answ[0] '.$answ[0]);
for ($i = 0; $i < $total; $i++) {
if(substr($answ[2][$i],-1)==':') continue;//Уберём группу
$otvet = '';
//if($answ[1][$i]<>$answ[0]) $otvet = $answ[1][$i].': ';
$otvet = $otvet.$otvet.$answ[2][$i]; //.' ссылка:'.$answ[3][$i];
//избавимся от ударений
$otvet = iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet = iconv("CP1251","UTF-8",$otvet);
//избавимся от скобок
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
say($otvet,$speak);
if($speak==1) $speak = 0;//speak once
}
}
|
Курсы
|
Загрузка курсов валют с сайта ЦБР
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$val = str_replace(",",".",$valute);
//echo 'usd='.$val.'<br>';
sg("usd.value",$val);
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute = strval($xml[0]->Value);
$val = str_replace(",",".",$valute);
//echo 'eur='.$val;
sg("eur.value",$val);
|
Alice_DisLike
|
поставь дислайк
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'поставь дизлайк'));
|
Alice_findMyPhone
|
Autoremote plugin Tasker ищет телефон
$sPD2 = "https://autoremotejoaomgcd.appspot.com/sendmessage?key=cczVr3mDRZA:APA91bE4c5BMwHN6owOLVJC1k0ofKD5VNps7FbLnxCSwbq0JXjg2D-noGWHW363to1mZyziynSCYfSIGDquVVCA_Zp_0ADsTyjHc1QvtiAnwFueY8M6JhA47h1vI4cJ_HIQriZUQX16n&message=whereYou";
echo(geturl($sPD2,0));
//echo(geturl($sPD2,0));
|
Alice_Forward
|
дальше
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'дальше'));
|
Alice_Like
|
поставь лайк
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'поставь лайк'));
|
Alice_my_music
|
включи мою музыку
callAPI('/api/module/yadevices','GET',array('station'=>3,'command'=>'громкость 4'));
sleep(3);
callAPI('/api/module/yadevices','GET',array('station'=>3,'command'=>'включи плейлист дня'));
|
Alice_my_radio
|
включи моё радио
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'громкость 4'));
sleep(3);
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'включи радио Шоколад'));
//Шоколад
//Relax FM
|
Alice_sounds_of_nature
|
включи звуки природы
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'громкость 4'));
sleep(3);
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'включи звуки природы'));
|
Alice_stop
|
хватит
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'хватит'));
|
Alice_volume_Down
|
тише
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'сделай тише'));
|
Alice_volume_Up
|
громче
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'сделай громче'));
|
goodNight
|
Когда скажу Спокойной ночи (81)
//ответим
say("Хорошего сна!",2);
//гасим свет
//веранда сразу
//остальное с задержкой
//тв
//тихий режим
//штора
|
irbis70
|
//Как дела?
$txt = '';
$quet = 0; //если тихо
if(gg('ThisComputer.volumeLevel')<40) {
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'громкость 5'));
$quet = 1;
sleep(4);
}
//Астрономия
$txt .= "Сегодня - ".gg("ThisComputer.DayOfMonthNum")." ".gg("ThisComputer.MonthTXTalt").", ".gg("ThisComputer.DayOfWeekTXT").". ".gg("weather_my.type").". ";
$txt .= "Восход - в ".gg("weather_my.SunRise").", закат - в ".gg("weather_my.SunSet").". ";
$txt .= "Долгота дня ".gg("weather_my.LongTag").". ";
// moon
$txt .= "";
//
$tempw = abs(round(gg('weather_my.temp')));
$tempcels = GetNumberWord($tempw,array('градус','градуса','градусов'));
$txt .= 'Температура на улице: '.round(getGlobal('weather_my.temp'))." ".$tempcels .'. ';
//Климат
$tempw = round(getGlobal('Kitchen.Temperature'));
$txt .= ' Сейчас дома: '.$tempw.' '. GetNumberWord($tempw,array('градус','градуса','градусов')).', ';
$tempw = round(getGlobal('Bedroom.Humidity'));
$txt .= 'влажность: '.$tempw.' '. GetNumberWord($tempw,array('процент','процента','процентов')).'. ';
//Кто дома
$txt .= getGlobal('ThisComputer.somebodyHomeText');
$txt .= ".";
$txt = str_replace("..",".",$txt);
echo($txt.'<br>');
//echo( strlen($txt).' '.mb_strlen($txt,'UTF-8').'<br>');
sayto( $txt,5,'Irbis');
//say_irbis($txt);
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'выключи болталку'));
if($quet) {
callAPI('/api/module/yadevices','GET',array('station'=>1,'command'=>'громкость 3'));
}
|
irbisTV
|
Установим канал на тв (кухня) rs('IrbisTV',array('channel'=>15));
$ch = 15;
if($params['channel']) $ch = (int)$params['channel'];
//из шаблона Включи канал
//Включен ли ТВ на кухне?
if(gg('Samsung.status')=='0'){
say('Включаю тв на кухне');
brLinkCommand('pro_ch_plus');
sleep(7);
}
//установим громкость 5
for($i=30;$i>0;$i--){
brLinkCommand('pro_vol_down');
}
brLinkCommand('pro_vol_up');
brLinkCommand('pro_vol_up');
brLinkCommand('pro_vol_up');
brLinkCommand('pro_vol_up');
brLinkCommand('pro_vol_up');
sg('Samsung.volume',5);
//выберем вход ТВ
brLinkCommand('pro_sel_tv');
say('Выбираю вход тв');
sleep(1);
$channel = str_split($ch);
foreach($channel as $number) {
brLinkCommand('pro_b'.(int)$number);
usleep(300000);
}
sg('Samsung.channel',$ch);
//say('Устанавливаю канал №'.$ch.' на тв');
$rec = SQLSelectOne('SELECT `ch_name` FROM `tv_channels` WHERE `loc_channel` like "'.$ch.'"');
if($rec){
say('Включаю канал «'.$rec['ch_name'].'»',1);
}else{
say('Включаю канал номер '.$ch,1);
}
|
make_ya_sc
|
require_once(DIR_MODULES.'/yadevices/yadevices.class.php');
$class = new yadevices();
$class->addScenarios();
|
test_mini
|
require_once(DIR_MODULES.'/yadevices/yadevices.class.php');
$class = new yadevices();
$status = $class->getStatus('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJnbGFnb2wiLCJleHAiOjE2NDUzNTA5OTEsImlzcyI6InF1YXNhci1iYWNrZW5kIiwicGx0IjoieWFuZGV4bWluaV8yIiwic3ViIjoiTUcwMDAwMDAwMDAwMDAwMDIzMjMwMDAwN2I5ZWI5NGQifQ.-4KysWeJ1RZ6qrbk3cQCh5LNDxQC0aqIVM8dDJ1-8Bo', '192.168.1.31');
echo '<pre>';
var_dump($status);
|
test_tts_effect
|
$ph = "повтори за мной Гриша, ешь курицу!";
callAPI('/api/module/yadevices','GET',array('station'=>2,'command'=>$ph,'effect'=>"hampster"));
|
Включить подсветку в кабинете
|
cm("tsmRelay10.turnOn");
cm("tsmRelay9.turnOn");
//say("Включена подсветка в кабинете");
|
Выключить подсветку в кабинете
|
cm("tsmRelay10.turnOff");
cm("tsmRelay9.turnOff");
say("Выключена подсветка в кабинете");
|
cmd2relay
|
Скрипт передает команду в течение таймаута до выхода по ошибке перезапуская себя пока не прийдет подтверждение о приеме команды или не кончится таймаут ошибки
$dt = $params['cmd'];
$wd = $params['wd'];
if(timeoutexists($wd)){
getURLBackground("http://192.168.1.40/msg?cmd=<".$dt.">",0);
SetTimeOut($wd.'_'.time(),"rs('cmd2relay',array('cmd'=>'".$dt."','wd'=>'".$wd."'));",2);
//debmes('to esp -><'.$dt.'>');
}else{
return;
}
|
foto_esp
|
$fn = DOC_ROOT.'/cms/cached/img/timer_espcam_1.jpg';
$fileto = DOC_ROOT.'/cms/images/esp1.jpg';
if(copy($fn,$fileto)){
//@unlink($fn);
if(file_exists($fileto)){
runScriptSafe('FotoDetect',array('cam'=>'esp0','file'=>$fileto));
}
}
//debmes("run script foto_esp to detect photo");
|
myesp
|
//debmes('myesp start');
if(isset($params['p1'])){
$p1 = $params['p1'];
if(substr($p1,0,3)=="esp"){
$id = substr($p1,3);
callMethod('esp'.$id.'.input');
}
}
$status='OK';
if(isset($params['p2'])){ $p2=$params['p2'];}
if(isset($params['c'])){ $cmd=$params['c'];}
if(isset($params['m'])) { $mod=$params['m'];}
if(isset($params['a'])) { $adr=$params['a'];}
if(isset($params['s'])) { $status=$params['s'];}else{$status='OK';}
if(isset($params['v'])) { $value=$params['v'];}
if(isset($params['t'])) { $t=$params['t'];}else{$t=0;}
if(isset($params['p'])) { $pin=$params['p'];}
//if(isset($params['m'])) {
//debmes('from esp'.$id.' p2='.$p2.' cmd='.$cmd.' mod='.$mod.' adr='.$adr.' v='.$value.' st='.$status.' t='.$t.' pin='.$pin);
//}
if($p2=="uart"){
if($cmd=="Noo"&&$status=="OK"&&timeOutExists("noo_".$t)){
ClearTimeOut("noo_".$t);
return;
}
sg('mod240.alive',1);
//fractal modules
if(isset($mod)){
if($status=='Err'){
sg('mod'.$mod.'.alive',0);
return;
}else{
if($cmd<>"Say"&&timeOutExists("mod_".$t)){
ClearTimeOut("mod_".$t);
}
sg('mod'.$mod.'.alive',1);
}
if(($adr%4==0)&&isset($value)){
sg("mod".$mod.".adr".$adr,$value);
}
}
//реле всё-таки сработало
if($cmd=='SetRelay'&&$status=="OK"){
$rel='mod'.$mod.'_'.$adr;
if($value>0){$v=1;}else{$v=0;}//status on/off
sg($rel.'.status',$v);
return;
}
//motiondetect5
if($mod=='5'&&$adr=='56'){
if($value==1){ //new
//sg('motiondetect5.value',1);
//setTimeOut('md5_spec',"sg('motiondetect5.value',0);",2*60); //new
} //new
return;
}
//tempMod5
if($mod=='5'&&$adr=='88'){
if($value>-100&&$value<>85){
if($value>0) {$value='+'.round($value);}
//sg('tempMod5.value',$value,2);
return;
}else{
debmes('Err tempMod5='.$value);
return;
}
}
//humidity00
if($mod=='5'&&$adr=='92'){
// sg('humidity00.value',round($value));
}
}
|
newWebCamShoot
|
from ftp for cam2 snapshot only
//from ftp for cam2 only
//откуда
$filename = $params['FILENAME'];
//куда
$fileto = ROOT.'cms/images/cam2.jpg';
if(copy($filename,$fileto)) ulink($filename);//clean
$filename = $fileto;
$fileto = './cms/images/snapshots/cam2_'.date('Y-m-d-H-i').'.jpg';//for snapshot
if(copy($filename,$fileto)){
sg('cam2.snaphot',$fileto);
}
|
noodata
|
DebMes("Noodata: ".$_SERVER['REQUEST_URI']);
$o=$params['name'];
$cmd=$params['cmd'];
$m='';
if ($cmd==4) {
$m='onSwitch';
} elseif ($cmd==0) {
$m='onTurnOff';
} elseif ($cmd==2) {
$m='onTurnOn';
} elseif ($cmd==5) {
$m='onBrightBack';
} elseif ($cmd==7) {
$m='onLoadPreset';
} elseif ($cmd==10) {
$m='onStopReg';
} elseif ($cmd==16) {
$m='onLoadPreset';
} elseif ($cmd==17) {
$m='onSwitchColor';
} elseif ($cmd==18) {
$m='onSwitchMode';
} elseif ($cmd==19) {
$m='onSpeedMode';
} elseif ($cmd==20) {
$m='onBatteryLow';
} elseif ($cmd==21) {
$m='onTemp';
}
debmes('noo -> '.$o.'.'.$m);
if ($o!='' && $m!='') {
if ($m=='onBatteryLow') {
say('Низкий заряд батарейки у датчика '.$o);
sg('GlobalMsg.text','Низкий заряд батарейки у датчика '.$o);
sg('GlobalMsg.priority',2);
sg('GlobalMsg.enable',1);
registerEvent('BatteryLow', $details=$o.' BatteryLow',$expire_in=365);
}
if (preg_match('/motion/is',$o) && ($m=='onTurnOn')) {
sg($o.'.value',1);
} elseif (preg_match('/motion/is',$o) && ($m=='onTurnOff')) {
sg($o.'.value',0);
} elseif ($m=='onTemp') {
$b1 =(int)str_replace('-','',$params['d0']);
$b2 =(int)str_replace('-','',$params['d1']);
$y_temp=256*($b2 & 15)+$b1;
if (($b2 & 8) != 0 ) { // отрицательное значение температуры
$y_temp=4096-$y_temp;
$temp = -1*($y_temp)/10;
} else { // положительное значение температуры
$temp =round($y_temp/10);
$temp='+'.$temp;
}
sg($o.'.value',$temp);
}else{
callMethod($o.'.'.$m);
}
}
|
noodataF_redis
|
SaveToCache('Noo:NooCmd',time());
//Noodata: /api/script/noodata?mode=1&ansv=0&togl=36&cell=1&cmd=0&fmt=0&d0=0&d1=0&d2=0&d3=0&id=0x00000000
$mode = $params['mode'];//0 nooLite TX/1 nooLite RX/2 nooLite-F TX/3 nooLite-F RX/4 – сервисный режим работы с nooLite-F/5 upd software
$ansv = $params['ansv'];//0-ok/1-no answer/2-error on work/3-bind ok
$togl = $params['togl'];
$cell = $params['cell'];
$cmd = (int)$params['cmd'];
$fmt = $params['fmt'];
$d0 = $params['d0'];
$d1 = $params['d1'];
$d2 = $params['d2'];
$d3 = $params['d3'];
$id = str_replace('0x','',$params['id']);
//check lost commands
if($mode == 0 && $cmd == 128) return; // wtf?
if($mode == 1){ //датчики и пульты MODE=RX
//$toglWait = (registeredEventDetails('NooToggle')+ 1)%64;
$toglWait = (checkFromCache('Noo:Toggle')+ 1)%64;
//$toglWait = (getGlobal('ThisComputer.NooToggle') + 1)%64;
if($togl<>$toglWait){
debmes('Lost Noo cmd! #togl='.$togl.', wait for '.$toglWait,'noolite');
}
//registerEvent("NooToggle",$togl);
SaveToCache('Noo:Toggle',$togl);
//$id = '00000000';//исправим глюк nooliteONE
}
$m = '';
//find command
$cmds = array(
0=>"onTurnOff",1=>"onBrightDown",2=>"onTurnOn",3=>"onBrightUp",
4=>"onSwitch",5=>"onBrightBack",6=>"onSetBrightness",7=>"onLoadPreset",
8=>"onSavePreset",9=>"onUnbind",10=>"onStopReg",11=>"onBrightStepDown",
12=>"onBrightStepUp",13=>"onBrightReg",15=>"onBind",16=>"onRollColour",
17=>"onSwitchColour",18=>"onSwitchMode",19=>"onSpeedModeBack",20=>"onBatteryLow",
21=>"onTemp",25=>"onTemporaryOn",26=>"onModes",128=>"onReadState",
129=>"onWriteState",130=>"onSendState",131=>"onService",132=>"onClearMemory",
);
if(IsSet($cmds[$cmd])){
$m = $cmds[$cmd];
}else{
//debmes("Not find Noo command #".$cmd);
registerError('noo_error', "Not find Noo command #".$cmd);
return;
}
//find object
//$oo = SQLSelectOne("SELECT * FROM `noomodules` WHERE CH=$cell and `ADDR`='". $id."'");
$tmm0 = getmicrotime();
$redis = new Redis();
$redis->connect(USE_REDIS);
$ooo = $redis->get("NOOD:".$cell.".".$id);
$redis->close();
DebMes('noo redis '.((real)getmicrotime()-(real)$tmm0),'noolite');
if($ooo){
$oo = explode("/",$ooo);
$o = $oo[0];
$otype = $oo[1];//есть в свойствах объекта
$onote = $oo[2];//есть в свойствах объекта
$obj = getObject($o);
unset($oo);
}else{
registerError('noo_error', "Not find Noo object for ch#".$cell." addr=".$id);
return;
}
$msg = str_replace("/api/script/noodataF?","",$_SERVER['REQUEST_URI']);
DebMes("NoodataF<-: ".$msg." $o",'noolite');
//обработаем ошибку
if($ansv <> 0){
debmes('nooF ERROR '.$_SERVER['REQUEST_URI'],'noolite');
if($cmd == 130 && $id == '00000000') return; // wtf?
if($mode == 2 && $id == '00000000') return; // wtf?
registerError('noo_error', 'nooF ERROR ANSW-> '.$ansv.' '.$o.'.'.$m.' note='.$onote);
//registerEvent("nooError/".$o."/".$m,$onote);
//sg($o.'.status',2);//todo 20200619 check status again?
return;
}
//debmes('nooF -> '.$o.'.'.$m.' type='.$otype.' note='.$onote);
if ($o != '' && $m != '') {//PULT,SENSOR
if ($m == 'onBatteryLow') {
say('Низкий заряд батарейки у датчика '.$o);
registerEvent('BatteryLow/'.$o, $details = $o.' BatteryLow',$expire_in=365);
return;
}
$pos = stripos($o,'motion');
if (($pos !== false) && ($m == 'onTurnOn')) {//SENSOR motiondetect
if($obj->getproperty('type') == 'impulse'){//PK314 special -> off no deal
return;
}
//sg($o.'.value',1);
$obj->setProperty("value", 1, 0,'noodataF');
return;
} elseif (($pos !== false) && ($m =='onTurnOff')) {
if($obj->getproperty('type') == 'impulse'){//PK314 special -> on
$obj->setProperty("value", 1, 0,'noodataF');
return;
}
$obj->setProperty("value", 0, 0,'noodataF');
} elseif ($cmd == 21) {//SENSOR temperature
$b1 =(int)str_replace('-','',$d0);
$b2 =(int)str_replace('-','',$d1);
$y_temp=256*($b2 & 15)+$b1;
if (($b2 & 8) != 0 ) { // отрицательное значение температуры
$y_temp=4096-$y_temp;
$temp = -1*($y_temp)/10;
}else{ // положительное значение температуры
$temp = round($y_temp/10);
//$temp='+'.$temp;
}
//debmes('temp='.$temp);
$obj->setProperty("value",$temp, 0,'noodataF');
}elseif ($cmd == 130){ //POWER_F THERMO_F
if($d0 == 6){//THERMO_F
//sg($o.'.temp',$d3);//THERMO_F temperature
$obj->setProperty("temp",$d3, 0,'noodataF');
//если вкл($d2 бит 0==1) режим авто, иначе выкл
$auto = $d2 & 1; //check 0 bit
$obj->setProperty("auto",$auto, 0,'noodataF');
if($auto){//при режиме авто статус $d2 бит 4==1 нагрев вкл, ==0 нагрев выкл
$obj->setProperty("status",($d2 & 16)==16?1:0, 0,'noodataF');
//$obj->setProperty("status_txt",($d2 & 16)==16?'ON':'OFF', 0,'noodataF');
}else{
$obj->setProperty("status",0, 0,'noodataF');
//$obj->setProperty("status_txt",'OFF', 0,'noodataF');
}
}elseif($d0 == 3 || $d0 == 4 || $d0 == 5){ //POWER_F
$obj->setProperty("status",$d2==0?0:1, 0,'noodataF');
//$obj->setProperty("status_txt",$d2==0?'OFF':'ON', 0,'noodataF');
}
}elseif($otype == 'PULT' || $otype == 'SENSOR'){
callMethod($o.'.'.$m);//PULT yes
}elseif($m == 'onTurnOn'||$m == 'onBrightUp'||$m == 'onBrightStepUp'){//else DIMMER RGB POWER
$obj->setProperty("status",1, 0,'noodataF');
//$obj->setProperty("status_txt",'ON', 0,'noodataF');
}elseif($m == 'onTurnOff'||$m == 'onBrightDown'){//else DIMMER?? RGB POWER
$obj->setProperty("status",0, 0,'noodataF');
//$obj->setProperty("status_txt",'OFF', 0,'noodataF');
}elseif($m == 'onSetBrightness'){// DIMMER
if($obj->getProperty("brightness")==0){
$obj->setProperty("status",0, 0,'noodataF');
//$obj->setProperty("status_txt",'OFF', 0,'noodataF');
}else{
$obj->setProperty("status",1, 0,'noodataF');
//$obj->setProperty("status_txt",'ON', 0,'noodataF');
}
}
}
|
nooPoll
|
$sql = "SELECT * FROM `noomodules` where `POLL`>0 order by `POLL`";
$recs = SQLSelect($sql);
if(is_array($recs)){
foreach ($recs as $rec)
{
$noo = $rec['LINKED_OBJ'];
if(!TimeOutExists("nooPoll".$noo)){
$cmd = 'sendNooAPICmd("2 0 0 '.$rec['CH'].' 128 0 0 0 0 0 00000000 0","'.$noo.'");rs("nooPoll");';
setTimeOut("nooPoll".$noo,$cmd,$rec['POLL']);
}
}
}
|
SetAliveOffForAll
|
всех убьём!
//всех убьём!
$bridge='esp8920510';
$objects=getObjectsByProperty('alive');
foreach($objects as $obj) {
sg($obj.'.alive',0);
}
//теперь поищем живых
//обновим мост esp+mod240 alive?
//test GetValue(0) for each module
$rnd=rand(100,9999);
$cmd='5/240/0///'.$rnd.'/';
cm($bridge.'.output',array("out"=>$cmd));
sleep (5);
$objects=getObjectsByClass("Module");
foreach($objects as $obj) {
$rnd=rand(100,9999);
$cmd="5/".gg($obj['TITLE'].".Addr")."/0///".$rnd."/";
cm($bridge.'.output',array("out"=>$cmd));
sleep (5);
}
|
test_yadev
|
include_once(DIR_MODULES . 'yadevices/yadevices.class.php');
$yadevices = new yadevices();
$t=time();
$yadevices->refreshStations();
$yadevices->refreshDevicesData();
echo time()-$t;
|