Свойства класса:
Методы класса:
Объекты класса:
// это однократный будильник, выключем его sg("AlarmOne.AlarmOn",0); say('Пора вставать!', 3); // включим радио //callMethod("Radio.RadioPlay"); // запланируем выключить радио через 1час //SetTimeOut("AlarmOne_RadioStop",'callMethod("Radio.RadioStop");', 3600); //Включим телевизор callMethod("ToshibaTV.turnOn"); //Запланируем переключить канал, когда телефизор включится SetTimeOut("AlarmOne_TV_setChanel",'callMethod("ToshibaTV.setChanel", array("chanel"=>"12"));', 13); // запланируем выключить телевизор через 1.5 часа //SetTimeOut("AlarmOne_TVoff",'callMethod("ToshibaTV.turnOff");', 5400);
//if (isWeekEnd()) { // сегодня выходной день if (!gg('today.isWeekDay') && gg('SleepAllMode.active')) { // сегодня выходной день say('Пора вставать!', 3); // включим радио //callMethod("Radio.RadioPlay"); // запланируем выключить радио //SetTimeOut("AlarmWeekEnd_RadioStop",'callMethod("Radio.RadioStop");', 60*60); //Включим телевизор callMethod("ToshibaTV.turnOn"); //Запланируем переключить канал, когда телефизор включится SetTimeOut("AlarmWeekEnd_TV_setChanel",'callMethod("ToshibaTV.setChanel", array("chanel"=>"12"));', 13); // запланируем выключить телевизор через 1.5 часа //SetTimeOut("AlarmWeekEnd_TVoff",'callMethod("ToshibaTV.turnOff");', 5400); }
//if (isWeekDay()) { // сегодня рабочий день if (gg('today.isWeekDay') && gg('SleepAllMode.active')) { // сегодня рабочий день say('Пора вставать!', 3); // включим радио //callMethod("Radio.RadioPlay"); // запланируем выключить радио //SetTimeOut("AlarmWeekEnd_RadioStop",'callMethod("Radio.RadioStop");', 60*60); //Включим телевизор callMethod("ToshibaTV.turnOn"); //Запланируем переключить канал, когда телефизор включится SetTimeOut("AlarmWeekDay_TV_setChanel",'callMethod("ToshibaTV.setChanel", array("chanel"=>"12"));', 13); //SetTimeOut("AlarmWeekDay_TVoff",'callMethod("ToshibaTV.turnOff");', 5400); }
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
Объекты класса:
$cookie_file = ROOT . 'cached/dialog_cookie.txt'; //в этом файле будет храниться сессия $url = 'https://customer.licard.ru/api/user/login'; // ссылка, по которой нам надо зайти // задаём поля, которые будут отправлены при логине $fields = array( 'login' => $this->getProperty('login'), // номер карты 'password' => $this->getProperty('password'), //пароль ); $fields_string = json_encode($fields); $header = array('Accept: text/html,application/xhtml+xml,application/xml,application/vnd.licard-b2c.v1+json;q=0.9,*/*;q=0.8', 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', 'Connection: keep-alive', 'Accept-Encoding: gzip, deflate', 'Content-Type: application/json;charset=UTF-8', 'User-Agent: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+', 'Referer: baseurl' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = gzdecode(curl_exec($ch)); curl_close($ch); //@unlink($cookie_file); $res_array = json_decode($result, true); $this->setProperty('cardnumber', $res_array['user']['cardnumber']); $this->setProperty('score', $res_array['user']['cardbalance']); $this->setProperty('cardstatus', $res_array['user']['cardstatus']); $this->setProperty('clientstatus', $res_array['user']['clientstatus']); $tm = time(); $this->setProperty('UpdateTimeStamp', $tm); $this->setProperty('updatedText', date("Y-m-d H:i", $tm));
if ($params['NEW_VALUE'] > $params['OLD_VALUE']) { //Пополнили баланс $delta = $params['NEW_VALUE'] - $params['OLD_VALUE']; say('Бонусный баланс карты лукойл пополнен на ' . chti($delta, 'балл.', 'балла.', 'баллов.') . ' Текущий баланс ' . chti((int)$params['NEW_VALUE'], 'балл.', 'балла.', 'баллов.')); } elseif (($params['NEW_VALUE'] < $params['OLD_VALUE'])) { //Списали с баланса $delta = $params['OLD_VALUE'] - $params['NEW_VALUE']; say('C бонусного баланса карты лукойл списано ' . chti($delta, 'балл.', 'балла.', 'баллов.') . ' Текущий баланс ' . chti((int)$params['NEW_VALUE'], 'балл.', 'балла.', 'баллов.')); }
if ($params['NEW_VALUE'] < 0) { if (timeBetween("10:00", "22:00")) { say('Аничка, баланс интернета составляет '. chti((int)$params['NEW_VALUE'], 'рубль', 'рубля', 'рублей') . '. Заплати, а то отключат через ' . chti((int)$this->getProperty("payDay"), 'день!', 'дня!', 'дней!')); } }
$cookie_file = ROOT . 'cached/dialog_cookie.txt'; //в этом файле будет храниться сессия $url = 'https://billing.bks.tv:9443/index.cgi'; // ссылка, по которой нам надо зайти // задаём поля, которые будут отправлены при логине $fields = array( 'DOMAIN_ID' => '', 'REFERRER' => 'https://billing.bks.tv:9443/', 'language' => 'russian', 'user' => $this->getProperty('login'), // логин 'passwd' => $this->getProperty('password'), // пароль 'logined' => 'Войти '); $fields_string = ''; foreach ($fields as $key => $value) { $fields_string .= $key . '=' . urlencode($value) . '&'; } rtrim($fields_string, '&'); $header = array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3', 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', 'Connection: keep-alive', 'User-Agent: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+', 'Referer: https://billing.bks.tv:9443/index.cgi' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); //@unlink($cookie_file); preg_match('/Депозит:(?:[^>]*>){3}([^<]+)/i', $result, $matches); //$this->setProperty('score', trim(strip_tags($matches[1]))); $this->setProperty('score', trim(strip_tags($matches[1])," \xC2\xA0")); preg_match('/ФИО:(?:[^>]*>){3}([^<]+)/i', $result, $matches); $this->setProperty('fio', strip_tags($matches[1])); preg_match('/Скидка:(?:[^>]*>){3}([^<]+)Дата/i', $result, $matches); $this->setProperty('discount', strip_tags($matches[1])); preg_match('/Статус:(?:[^>]*>){3}([^<]+)/i', $result, $matches); $this->setProperty('status', strip_tags($matches[1])); preg_match('/Тарифный план:(?:[^>]*>){2}([\s\S]*?)<\//i', $result, $matches); $this->setProperty('tarif', strip_tags($matches[1])); preg_match('/<td>IP:[\s]*<\/td>[\s]*<td>([\s\S]*?)<\/td>/i', $result, $matches); $this->setProperty('ip', strip_tags($matches[1])); //preg_match('/<h3> следующее списание через [\s]*([\s\S]*?)дн.*<\/h3>/i', $result, $matches); preg_match('/следующее списание через [\s]*([\s\S]*?)дн.*/i', $result, $matches); $this->setProperty('payDay', strip_tags($matches[1])); $tm = time(); $this->setProperty('UpdateTimeStamp', $tm); $this->setProperty('updatedText', date("Y-m-d H:i", $tm));
$cookie_file = ROOT . 'cached/dialog_cookie.txt'; //в этом файле будет храниться сессия // STEP 1 -- LOGIN $url = 'https://avtodor-tr.ru/account/login'; // ссылка, по которой нам надо зайти // задаём поля, которые будут отправлены при логине $fields = array( 'email' => $this->getProperty('login'), // мыло 'password' => $this->getProperty('password'), // пароль 'submit0' => 'Подождите...', 'return_url' => 'https://avtodor-tr.ru/account'); $fields_string = ''; foreach ($fields as $key => $value) { $fields_string .= $key . '=' . urlencode($value) . '&'; } rtrim($fields_string, '&'); //Формируем заголовки $header = array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3', 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', 'Connection: keep-alive', 'Origin: https://avtodor-ts.ru', 'User-Agent: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+', 'Referer: https://avtodor-tr.ru/account/login' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); // STEP 2 -- GET DATA $url = 'https://avtodor-tr.ru/account'; // это собственно страница, на которую нам надо заходить уже залогинившись $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); //@unlink($cookie_file); preg_match('/<td>Баланс<\/td>[\s\S]*<td>([\s\S]*)<span class="alsrub">i<\/span><\/td>/i', $result, $matches); $this->setProperty('score', $matches[1]); preg_match('/<td>Договор[\s]*<\/td>[\s]*<td>([\s\S]*?)<\/td>/i', $result, $matches); $this->setProperty('number', $matches[1]); $tm = time(); $this->setProperty('UpdateTimeStamp', $tm); $this->setProperty('updatedText', date("Y-m-d H:i", $tm));
if ($params['NEW_VALUE'] > $params['OLD_VALUE']) { //Пополнили баланс $delta = $params['NEW_VALUE'] - $params['OLD_VALUE']; say('Баланс транспондера для проезда по платным дорогам пополнен на ' . chti($delta, 'рубль.', 'рубля.', 'рублей.') . ' Текущий баланс ' . chti((int)$params['NEW_VALUE'], 'рубль.', 'рубля.', 'рублей.')); } elseif (($params['NEW_VALUE'] < $params['OLD_VALUE'])) { //Списали с баланса $delta = $params['OLD_VALUE'] - $params['NEW_VALUE']; say('C транспондера для проезда по платным дорогам списано ' . chti($delta, 'рубль.', 'рубля.', 'рублей.') . ' Текущий баланс ' . chti((int)$params['NEW_VALUE'], 'рубль.', 'рубля.', 'рублей.')); }
$cookie_file = ROOT . 'cached/dialog_cookie.txt'; //в этом файле будет храниться сессия //$cookie_file = 'dialog_cookie.txt'; //в этом файле будет храниться сессия // STEP 1 -- LOGIN $url = 'https://lk.beeline.ru'; // ссылка, по которой нам надо зайти // задаём поля, которые будут отправлены при логине $fields = array( 'login' => $this->getProperty('login'), // номер телефона 'password' => $this->getProperty('password'), // пароль 'check' => '1'); $fields_string = ''; foreach ($fields as $key => $value) { $fields_string .= $key . '=' . urlencode($value) . '&'; } rtrim($fields_string, '&'); $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); // STEP 2 -- GET DATA $url = 'https://lk.beeline.ru/personal/'; // это собственно страница, на которую нам надо заходить уже залогинившись $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); //SaveFile(ROOT . 'cached/dialog_result.txt', $result); // сохранять в файл не обязательно, это я делаю просто для того чтобы посмотреть что внутри @unlink($cookie_file); $balance = '1'; $endDate = ''; $paySumm = ''; $doc = new DOMDocument(); @$doc->loadHTML($result); $xpath = new DOMXpath($doc); $description = array(); $values = array(); $descriptionDom = $xpath->query('//span[@class="personal_html_inner_usluga_name"]'); if ($descriptionDom->length > 0) { foreach ($descriptionDom as $item) { $description[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue)); } } $valuesDom = $xpath->query('//span[@class="personal_html_inner_usluga_status"]'); if ($valuesDom->length > 0) { foreach ($valuesDom as $item) { $values[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue)); } } $deathLine = date_parse_from_format("j.n.Y H:iP", $values[array_search('Дата окончания расчетного периода', $description)].'+03:00'); $this->setProperty('PaymentData', $deathLine['day'].'.'.$deathLine['month']); $balance = strip_tags($values[array_search('Текущий баланс', $description)]); $balance = str_replace(' ', '', $balance); $balance = str_replace('руб.', '', $balance); $this->setProperty('score', $balance); $paySumm = strip_tags($values[array_search('Сумма к оплате', $description)]); $paySumm = str_replace(' ', '', $paySumm); $paySumm = str_replace('руб.', '', $paySumm); $this->setProperty('PaymentSum', $paySumm); $this->setProperty('UpdateTimeStamp', time());
$timeNow = time(); $this->setProperty('UpdateTimeStamp', $timeNow);
namespace Zadarma_API; use Exception; class Client { const PROD_URL = 'https://api.zadarma.com'; const SANDBOX_URL = 'https://api-sandbox.zadarma.com'; private $_url; private $_key; private $_secret; private $_httpCode; private $_limits = array(); /** * @param $key * @param $secret * @param bool|false $isSandbox */ public function __construct($key, $secret, $isSandbox = false) { $this->_url = ($isSandbox) ? self::SANDBOX_URL : self::PROD_URL; $this->_key = $key; $this->_secret = $secret; } /** * @param $method - API method, including version number * @param array $params - Query params * @param string $requestType - (get|post|put|delete) * @param string $format - (json|xml) * @param bool|true $isAuth * * @return mixed * @throws Exception * */ public function call($method, $params = array(), $requestType = 'get', $format = 'json', $isAuth = true) { if (!is_array($params)) { throw new Exception('Query params must be an array.'); } $type = strtoupper($requestType); if (!in_array($type, array('GET', 'POST', 'PUT', 'DELETE'))) { $type = 'GET'; } $params['format'] = $format; $options = array( CURLOPT_URL => $this->_url . $method, CURLOPT_CUSTOMREQUEST => $type, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HEADERFUNCTION => array($this, '_parseHeaders') ); $ch = curl_init(); if ($type == 'GET') { $options[CURLOPT_URL] = $this->_url . $method . '?' . http_build_query($params); } else { $options[CURLOPT_POST] = true; $options[CURLOPT_POSTFIELDS] = http_build_query($params); } if ($isAuth) { $options[CURLOPT_HTTPHEADER] = $this->_getAuthHeader($method, $params); } curl_setopt_array($ch, $options); $response = curl_exec($ch); $error = curl_error($ch); $this->_httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($error) { throw new Exception($error); } return $response; } /** * @return int */ public function getHttpCode() { return $this->_httpCode; } /** * @return array */ public function getLimits() { return $this->_limits; } /** * @param $method * @param $params * * @return array */ private function _getAuthHeader($method, $params) { ksort($params); $paramsString = http_build_query($params); $signature = base64_encode(hash_hmac('sha1', $method . $paramsString . md5($paramsString), $this->_secret)); return array('Authorization: ' . $this->_key . ':' . $signature); } /** * @param $curl * @param $line * * @return int */ private function _parseHeaders($curl, $line) { if (preg_match('/^X-RateLimit-([a-z]+):\s([0-9]+)/i', $line, $match)) { $this->_limits[$match[1]] = (int) $match[2]; } return strlen($line); } } $zd = new \Zadarma_API\Client($this->getProperty('login'), $this->getProperty('password')); $answer = $zd->call('/v1/info/balance/'); $answerObject = json_decode($answer); if ($answerObject->status == 'success') { //echo 'Your balance is ' . $answerObject->balance . ' ' . $answerObject->currency; $this->setProperty('score', $answerObject->balance); $this->setProperty('currency', $answerObject->currency); $tm = time(); $this->setProperty('UpdateTimeStamp', $tm); $this->setProperty('updatedText', date("Y-m-d H:i", $tm)); } /* echo 'Limits: '; print_r($zd->getLimits()); */
//$prevRun -- время последнего вызова (в формате timestamp) //$prevRunPassed -- сколько секунд прошло с последнего вызова //$params['PROPERTY'] -- текстовое имя изменяемого свойства //$params['NEW_VALUE'] -- присваиваемое значение //$params['OLD_VALUE'] -- предыдущее значение //$score = (float)$this->getProperty("score"); $payNotice = $this->getProperty("PayNoticeTimeStamp"); $timeNow = time(); $this->setProperty('UpdateTimeStamp', $timeNow); if ($params['NEW_VALUE'] < 15 && $params['NEW_VALUE'] != $params['OLD_VALUE']) { if (timeBetween("10:00", "22:00")) { if (($timeNow - $payNotice) > 10800) { $mes = "Аничка, привет! Это Элис звонит. У меня заканчиваются денюжки на телефоне, сейчас у меня на счету " . chti((int)$params['NEW_VALUE'], 'рубль', 'рубля', 'рублей') . ", положи рублей 200, пожалуйста. Спасибо. Целую-обнимаю. Пока!"; runScript('CallAsterisk', array('text' => $mes, 'phone' => gg('Anna.PhoneNumber'))); runScript('TelegramMessage', array('message' => 'Напоминаю Аничке пополнить мне счет!', 'id' => gg('Me.TelegramId'))); $this->setProperty("PayNoticeTimeStamp", $timeNow); } } }
Свойства класса:
Методы класса:
$this->setProperty('volumeLevel',$params['VALUE']); safe_exec('amixer -q -c 0 -- sset Master '.$params['VALUE'].'%'); say("Изменилась громкость до ".$params['VALUE']." процентов");
Объекты класса:
say("Отключено питание");
/*if (isset($params['command'])) { $command = $params['command']; } else { $sqlQuery = "SELECT shouts.MESSAGE FROM shouts WHERE shouts.MEMBER_ID = 1 ORDER BY shouts.ADDED DESC, ID DESC LIMIT 1"; $res = SQLSelectOne($sqlQuery); $command = $res['MESSAGE']; }*/ $command = $params['command']; $short_command=''; $dt=recognizeTime($command,$short_command); if (preg_match('/скажи сколько время/is',$command)) { if ($dt>0) { addScheduledJob("command".$dt,"processCommand('".$short_command."');",$dt); say('Задача принята',2); return; } global $voicemode; $voicemode='on'; say('Сейчас '.timeNow(),2); } elseif (preg_match('/сколько время/is',$command)) { if ($dt>0) { addScheduledJob("command".$dt,"processCommand('".$short_command."');",$dt); say('Задача принята'); echo $short_command; return; } say('Сейчас '.timeNow()); } elseif (preg_match('/повтори (.+)/is',$command,$m) || preg_match('/(^|\s)скажи (.+)/is',$command,$m)) { if ($dt>0) { addScheduledJob("command".$dt,"processCommand('".$short_command."');",$dt); say('Задача принята',2); return; } if (isset($m[2])) { $m[1]=$m[2]; } global $voicemode; $voicemode='on'; say($m[1],2); } else { //say('Неизвестная команда...', 2); runScript('iiiBot', array('message'=>$command)); }
Свойства класса:
Методы класса:
$this->setProperty('LastRun',date('Y-m-d H:i:s'));
$name='Cron_'.$this->object_title; SQLExec("DELETE FROM jobs WHERE title='".$name."'");
Объекты класса:
runScript('ZoneminderHashGenerator');
cm('lukoilLicard.CheckBalance');
cm('InternetBKS.CheckBalance');
cm('avtodor_tr.CheckBalance');
findMyiPhone(gg('Anna.AppleID'), gg('Anna.ApplePass'), 0, 240);
//обновим погоду include_once(DIR_MODULES . 'app_openweather/app_openweather.class.php'); $openweather = new app_openweather(); $openweather->get_weather(gg('ow_city.id')); //Расчет направления ветра $windDirection = array('С', 'ССВ', 'СВ', 'ВСВ', 'В', 'ВЮВ', 'ЮВ', 'ЮЮВ', 'Ю', 'ЮЮЗ', 'ЮЗ', 'ЗЮЗ', 'З', 'ЗСЗ', 'СЗ', 'ССЗ', 'С'); $degree = gg('ow_fact.wind_direction'); $direction = $windDirection[round($degree / 22.5)]; sg('ow_fact.wind_directionTXT', $direction); //////////
cm('sipZadarma.CheckBalance');
Свойства класса:
Объекты класса:
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
Объекты класса:
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y")); $olddate = date('d/m/Y', strtotime("-1 days")); $file2 = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=" . $olddate); //USD $xml = $file->xpath("//Valute[@ID='R01235']"); $valute = strval($xml[0]->Value); $dollar = str_replace(",",".",$valute); $xml2 = $file2->xpath("//Valute[@ID='R01235']"); $valute2 = strval($xml2[0]->Value); $dollar2 = str_replace(",",".",$valute2); if ($dollar > $dollar2){ $this->setProperty("USDdirection", "2"); } elseif ($dollar<$dollar2){ $this->setProperty("USDdirection", "1"); } else { $this->setProperty("USDdirection", "0"); } $delta = $dollar-$dollar2; $this->setProperty("USDdelta", number_format($delta, 2)); $this->setProperty("USD_old", $dollar2); $this->setProperty("USD", $dollar); //EUR $xml = $file->xpath("//Valute[@ID='R01239']"); $valute = strval($xml[0]->Value); $eur = str_replace(",",".",$valute); $xml2 = $file2->xpath("//Valute[@ID='R01239']"); $valute2 = strval($xml2[0]->Value); $eur2 = str_replace(",",".",$valute2); if ($eur>$eur2){ $this->setProperty("EURdirection", "2"); } elseif ($eur<$eur2){ $this->setProperty("EURdirection", "1"); } else { $this->setProperty("EURdirection", "0"); } $delta2 = $eur-$eur2; $this->setProperty("EURdelta", number_format($delta2, 2)); $this->setProperty("EUR_old", $eur2); $this->setProperty("EUR", $eur); //BYR $xml = $file->xpath("//Valute[@ID='R01090']"); $valute = strval($xml[0]->Value); $byr = str_replace(",",".",$valute); $this->setProperty("BYR", $byr); $this->setProperty("updatedTime", date("y-m-d H:i"));
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/processHomebridgeMQTT.inc.php');
Объекты класса:
Свойства класса:
Методы класса:
//$params['t'] $this->setProperty("updated",time()); $this->setProperty("updatedTime",date("H:i",time())); $this->setProperty("alive",1); $ot=$this->object_title; $alive_timeout=(int)$this->getProperty("aliveTimeOut"); if (!$alive_timeout) { $alive_timeout=30*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); if (!isset($params['h'])) { return; } $old_temp=$this->getProperty('humidity'); $t=round($params['h'],1); if ($t>100) return; $this->setProperty('humidity',$t); if ($params['uptime']) { $this->setProperty('uptime',$params['uptime']); } if ($t>$old_temp) { $d=1; } elseif ($t<$old_temp) { $d=-1; } else { $d=0; } $this->setProperty('direction',$d); $linked_room=$this->getProperty("LinkedRoom"); if ($linked_room) { setGlobal($linked_room.'.Humidity',$t); }
Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty('status', 0); sg('IRCode.IR', $this->getProperty('off'));
$this->setProperty('status', 1); sg('IRCode.IR', $this->getProperty('on')); usleep(500000);
if (is_array($params)) { $ch = (string)$params['chanel']; for ($i = 0; $i < strlen($ch); $i++) { sg('IRCode.IR', $this->getProperty($ch[$i])); usleep(500000); } } else { sg('IRCode.IR', $this->getProperty('12')); }
Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty('status',$params['status']); $this->setProperty('updatedTimestamp',time()); $this->setProperty("alive",1); $ot=$this->object_title; $alive_timeout=(int)$this->getProperty("aliveTimeOut"); if (!$alive_timeout) { $alive_timeout=12*60*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);
Свойства класса:
Методы класса:
$this->setProperty('status',$params['status']); // выставляем статус сенсора $this->setProperty('updatedTimestamp',time()); // выставляем время срабатывания сенсора $this->setProperty('alive',1); $ot=$this->object_title; $alive_timeout=(int)$this->getProperty("aliveTimeOut"); if (!$alive_timeout) { $alive_timeout=24*60*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); if ($params['status']) { $this->setProperty('motionDetected',1); clearTimeOut($this->object_title.'_detected'); setTimeOut($this->object_title.'_detected',"setGlobal('".$this->object_title.".motionDetected',0);",30); $linked_room=$this->getProperty('LinkedRoom'); if ($linked_room != '') { callMethod($linked_room.'.onActivity'); } if ($this->object_title=='sensorMovement3' || $this->object_title=='sensorMovementRemote1' || $this->object_title=='sensorMovementRemote2') { //|| $this->object_title=='sensorMovement5' return; // не реагируем на движение в спальне, по ip-сенсорам и по сенсору на втром этаже } ClearTimeOut("nobodyHome"); SetTimeOut("nobodyHome","callMethod('NobodyHomeMode.activate');", 1*60*60); // выполняем если целый час никого не было if (getGlobal('NobodyHomeMode.active')) { callMethod('NobodyHomeMode.deactivate'); } $last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома" registerEvent('inhouseMovement',$this->name,2); // регистрируем событие "движение внутри дома" if ((time()-$last_register)>2*60*60) { if (timeBetween('06:00', '12:00')) { runScript('Greeting'); // запускаем скрипт "доброе утро" } else { runScript("PingUsers", array('SAY'=>'1')); $GreetingLine = 'Ну наконец-то кто-то появился домой!'; $MeOnline = gg('Me.deviceOnline'); if($MeOnline) { $GreetingLine .= ' Привет, Женько!'; } $AnnaOnline = gg('Anna.deviceOnline'); if($AnnaOnline) { $GreetingLine .= ' Привет, Анька!'; //$GreetingLine .= ' Привет, Стерва!'; } say($GreetingLine); if (timeBetween('18:00', '21:00')) { // запускаем скрипт "добрый вечер" } } } }
Объекты класса:
Свойства класса:
Методы класса:
$playlist = $params['playlist']; $this->callMethod('SendData',array('data' => array('playlist', 'play', $playlist)));
$this->callMethod('SendData',array('data' => array('stop')));
$this->callMethod('SendData',array('data' => array('pause')));
$from_data = $params['data']; //print_r($params['data']); $ip=$this->getProperty('ServerIp'); $url = 'http://'.$ip.':9000/jsonrpc.js'; $player = $this->getProperty('PlayerMac'); $data = array( 'id' => 1, 'method' => 'slim.request', 'params' => array( $player, $params['data'] //Команда ), ); //print_r($data); $options = array( 'http' => array( 'method' => 'POST', 'content' => json_encode($data), 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n" ) ); $context = stream_context_create($options); $result = file_get_contents( $url, false, $context ); //print_r(json_decode($result, true)); //return $result;
Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty('status',0); $this->callMethod('sendCommand',array('command'=>'off'));
$this->setProperty('status',1); $this->callMethod('sendCommand',array('command'=>'on'));
$status=$this->getProperty("status"); if ($status) { $this->callMethod('turnOn'); } else { $this->callMethod('turnOff'); }
$level=$this->getProperty("Level"); if ($level>0) { $this->callMethod('setLevel',array('level'=>$level)); } else { $this->callMethod('turnOff'); }
$colors=array( '#ff0000', '#00ff00', '#0000ff'); $color=$colors[rand(0,count($colors)-1)]; $this->callMethod('setColor',array('color'=>$color));
$this->setProperty('Mode','C'); $this->setProperty('Color',$params['color']); $this->callMethod('sendCommand',array('command'=>'color','value'=>$params['color']));
$this->setProperty('Level',$params['level']); $this->callMethod('sendCommand',array('command'=>'level','value'=>$params['level']));
$this->setProperty('Mode','W'); $this->callMethod('sendCommand',array('command'=>'white'));
$this->setProperty('updated',time()); $this->setProperty('updatedTime',date('H:i')); include_once(ROOT.'lib/hardware/milight.php'); if (is_array($params)) { $command=$params['command']; $value=$params['value']; } else { $command=$params; } $host=$this->getProperty('Host'); $type=(int)$this->getProperty('LampType'); $zone=(int)$this->getProperty('Zone'); $milight = new Milight($host); $commands=''; if ($type==0) { $milight->setWhiteActiveGroup($zone); if ($command=='leveldown') { $milight->command('whiteBrightnessDown'); } if ($command=='levelup') { $milight->command('whiteBrightnessUp'); } if ($command=='level' && $value>=90) { $command='levelmax'; } if ($command=='level' && $value<=90) { $command='levelmin'; } if ($command=='levelmax') { $milight->command('whiteGroup'.$zone.'BrightnessMax'); } if ($command=='levelmin') { $milight->command('whiteGroup'.$zone.'BrightnessMin'); } if ($command=='nightmode') { $milight->command('whiteGroup'.$zone.'NightMode'); } if ($zone==1) { if ($command=='on') { $milight->whiteGroup1On(); } if ($command=='off') { $milight->whiteGroup1Off(); } } if ($zone==2) { if ($command=='on') { $milight->whiteGroup2On(); } if ($command=='off') { $milight->whiteGroup2Off(); } } if ($zone==3) { if ($command=='on') { $milight->whiteGroup3On(); } if ($command=='off') { $milight->whiteGroup3Off(); } } if ($zone==4) { if ($command=='on') { $milight->whiteGroup4On(); } if ($command=='off') { $milight->whiteGroup4Off(); } } } if ($type==1) { if ($command=='disco') { $milight->setRgbwActiveGroup($zone); $milight->rgbwSendOnToActiveGroup(); $milight->command('rgbwDiscoMode'); } if ($command=='discofaster') { $milight->setRgbwActiveGroup($zone); $milight->rgbwSendOnToActiveGroup(); $milight->command('rgbwDiscoFaster'); } if ($command=='discoslower') { $milight->setRgbwActiveGroup($zone); $milight->rgbwSendOnToActiveGroup(); $milight->command('rgbwDiscoSlower'); } if ($command=='level') { $milight->setRgbwActiveGroup($zone); $milight->rgbwBrightnessPercent($value); } if ($command=='color') { $milight->setRgbwActiveGroup($zone); $milight->rgbwSetColorHexString($value); } if ($zone==1) { if ($command=='on') { $milight->rgbwGroup1On(); } if ($command=='off') { $milight->rgbwGroup1Off(); } if ($command=='white') { $milight->rgbwGroup1SetToWhite(); } } if ($zone==2) { if ($command=='on') { $milight->rgbwGroup2On(); } if ($command=='off') { $milight->rgbwGroup2Off(); } if ($command=='white') { $milight->rgbwGroup2SetToWhite(); } } if ($zone==3) { if ($command=='on') { $milight->rgbwGroup3On(); } if ($command=='off') { $milight->rgbwGroup3Off(); } if ($command=='white') { $milight->rgbwGroup3SetToWhite(); } } if ($zone==4) { if ($command=='on') { $milight->rgbwGroup4On(); } if ($command=='off') { $milight->rgbwGroup4Off(); } if ($command=='white') { $milight->rgbwGroup4SetToWhite(); } } } sleep(1);
Объекты класса:
Свойства класса:
Методы класса:
$cmdline='noolitepc '.$params['command']; safe_exec($cmdline);
$this->setProperty("status", 0); $this->setProperty("brightness", 0); $this->callMethod("refresh");
$this->setProperty("status", 1); $this->setProperty("brightness", 100); $this->callMethod("refresh");
$value = $this->getProperty("brightness"); $this->callMethod("sendCommand",array('command'=>'--set '.$this->getProperty("Chanel").' '.$value)); if ($value > 0) { $this->setProperty('status', 1); } else { $this->setProperty('status', 0); }
if (isset($params['value'])) { $this->setProperty("brightness", $params['value']); $this->callMethod("refresh"); }
Объекты класса:
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
// Запишем температуру вчерашнего дня для этого часа /*$SQLText = " SELECT ph.value as val"; $SQLText.= " FROM pvalues pv, objects o, properties p, phistory ph "; $SQLText.= " WHERE pv.object_id = o.id "; $SQLText.= " AND p.id = pv.property_id "; $SQLText.= " AND o.title = 'ow_fact' "; $SQLText.= " AND p.title = 'temperature' "; $SQLText.= " AND ph.value_id = pv.id "; $SQLText.= " AND UNIX_TIMESTAMP( pv.updated ) - UNIX_TIMESTAMP( ph.added ) <24 *60 *60 +30 *60 "; $SQLText.= " ORDER BY ph.added "; $SQLText.= " LIMIT 1 "; $tempYesterday = SQLSelectOne($SQLText); sg("ow_fact.tempYesterday",$tempYesterday['val'] );*/ $tempYesterday = getHistoryValue("ow_fact.temperature", strtotime("-1 day"), true); sg("ow_fact.tempYesterday", $tempYesterday); //Расчет температуры "По ощущениям" $t = gg('ow_fact.temperature'); // температура на улице $h = gg('ow_fact.humidity'); // влажность на улице % $w = gg('ow_fact.wind_speed'); // данные о ветре из прогноза OpenWeather m/s $w = $w*3.6/1.609;//m/s -> mph $tF = $t *1.8+32; // перевод температуры в Farenheit if ($t > 26.6) { // Считаем HeatIndex по Rothfusz $_f = -42.379 + 2.04901523*$tF + 10.14333127*$h - 0.22475541*$tF*$h - 0.00683783*$tF*$tF - 0.05481717*$h*$h + 0.00122874*$tF*$tF*$h + 0.00085282*$tF*$h*$h -0.00000199*$tF*$tF*$h*$h; if(($tF < 112) && ( $h<13 )) { // If the RH is less than 13% and the temperature is between 80 and 112 degrees F, then the following adjustment is subtracted from HI: $_f = $_f-((13-$h)/4)*sqrt((17-abs($tF-95.))/17); } if(($tF < 88) && ($h > 85)) { // On the other hand, if the RH is greater than 85% and the temperature is between 80 and 87 degrees F, then the following adjustment is added to HI: $_f = $_f + (($h - 85) / 10) * ((87 - $tF) / 5); //ADJUSTMENT = [(RH-85)/10] * [(87-T)/5] } } else if ($t <= 10) { // Считаем фактор WindChild $_f = 35.74 + (0.6215 * $tF) - (35.75 * pow($w, 0.16)) + ((0.4275 * $tF) * pow($w, 0.16)); } else { //считаем по упрощенной формуле $_f = 0.5*($tF+61+(($tF-68)*1.2)+($h*0.094)); } // переводим в цельсии $rf = round(($_f-32)/1.8,1); sg("ow_fact.realFell", $rf);
Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty("updated",time()); $this->setProperty("updatedTime",date('H:i')); if ($this->getProperty('active')) { say("Режим ".$this->getProperty('title')." активирован."); } else { say("Режим ".$this->getProperty('title')." выключен."); }
$this->setProperty('active',1);
$this->setProperty('active',0);
Объекты класса:
//Устанавливаем уровень для сообщений setGlobal('minMsgLevel','0'); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nightmode_deactivate.php'); /* end injection of {SDevices} */
//Устанавливаем уровень для сообщений setGlobal('minMsgLevel','2'); //Переведем ленту на кухне в ночной режим if (gg("LedStrip1.status") != 0) { callMethod('LedStrip1.sendCommand', array('command'=>'nightmode')); } //Переведем ленту в зале в ночной режим if (gg("LedStrip2.status") != 0) { callMethod('LedStrip2.setLevel', array('level'=>'5')); } /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nightmode_activate.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nobodyhomemode_deactivate.php'); /* end injection of {SDevices} */
say("По-моему никого нет дома..."); setGlobal('somebodyHome',0); // ставим глобальный флаг на то что никого нет дома //setGlobal('somebodyHomeText','Никого нет дома'); if (gg("LedStrip1.status") != 0) { cm("LedStrip1.turnOff"); } if (gg("LedStrip2.status") != 0) { cm("LedStrip2.turnOff"); } if (timeBetween('00:00', '8:00')) { say("Хотя скорее всего все спят :) Ночь ведь!"); runScript('TelegramMessage', array('sticker' => 'BQADAgADqgADm2IgDPcRJDqsXo_0Ag')); setGlobal("SleepAllMode.active",1); } else { runScript('TelegramMessage', array('sticker' => 'BQADAgADPQEAAptiIAxz-JRT_0-_DQI')); } /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nobodyhomemode_activate.php'); /* end injection of {SDevices} */
$this->setProperty("updated",time()); $this->setProperty("updatedTime",date('H:i'));
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
if($params['NEW_VALUE'] <= 20) { $this->setProperty('BatteryWarningLevel', 2); } elseif($params['NEW_VALUE'] < 50) { $this->setProperty('BatteryWarningLevel', 1); } else { $this->setProperty('BatteryWarningLevel', 0); }
$MinSFVal = $this->getProperty('minFertilityValue'); $MaxSFVal = $this->getProperty('maxFertilityValue'); if($params['NEW_VALUE'] < $MinSFVal || $params['NEW_VALUE'] > $MaxSFVal + 100) { $this->setProperty('FertilityWarningLevel', 2); } elseif($params['NEW_VALUE'] == $MinSFVal || $params['NEW_VALUE'] < $MinSFVal + 50) { $this->setProperty('FertilityWarningLevel', 1); } else { $this->setProperty('FertilityWarningLevel', 0); }
//$params['PROPERTY'] -- текстовое имя изменяемого свойства //$params['NEW_VALUE'] -- присваиваемое значение //$params['OLD_VALUE'] -- предыдущее значение $tm = time(); $this->setProperty('updated', $tm); $this->setProperty('updatedText', date("Y-m-d H:i", $tm)); $this->setProperty('alive', 1); $alive_timeout = 1*24*60*60; // 1 days alive timeout $ot = $this->object_title; setTimeout($ot.'_alive_timer', 'setGlobal("'.$ot.'.alive", 0);', $alive_timeout); $minMoistureValue = $this->getProperty("minMoistureValue"); if ($minMoistureValue == "") { $minMoistureValue = 20; } $maxMoistureValue = $this->getProperty('maxMoistureValue'); if($params['NEW_VALUE'] < $minMoistureValue || $params['NEW_VALUE'] > $maxMoistureValue ) { $this->setProperty('MoistureWarningLevel', 2); } elseif($params['NEW_VALUE'] == $minMoistureValue || $params['NEW_VALUE'] < $minMoistureValue + 3) { $this->setProperty('MoistureWarningLevel', 1); } else { $this->setProperty('MoistureWarningLevel', 0); } $minFertilityValue = $this->getProperty("minFertilityValue"); if ($minFertilityValue == "") { $minFertilityValue = 500; } if($params['NEW_VALUE'] < $minMoistureValue && !gg('NobodyHomeMode.active')) { $plantName = $this->getProperty("name"); $mes = "Аничка, влажность почвы растения " . $plantName . " " . chti((int)$params['NEW_VALUE'], 'процент', 'процента', 'процентов') . ", что очень мало! Срочно полей цветок!"; $SoilFertility = $this->getProperty("SoilFertility"); if ($SoilFertility < $minFertilityValue) { $mes .= " Так-же уровень минерализации почвы составляет " . $SoilFertility . " микросименс на сантиметр. Это немного, надо бы подкормить."; } say($mes); //runScript('TelegramMessage', array('message' => $mes, 'id' => gg('Me.TelegramId'))); }
Объекты класса:
Объекты класса:
include_once(DIR_MODULES.'app_radio/app_radio.class.php'); $app_radio=new app_radio(); if(is_array($params)) { if(isset($params['sta'])) $app_radio->change_station($params['sta'],$app_radio); if(isset($params['cmd'])) $app_radio->control($params['cmd']); if(isset($params['vol'])) $app_radio->set_volume($params['vol'],$app_radio); } else { if($params=='play' || $params=='stop') $app_radio->control($params); else if(strpos($params, "vol")===0) $app_radio->set_volume((int)substr($params,3),$app_radio); else if(strpos($params, "sta:")===0) $app_radio->change_station(substr($params,4),$app_radio); }
Свойства класса:
Методы класса:
$this->setProperty("status",0);
$this->setProperty("status",1);
$status=$this->getProperty("status"); if ($status) { $this->callMethod('turnOn'); } else { $this->callMethod('turnOff'); }
$status=$this->getProperty("status"); if ($status) { $this->callMethod('turnOff'); } else { $this->callMethod('turnOn'); }
Свойства класса:
Методы класса:
$cmdline='"c:\Program Files\nooLite\nooLite.exe" -api '.$params['command']; $last_called=gg('NoolightCommandSend'); $min_delay=3; $now=time(); if (($now-$last_called)>$min_delay) { //safe_exec($cmdline); $last_callled=$now; sg('NoolightCommandSend',$last_called); DebMes("Noolite instant exec: ".$cmdline); system($cmdline); //exec($cmdline); } else { if ($last_callled<$now) { $last_callled=$now; } $last_called+=$min_delay; sg('NoolightCommandSend',$last_called); DebMes("Noolite scheduled job for ".date('H:i:s',$last_called)); AddScheduledJob("noolight".md5($cmdline),"safe_exec('".$cmdline."');",$last_called); }
$this->setProperty("status",0); //safe_exec('"c:\Program Files\nooLite\noolite.exe" -api -off_ch'.$this->getProperty("channel")); $this->callMethod("sendCommand",array('command'=>'-off_ch'.$this->getProperty("channel")));
$this->setProperty("status",1); $this->callMethod("sendCommand",array('command'=>'-on_ch'.$this->getProperty("channel")));
Свойства класса:
Методы класса:
$code1=$this->getProperty('Code1'); $code2=$this->getProperty('Code2'); safe_exec("c:\_majordomo\apps\arduino_gw\arduino_gw.exe rcoff$code1:$code2;"); $this->setProperty("status",0);
$code1=$this->getProperty('Code1'); $code2=$this->getProperty('Code2'); safe_exec("c:\_majordomo\apps\arduino_gw\arduino_gw.exe rcon$code1:$code2;"); $this->setProperty("status",1);
Свойства класса:
Методы класса:
$rooms=getObjectsByClass("Rooms"); $total=count($rooms); for($i=0;$i<$total;$i++) { $rooms[$i]['room']=getGlobal($rooms[$i]['TITLE'].'.Title'); if (!$rooms[$i]['room']) { $rooms[$i]['room']=$rooms[$i]['TITLE']; } $rooms[$i]['active']=getGlobal($rooms[$i]['TITLE'].'.SomebodyHere'); $rooms[$i]['time']=getGlobal($rooms[$i]['TITLE'].'.LatestActivity'); $rooms[$i]['diff']=time()-$rooms[$i]['time']; } function cmp($a, $b) { if ($a['diff'] == $b['diff']) { return 0; } return ($a['diff'] < $b['diff']) ? -1 : 1; } usort($rooms,"cmp"); if (!$rooms[0]['active']) { $somebodyHomeText="Никого нет дома. Были в ".date('H:i',$rooms[0]['time'])." (".$rooms[0]['room'].")"; } else { $res_rooms=array(); for($i=0;$i<$total;$i++) { if ($rooms[$i]['active']) { $res_rooms[]=$rooms[$i]['room']; } } $somebodyHomeText="Кто-то дома: ".implode(", ",$res_rooms); } setGlobal('somebodyHomeText',$somebodyHomeText); //echo "Updated";
require(DIR_MODULES.'devices/Rooms_onActivity.php');
$this->setProperty('SomebodyHere',0); $this->callMethod("updateActivityStatus");
Объекты класса:
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SDevices_statusUpdated.php');
require(DIR_MODULES.'devices/SDevices_logicAction.php');
Методы класса:
require(DIR_MODULES.'devices/SButtons_pressed.php');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SControllers_turnOn.php');
require(DIR_MODULES.'devices/SControllers_turnOff.php');
require(DIR_MODULES.'devices/SControllers_switch.php');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SDimmers_turnOff.php');
require(DIR_MODULES.'devices/SDimmers_levelUpdated.php');
require(DIR_MODULES.'devices/SDimmers_turnOn.php');
Объекты класса:
sg('LedStrip1.status', 1); cm('LedStrip1.refresh');
sg('LedStrip1.status', 0); cm('LedStrip1.refresh');
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_turnOff.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_setColor.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_colorUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_turnOn.php'); /* end injection of {SDevices} */
Объекты класса:
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
Объекты класса:
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SOpenClose_statusUpdated.php');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SSensors_valueUpdated.php');
Методы класса:
Объекты класса:
echo "status received: ".$params['status'];
global $voicemode; $voicemode='off'; processCommand($params['message']);
Свойства класса:
Методы класса:
Объекты класса:
$details=array(); $red_state=0; $yellow_state=0; if (gg("animalsplants.FishFood")!=0) { $yellow_state=1; $details[]="не покормлены рыбки!"; } if (gg("animalsplants.Plant1Water")!=0) { //$red_state=1; $yellow_state=1; $details[]="Не полит цветок в зале!"; } if (gg("animalsplants.Plant2Water")!=0) { //$red_state=1; $yellow_state=1; $details[]="Не полит цветок на кухне!"; } if (gg("animalsplants.CleanFilter")!=0) { //$red_state=1; $yellow_state=1; $details[]="Грязные фильтры в аквариумах!"; } if ($red_state) { $state='red'; $state_title='Красный'; } elseif ($yellow_state) { $state='yellow'; $state_title='Жёлтый'; } else { $state='green'; $state_title='Зелёный'; } $new_details=implode(". ",$details); if ($this->getProperty("stateDetails")!=$new_details) { $this->setProperty('stateDetails',$new_details); } if ($this->getProperty('stateColor')!=$state) { $this->setProperty('stateColor',$state); $this->setProperty('stateTitle',$state_title); if ($state!='green') { say("Уровень системы слежения за живностью изменился на ".$state_title."."); say(implode(". ",$details)); } else { say("Уровень системы слежения за живностью восстановился на ".$state_title); } $this->callMethod('stateChanged'); }
$details=array(); $red_state=0; $yellow_state=0; if (!isOnline('Internet')) { $yellow_state=1; $details[]=LANG_GENERAL_NO_INTERNET_ACCESS; } if (!isOnline('Роутер')) { $red_state=1; $details[]="Не доступен шлюз и беспроводная сеть"; } if ($red_state) { $state='red'; $state_title=LANG_GENERAL_RED; } elseif ($yellow_state) { $state='yellow'; $state_title=LANG_GENERAL_YELLOW; } else { $state='green'; $state_title=LANG_GENERAL_GREEN; } $new_details=implode(". ",$details); if ($this->getProperty("stateDetails")!=$new_details) { $this->setProperty('stateDetails',$new_details); } if ($this->getProperty('stateColor')!=$state) { $this->setProperty('stateColor',$state); $this->setProperty('stateTitle',$state_title); if ($state!='green') { say(LANG_GENERAL_COMMUNICATION_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title.".",3); say(implode(". ",$details)); } else { say(LANG_GENERAL_COMMUNICATION_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title,3); } $this->callMethod('stateChanged'); }
$details=array(); $red_state=0; $yellow_state=0; $cycles=array('states'=>'states','main'=>'main','execs'=>'exec','scheduler'=>'scheduler'); foreach($cycles as $k=>$v) { $tm=getGlobal('ThisComputer.cycle_'.$k.'Run'); if (time()-$tm>5*60) { $red_state=1; $details[]=$v." ".LANG_GENERAL_CYCLE." ".LANG_GENERAL_STOPPED."."; } } $cycles=array('ping'=>'ping','webvars'=>'webvars','watchfolders'=>'watch folders','rss'=>'RSS'); foreach($cycles as $k=>$v) { $tm=getGlobal('ThisComputer.cycle_'.$k.'Run'); if (time()-$tm>10*60) { $yellow_state=1; $details[]=$v." ".LANG_GENERAL_CYCLE." ".LANG_GENERAL_STOPPED."."; } } if ($red_state) { $state='red'; $state_title=LANG_GENERAL_RED; } elseif ($yellow_state) { $state='yellow'; $state_title=LANG_GENERAL_YELLOW; } else { $state='green'; $state_title=LANG_GENERAL_GREEN; } $new_details=implode(". ",$details); if ($this->getProperty("stateDetails")!=$new_details) { $this->setProperty('stateDetails',$new_details); } if ($this->getProperty('stateColor')!=$state) { $this->setProperty('stateColor',$state); $this->setProperty('stateTitle',$state_title); if ($state!='green') { say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title."."); say(implode(". ",$details)); } else { say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title); } $this->callMethod('stateChanged'); } /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/system_checkstate.php'); /* end injection of {SDevices} */
$details=array(); $red_state=0; $yellow_state=0; /* if (!isOnline("Камера в зале")) { $yellow_state=1; $details[]="Камера в зале недоступна!"; } */ if (!isOnline("Камера на кухне")) { $yellow_state=1; $details[]="Камера на кухне недоступна!"; } if ($red_state) { $state='red'; $state_title=LANG_GENERAL_RED; } elseif ($yellow_state) { $state='yellow'; $state_title=LANG_GENERAL_YELLOW; } else { $state='green'; $state_title=LANG_GENERAL_GREEN; } $new_details=implode(". ",$details); if ($this->getProperty("stateDetails")!=$new_details) { $this->setProperty('stateDetails',$new_details); } if ($this->getProperty('stateColor')!=$state) { $this->setProperty('stateColor',$state); $this->setProperty('stateTitle',$state_title); if ($state!='green') { say(LANG_GENERAL_SECURITY_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title."."); say(implode(". ",$details)); } else { say(LANG_GENERAL_SECURITY_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title); } $this->callMethod('stateChanged'); }
Методы класса:
Объекты класса:
$command = $params['command']; $option = $params['option']; $amihost = $this->getProperty('amihost'); $amiport = $this->getProperty('amiport'); $amiusername = $this->getProperty('amiusername'); $amipassword = $this->getProperty('amipassword'); include_once ('./lib/phpagi/phpagi-asmanager.php'); if (!$params['command']) { DebMes (" Asterisk : Can't process empty command"); exit; }; if (!$amihost) { DebMes (" Asterisk : Can't process command - AMI is not configured"); exit; }; $com_man = new AGI_AsteriskManager(); if (!$com_man->connect($amihost.":".$amiport, $amiusername, $amipassword)) { DebMes (" Asterisk : Can't connect to AMI "); exit; }; $response = $com_man->$command($option); $com_man->disconnect(); if ($response['Response'] != 'Success') { DebMes (" Asterisk : Can't process command => ".$response['Message']); }; return $response // For debug // DebMes (" Asterisk : Process command $command"); // DebMes ($response);
Свойства класса:
Методы класса:
//$params['t'] $this->setProperty("updated",time()); $this->setProperty("updatedTime",date("H:i",time())); $this->setProperty("alive",1); $ot=$this->object_title; $alive_timeout=(int)$this->getProperty("aliveTimeOut"); if (!$alive_timeout) { $alive_timeout=30*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); if (!isset($params['t'])) { return; } $old_temp=$this->getProperty('temp'); $t=round($params['t'],1); if ($t>110) return; $this->setProperty('temp',$t); if ($params['uptime']) { $this->setProperty('uptime',$params['uptime']); } if ($t>$old_temp) { $d=1; } elseif ($t<$old_temp) { $d=-1; } else { $d=0; } $this->setProperty('direction',$d); $linked_room=$this->getProperty("LinkedRoom"); if ($linked_room) { setGlobal($linked_room.'.Temperature',$t); }
Объекты класса:
Свойства класса:
Методы класса:
Объекты класса:
$h=(int)date('G',time()); //cm('sipZadarma.CheckBalance'); runScript("PingUsers", array('SAY'=>'1')); if (gg("NobodyHomeMode.active") != 1) { if (gg("ThisComputer.ControlPetStatus") != 0) { if (gg("animalsplants.FishFood")==1) { say("Покормите рыбок!"); } if (gg("animalsplants.Plant1Water")==1 || gg("animalsplants.Plant2Water")==1) { say("Полейте цветы!"); } if (gg("animalsplants.CleanFilter")==1) { say("Очистите аквариумные фильтры!"); } } if(gg("PlantsWater.status") == 1) { if (timeBetween("18:00", "00:00")) { //say('Напоминаю Анечке полить цветы!'); } } //Напоминаем погладить одежду if (timeBetween("21:30", "00:00")) { if (gg('ironing.status')) { //say('Анечка, погладь одежду!'); } } } if ($h == '11') { //Плавно включаем свет в аквариуме //runScript("BigAquarium_lowOn-Off", array("mode" => "on")); callMethod("BigAquarium.turnOn"); } if ($h == "21") { //say('Не забудьте завтра отправить подарки для хабра и гиктаймса!'); if (gg("NewYearGifts.status") == 1) { say('Подготовьте новогодние подарки. Напоминаю, что среднее время доставки посылок из китая на текущий момент составляет '. gg('ThisComputer.ChinaDeliveryTime') . ' дней.'); } } if ($h == "22") { //say('Анечка, выпей таблетку!'); //messageToMyiPhone(gg('Anna.AppleID'), gg('Anna.ApplePass'), 'Alice', 'Анечка, выпей таблетку!'); //Плавно выключаем свет в авариуме //runScript("BigAquarium_lowOn-Off", array("mode" => "off")); callMethod("BigAquarium.turnOff"); } if ($h == "00") { runScript('РасширенноеПредставлениеДаты'); cm('InternetBeeline.CheckBalance'); //Вычисляем время восхода/заката солнца sg('ThisComputer.SunRiseTime', date_sunrise(time(), SUNFUNCS_RET_STRING, 53.191701, 34.202588)); sg('ThisComputer.SunSetTime', date_sunset(time(), SUNFUNCS_RET_STRING, 53.191701, 34.202588)); if (gg("LedStrip2.status") != 0) { say('Выключаю подсветку в зале.'); sg('LedStrip2.status', 0); cm('LedStrip2.refresh'); } if (gg("LedStrip1.status") != 0) { say('Выключаю подсветку на кухне.'); sg('LedStrip1.status', 0); cm('LedStrip1.refresh'); } //Установим напоминание подготовить новогодние подарки if (gg('today.month_num') == 10 && gg('today.dayOfMonthNum') == 2) { sg("NewYearGifts.status", 1); } //Установим напоминание погладить одежду, если завтра на работу if (gg('tomorrow.isWeekDay')) { sg('ironing.status', 1); } } //Каждые 4 часа if ($h%4 == 0) { //С 10 до 18 часов if ($h > 10 && $h < 18) { //Проверка посылок //getURL('http://10.0.3.100:8183/modules/app_postoffice/check_post.php', 0); //runScript('ПроверкаПосылок'); require_once(DIR_MODULES . '/app_PostTracker/app_PostTracker.class.php'); $PostTracker = new app_PostTracker(); $PostTracker->updateStatuses(); } } //Каждые 3 часа if ($h%3 == 0) { //С 9 до 23 часов if ($h > 9 && $h < 23) { if (gg('ThisComputer.SayJokes') != 0) { runScript('SayJokes'); } } //Обновляем курсы валют cm('cbr.Update'); }
$h=(int)date('G',time()); $m=date('i',time()); //будильник $objects=getObjectsByClass("AlarmClock"); foreach($objects as $obj) { // переберем все будильники в системе if (getGlobal($obj['TITLE'].".AlarmOn") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))) {//если будильник включен и время совпало callMethod($obj['TITLE'].".AlarmRun"); // выполним метод будильника } } //runScript("PingUsers", array('SAY'=>'1')); if (isWeekDay()) { } if (($h>=8) && getGlobal('clockChimeEnabled')) { if ($m=="00") { say(timeNow(), 1); } } setGlobal('timeNow',date('H:i')); if (gg('NobodyHomeMode.active') !=1 && gg("isDark") && gg("LedStrip1.status") != 1) { if (timeBetween("18:00", "00:00")) { say('Включаю подсветку на кухне.'); sg('LedStrip1.status', 1); cm('LedStrip1.refresh'); if (gg('NightMode.active')) { callMethod('LedStrip1.sendCommand', array('command'=>'nightmode')); } } } if (gg('NobodyHomeMode.active') !=1 && gg("isDark") && gg("LedStrip2.status") != 1) { if (timeBetween("21:00", "00:00")) { say('Включаю подсветку в зале.'); sg('LedStrip2.status', 1); callMethod('LedStrip2.refresh'); callMethod('LedStrip2.setLevel', array('level'=>'100')); if (gg('NightMode.active')) { callMethod('LedStrip2.setLevel', array('level'=>'5')); } } } $homeStatus=date('H:i'); if (getGlobal('NobodyHomeMode.active')) { $homeStatus.=' Дома никого'; } else { $homeStatus.=' Дома кто-то есть'; } $homeStatus.=' '.getGlobal('Security.stateDetails'); $homeStatus.=' '.getGlobal('System.stateDetails'); $homeStatus.=' '.getGlobal('Communication.stateDetails'); setGlobal('HomeStatus',$homeStatus); if (timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('DarknessMode.active')=="1") { setGlobal("isDark",0); callMethod('DarknessMode.deactivate'); } elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('DarknessMode.active')!="1") { setGlobal("isDark",1); callMethod('DarknessMode.activate'); } if (timeIs(getGlobal('SunRiseTime'))) { say('Всходит солнце'); } if (timeIs(getGlobal('SunSetTime'))) { say('Солнце заходит',2); } if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) { say("Похоже никого нет сегодня, можно сэкономить немного."); callMethod('EconomMode.activate'); } if (timeIs('23:00')) { callMethod('NightMode.activate'); } elseif (timeIs('10:00')) { if (gg('NightMode.active') != 0) { callMethod('NightMode.deactivate'); } } if (timeIs("03:00")) { runScript("systemMaintenance"); } if(timeIs('04:30')) { $command = "php -q ./objects/index.php script:backupServer"; shell_exec("nohup $command > /dev/null & echo $!"); } //Запускаем 10-секундный цикл runScript('timer_10s'); //Каждую минуту runScript('HardwareMonitor'); //Каждые 5 минут if ($m%5 == 0) { runScript('getLightLevel'); //runScript('Обновление YandexDNS'); //Найдем айфончик //findMyiPhone(gg('Anna.AppleID'), gg('Anna.ApplePass'), 0, 240); //Обновление задач wunderlist include_once(DIR_MODULES.'app_wunderlist/app_wunderlist.class.php'); $wunderlist=new app_wunderlist(); $wunderlist->refreshAll(); } //Каждые 15 минут if ($m%15 == 0) { } // Каждые 30 минут if ($m%30 == 0) { //runScript('ZoneminderHashGenerator'); }
Свойства класса:
Методы класса:
if ($params['OLD_VALUE'] - $params['NEW_VALUE'] >= 10) { say("Заряд батареи составляет " . chti($this->getProperty("batteryCharge"), 'процент', 'процента', 'процентов')); }
$newVal = str_replace (" TRIM", "" , $params['NEW_VALUE']); //"OL" and "OL TRIM" $oldVal = str_replace (" TRIM", "" , $params['OLD_VALUE']); if ($newVal != $oldVal) { if ($newVal != "OL") { say("Отключено внешнее питание, перехожу на работу от батарей."); } else { say("Внешнее питание восстановлено!"); } } //statuses /* OL - On line (mains is present) OB - On battery (mains is not present) LB - Low battery RB - The battery needs to be replaced CHRG - The battery is charging DISCHRG - The battery is discharging (inverter is providing load power) BYPASS - UPS bypass circuit is active - no battery protection is available CAL - UPS is currently performing runtime calibration (on battery) OFF - UPS is offline and is not supplying power to the load OVER - UPS is overloaded TRIM - UPS is trimming incoming voltage (called "buck" in some hardware) BOOST - UPS is boosting incoming voltage */
Объекты класса:
Методы класса:
Объекты класса:
if ($params['serial']=='' && $params['devname']!='') { $params['serial']=$params['devname']; } $device=SQLSelectOne("SELECT * FROM usbdevices WHERE SERIAL LIKE '".$params['serial']."'"); if (!$device['ID']) { // new device connected //say("Подключено новое устройство",1); $device=array(); $device['SERIAL']=$params['serial']; $device['TITLE']='устройство '.$params['devname']; $device['FIRST_FOUND']=date('Y-m-d H:i:s'); $device['LAST_FOUND']=date('Y-m-d H:i:s'); $device['LOG'].=$device['FIRST_FOUND'].' подключено (впервые)'."\n"; $device['ID']=SQLInsert('usbdevices',$device); } else { // device already in our database //say("Подключено ".$device['TITLE'],1); if ($device['USER_ID']) { $user=SQLSelectOne("SELECT * FROM users WHERE ID='".$device['USER_ID']."'"); if ($user['ID']) { //$user['NAME']; // теперь мы знаем имя пользователя, связанного с этим устройством } } $device['LAST_FOUND']=date('Y-m-d H:i:s'); $device['LOG']=$device['LAST_FOUND'].' подключено'."\n".$device['LOG']; SQLUpdate('usbdevices',$device); if ($device['SCRIPT_ID']!='') { runScript($device['SCRIPT_ID'],$params); } elseif ($device['SCRIPT']!='') { eval($device['SCRIPT']); } }
Свойства класса:
Методы класса:
//$Coordinates=$this->getProperty("Coordinates"); $Coordinates = $params['NEW_VALUE']; //$old_coordinates = $params['OLD_VALUE']; $old_coordinates = $this->getProperty("reminderBuyCoordinates"); $newLat=substr($Coordinates, 0, strpos($Coordinates, ",")); $newLon=substr($Coordinates, strpos($Coordinates, ",") + 1); $this->setProperty("latitude", $newLat); $this->setProperty("longitude", $newLon); $oldLat=substr($old_coordinates, 0, strpos($Coordinates, ",")); $oldLon=substr($old_coordinates, strpos($Coordinates, ",") + 1); $dist = calculateTheDistance($newLat, $newLon, $oldLat, $oldLon); //$deltaTime = time() - $this->getProperty("reminderBuyTimeStamp"); $deltaTime = time() - registeredEventTime($this->object_title . 'ReminderBuy'); $homeDist = (int) $this->getProperty("HomeDistance"); $seenAt = $this->getProperty("seenAt"); if ($seenAt == '') { $this->setProperty("Location", Getgeocode($newLon, $newLat)); } if ($dist > 3000 && $homeDist < 30000 && $deltaTime > 3600 && $seenAt == '') { $list_name="Купить"; $data = unserialize(gg('Me.WunderlistTasks')); foreach ($data as $value) { if ($value['title'] == $list_name) { $tasks=$value["TASKS"]; $total = count($tasks); if ($total != 0) { $radius = 500; //$types = array("store", "grocery_or_supermarket"); //https://developers.google.com/places/supported_types?hl=ru $types = array("grocery_or_supermarket"); $places = findPlaces($Coordinates, $radius, $types); if(isArray($places)) { $mes = 'Рядом с вами есть ' . chti(count($places), 'магазин', 'магазина', 'магазинов') . '. Не забудьте купить: '; for($i=0; $i < $total; $i++) { $mes .= $tasks[$i]["title"]; if ($i < $total - 1) { $mes .= ', '; } else { $mes .= '.'; } } $this->setProperty("reminderBuyCoordinates", $Coordinates); //$this->setProperty("reminderBuyTimeStamp", time()); registerEvent($this->object_title . 'ReminderBuy', $this->name, 1); // регистрируем событие say($mes); } } } } }
if (!$this->getProperty("Charging")) { if ($params['NEW_VALUE'] > 0 && $params['NEW_VALUE'] < 10 && $params['NEW_VALUE'] < $params['OLD_VALUE']) { $last_register=registeredEventTime($this->object_title . 'LowBatteryNotification'); // проверяем когда в последний раз срабатывало событие "Уведомиление о низком заряде батареи у пользователя" if ((time()-$last_register) > 1*60*60) { say('Заряд телефона у ' . mb_substr($this->getProperty("fullName"), 0, -1, 'UTF-8') . 'и ' . $params['NEW_VALUE'] . '%. Скоро сядет.'); registerEvent($this->object_title . 'LowBatteryNotification', $this->name, 1); // регистрируем событие "Уведомиление о низком заряде батареи у пользователя" } } }
Объекты класса:
Свойства класса:
Объекты класса:
Свойства класса:
Объекты класса:
, Россия
На форуме: Dark_Veter
© 2024 - Site Built By SergeJey | Реквизиты: Курицын С. С. ИНН 762001394609 | Контакты | Публичный договор
SmartLiving