Свойства класса:
Методы класса:
Объекты класса:
// это однократный будильник, выключем его sg("AlarmOne.AlarmOn",0); say('Хозяин, пора вставать на работу',5); sleep (3); // включим радио cm('RadioSetting.Control',array('sta'=>'Дорожное радио','cmd'=>'play','vol'=>35)); // запланируем выключить радио через 45 минут SetTimeOut("AlarmOne_RadioStop",'callMethod("RadioSetting.Control","stop");', 45*60);
//if (isWeekDay()) { // сегодня рабочий день if (gg('today.isWeekDay')) { // сегодня рабочий день setGlobal("SleepAllMode.active",0); // все проснулись if (timeBetween('06:45', '11:00')) { // движение замечено утром runScript('morningGreeting'); // запускаем скрипт "доброе утро" } if (timeBetween('11:01', '17:00')) { // движение замечено днем runScript('dayGreeting'); // запускаем скрипт "добрый день" } if (timeBetween('17:01', '21:00')) { // движение замечено вечером runScript('eveningGreeting'); // запускаем скрипт "добрый вечер" } runScript('NowSayWeather'); runScript('TodaySayWeather'); runScript('SayMoneyExchange'); sleep (20); // включим радио cm('RadioSetting.Control',array('sta'=>'Дорожное радио','cmd'=>'play','vol'=>50)); // запланируем выключить радио через 50 минут SetTimeOut("AlarmWeekDay_RadioStop",'callMethod("RadioSetting.Control","stop");', 50*60); }
//if (isWeekEnd()) { // сегодня выходной день if (!gg('today.isWeekDay')) { // сегодня выходной день // say('Пора вставать!', 3); if (timeBetween('06:45', '11:00')) { // движение замечено утром runScript('morningGreeting'); // запускаем скрипт "доброе утро" } if (timeBetween('11:01', '17:00')) { // движение замечено днем runScript('dayGreeting'); // запускаем скрипт "добрый день" } if (timeBetween('17:01', '21:00')) { // движение замечено вечером runScript('eveningGreeting'); // запускаем скрипт "добрый вечер" } runScript('SayMoneyExchange'); runScript('NowSayWeather'); sleep (40); // включим радио cm('RadioSetting.Control',array('sta'=>'Дорожное радио','cmd'=>'play','vol'=>50)); // запланируем выключить радио через 50 минут SetTimeOut("AlarmWeekDay_RadioStop",'callMethod("RadioSetting.Control","stop");', 50*60); // все проснулись setGlobal("SleepAllMode.active",0); }
Свойства класса:
Методы класса:
// shell_exec("net rpc shutdown -f -I 192.168.0.31 -U '192.168.0.31'");
Объекты класса:
say ('Эвелина! Через пять минут твой компьютер будет выключен! Лимит времени подходит к концу!', 1);
shell_exec("net rpc shutdown -f -I 192.168.0.31 -U '192.168.0.31'");
say ('Ильюша! Через пять минут твой компьютер будет выключен! Лимит времени подходит к концу!', 1);
shell_exec("net rpc shutdown -f -I 192.168.0.30 -U '192.168.0.30'");
Свойства класса:
Методы класса:
$volume=round(65535*$params['VALUE']/100); $this->setProperty('volumeLevel',$params['VALUE']); safe_exec('..\\apps\\nircmd\\nircmdc setsysvolume '.$volume); say("Изменилась громкость до ".$params['VALUE']." процентов");
Объекты класса:
say("Отключено питание");
runScript('WeekDayType'); say ('Готова служить Вам и вашей семье!',1);
$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('/скажи (.+)/is',$command,$m)) { if ($dt>0) { addScheduledJob("command".$dt,"processCommand('".$short_command."');",$dt); say('Задача принята',2); return; } global $voicemode; $voicemode='on'; say($m[1],2); } else { say('Неизвестная команда...',2); }
setGlobal("ThisComputer.OS",file_get_contents('/etc/os-release',NULL,NULL,13,27)); // Версию ОС вырезаем по позициям. С AWK было бы красивее, но не осилил setGlobal("ThisComputer.Kernel",shell_exec("uname -msr")); // Версия ядра setGlobal("ThisComputer.Processor",file_get_contents('/proc/cpuinfo',NULL,NULL,12,27)); // Версия процессора //setGlobal("ThisComputer.CPUFreq",file_get_contents('/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq')/1000); // Права поправить setGlobal("ThisComputer.CPU0Freq",file_get_contents('/proc/cpuinfo')/1000); // Права поправить setGlobal("ThisComputer.CPUSG",file_get_contents('/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor')); // Режим управления частотой setGlobal("ThisComputer.uptime",shell_exec('uptime')); // Тут несколько значений сразу $mem=shell_exec("free -m|grep Mem|awk '{print $2,$3,$4}'"); // Данные об ОЗУ $mem=explode(" ",$mem); setGlobal("ThisComputer.memoryUse",$mem[1]); $Swap=shell_exec("free -m|grep Swap|awk '{print $2,$3,$4}'"); // Данные о SWAP $Swap=explode(" ",$Swap); setGlobal("ThisComputer.SwapUse",$Swap[1]); $disk=shell_exec("df|grep rootfs|awk '{print $2,$3,$5,$6}'"); // p.s. rootfs нужно изменить на свой диск $disk=explode(" ",$disk); setGlobal("ThisComputer.driveRootUse",round($disk[1]/1048576, 2)); //Переведем в Гб с округлением до сотых $disk2=shell_exec("df|grep sda3|awk '{print $2,$3,$5,$6}'"); // p.s. sda3 нужно изменить на свой диск $disk2=explode(" ",$disk2); setGlobal("ThisComputer.driveSda3Use",round($disk2[1]/1048576, 2)); setGlobal("ThisComputer.PMUTemp",file_get_contents('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input')/1000); setGlobal("ThisComputer.CPUTemp",file_get_contents('/run/soc-temp')); // Электропитание через порт microUSB setGlobal("ThisComputer.PmuAcVolt",file_get_contents('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/ac/voltage_now')/1000000); setGlobal("ThisComputer.PmuAcAmp",file_get_contents('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/ac/current_now')/1000000); setGlobal("ThisComputer.PmuAcWatt",round(gg("ThisComputer.PmuAcVolt")*gg("ThisComputer.PmuAcAmp"), 2)); // Мощность посчитаем и округлим // Статистика внутреннего Ethernet setGlobal("ThisComputer.IntNetRXM",round(file_get_contents('/sys/class/net/eth1/statistics/rx_bytes')/1048576, 2)); // Читаем данные, переводим в МБ, округляем до сотых setGlobal("ThisComputer.IneNetTXM",round(file_get_contents('/sys/class/net/eth1/statistics/tx_bytes')/1048576, 2)); // Статистика внешнего Ethernet setGlobal("ThisComputer.ExtNetRXM",round(file_get_contents('/sys/class/net/ppp3/statistics/rx_bytes')/1048576, 2)); // Читаем данные, переводим в МБ, округляем до сотых setGlobal("ThisComputer.ExtNetTXM",round(file_get_contents('/sys/class/net/ppp3/statistics/tx_bytes')/1048576, 2)); //сценарий JconhsTemp1d // Этот сценарий используем только для температуры по тому что удаляем большие значения // Укажите предельное абсолютное значение температуры, больше которых значения будут затираться предыдущими $max=140; // Среднее значение температуры на случай если первое значение отсутствует $sprev=10; // Т.к. в highcharts нет возможности вывести диапазон, запрашиваем данные за последний 1 день $startTime=mktime()-86400*1; // Получить имя и проверить if ( isset($params['name']) ) { $name = $params['name']; } else { returm; } // Разбить на объект и свойство $name = explode('.', $name); // Получить объект по имени $obj=getObject($name[0]); // Получить id свойства $prop_id=$obj->getPropertyByName($name[1], $obj->class_id, $obj->id); // Получаем VALUE_ID для следующей таблицы $pvalue=SQLSelectOne("SELECT * FROM pvalues WHERE PROPERTY_ID='".$prop_id."' AND OBJECT_ID='".$obj->id."'"); // Получаем таблицу $arr_s = SQLSelect("SELECT UNIX_TIMESTAMP(ADDED) as ADDED, VALUE FROM phistory WHERE VALUE_ID='".$pvalue['ID']."' and UNIX_TIMESTAMP(ADDED)>=$startTime ORDER BY ADDED"); // Собрать структуру JSON $st = $params['callback'].'(['; foreach($arr_s as $s) { if ($f) $st .=','; if ($s['VALUE'] == '' or abs($s['VALUE'])>$max) $st .= '['.$s['ADDED'].'000,'.$sprev.']'; else { $st .= '['.$s['ADDED'].'000,'.$s['VALUE'].']'; $sprev=$s['VALUE']; } $f=true; } $st .= ']);'; // Ответ echo ($st);
Объекты класса:
Свойства класса:
Методы класса:
//$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',$params['status']); // установка свойство статуса, передаваемого в параметре status $this->setProperty('updatedTimestamp',time()); // обновление времени последней установки статуса
Свойства класса:
Методы класса:
$this->setProperty('MyStatus',$params['MyStatus']); // выставляем статус сенсора $this->setProperty('updatedTimestamp',time()); // выставляем время срабатывания сенсора if ($params['MyStatus']<1) { // если статус < 1 setGlobal('somebodyHomeText','Дома кто-то есть'); //ставим свойство глобальной переменной для текстового статуса ClearTimeOut("nobodyHome"); // очищаем таймер события "никого нет дома" SetTimeOut("nobodyHome","callMethod('NobodyHomeMode.activate');", 30*60); // назначаем новый таймер. срабатывает через час после последнего срабатывания датчика. if (getGlobal('NobodyHomeMode.active')) { callMethod('NobodyHomeMode.deactivate'); } $last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома" if (!$last_register || ((time()-$last_register)>1*60*60)) { // срабатывало более 1-го часа назад (либо никогда не срабатывало ранее) // say("Ну наконец-то кто-то появился дома!"); } registerEvent('inhouseMovement',$this->name,7); // регистрируем событие "движение внутри дома" }
Объекты класса:
if(gg('isDark')) { callMethod('MegaD2_Relays8.turnOn'); // включаем свет SetTimeOut("lightOffBoiler",'callMethod("MegaD2_Relays8.turnOff");', 2*60); } else { callMethod("MegaD2_Relays8.turnOff"); }
Методы класса:
// запускается из файла megad.php с передачей всех параметров от меги // Обрабатывает нажатия, отпускания, а так же двойные и долгие нажатия в любой комбинации. // Не забудьте настроить нужные порты Меги как P&R /* Не нагружайте этот метод своим кодом. Мой совет - просто передавайте события отсюда в свои модули. Проще будет при обновлении */ /* План по отлову двойного и долгого нажатия: При нажатии запускаем два разных таймера: _doublePressTimer на 1 секунду для контроля двойного нажатия _longPressTimer на 3 секунды для запуска события долгого нажатия Если уже существует _doublePressTimer, значит произошло событие двойное нажатие. При отпускании Произошло событие отпускание1. Оно произойдет в любом случае при отпускании Только если не было долгого нажатия - произойдет событие Отпустил2 удаляем _longPressTimer чтобы не запустилось долгое нажатие Обработку ненужных событий можно закоментировать, чтобы облегчить условия События "Отпустил" нужны в том случае, если ненужно выполнять событие нажал при событии долгое нажатие. Замените все нужные say() на код установки свойств или запуска ваших методов. Остальные закомментируйте Играемся, тестируем, смотрим лог, пишет свои комментарии! */ $ot=$this->object_title; // если мега передала все параметры одной строкой // all=OFF/0;OFF/0;OFF/0;OFF/0;ON/1;OFF/0;OFF/0;OFF;ON;OFF;OFF;OFF;OFF;OFF;288;203 /* универсального кода тут написать невозможно. Все будет зависеть от комплектации меги но с большей долей вероятности у Вас будет модуль 7I7O (7 входов 7 выходов) + 2 АЦП порта с меги. Разбиваем строку на массив, перебираем значения и устанавливаем нужные свойства. */ if (isset($params['all'])) { $ps = explode(";", $params['all']); $i=0; foreach($ps as $pt) { $i = $i + 1; switch ($i) { case 8: say('значение выхода 1 '.$pt); break; case 9: say('значение выхода 2 '.$pt); break; } } return; } //Параметр 'm' не передается при нажатии. А при отпускании кнопки его значение = 1 //Переводим его в статус. 0-не нажата 1-нажата //$ms=!$params['m']+0; if (!isset($params['m'])) {$ms=1;} else {$ms=0;} switch ($params['pt']) { //pt это порт Меги. Для каждого порта своя группа команд case case 0: //Этот порт на Меге настроен как P //Задача - просто переключить объект реле say('Я что то переключаю'); callMethod('Relay1MegaD1.switch'); break; case 1: // P&R //Задача - Передать объекту sensorTest статус 1 при замыкании порта Меги // и статус 0 при размыкании say('Передаю тестовому датчику статус '.$ms); //callMethod('sensorTest.statusChanged', array('status'=>$ms)); break; case 3: // P&R //Задача - Получить все события какие только можно if ($ms) { // Произойдет в любом случае say('Нажал!'); if (timeOutExists($ot.'_'.$params['pt'].'_doublePressTimer')) { say('Двойное нажатие!'); } setTimeOut($ot.'_'.$params['pt'].'_longPressTimer', "say('Долгое нажатие!');", 3); setTimeOut($ot.'_'.$params['pt'].'_doublePressTimer', "", 1); } else { // Произойдет в любом случае say('Отпустил 1!'); if (timeOutExists($ot.'_'.$params['pt'].'_longPressTimer')) { // Произойдет только если не было длинного нажатия say('Отпустил 2!'); } clearTimeOut($ot.'_'.$params['pt'].'_longPressTimer'); } break; // Далее идут уже лично мои настройки. Оставил их для примера. case 4: // P&R callMethod('sensorOutdoorAirDamperClose.statusChanged' ,array('status'=>$ms)); //say('Передаю датчику воздушной заслонки статус '.$ms); break; default: $s = 'Получено какое то сообщение от Меги'; if (isset($params['pt'])) { $s = $s.' порт '.$params['pt']; } if (isset($params['mm'])) { $s = $s.' статус 0'; } say($s); }
Объекты класса:
if(getGlobal('NobodyHomeMode.active')=="0") { runScript('Прожектор'); say('Хозяин! Кто то ломится в дверь! Не желаешь посмотреть кого нелёгкая принесла?',3); sleep (2); playSound('dvernoj_zvonok'); }else{ runScript('Прожектор'); say('Хозяев нет дома! Позвони им лучше!',3); }
Методы класса:
Объекты класса:
if(gg('ModeWork.Mode') == 'Выкл') { callMethod('MegaD3_Relays12.turnOff')&& callMethod('MegaD3_Relays9.turnOff'); }else if(gg('ModeWork.Mode') == 'Вкл') { callMethod('MegaD3_Relays12.turnOn') && callMethod('MegaD3_Relays9.turnOn'); }else if(gg('ModeWork.Mode') == '1/2') { callMethod('MegaD3_Relays12.turnOff') && callMethod('MegaD3_Relays9.turnOn'); }
Объекты класса:
Объекты класса:
Свойства класса:
Методы класса:
$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','2'); callMethod("RadioSetting.Control","stop");
setGlobal('minMsgLevel','1');
/* Если "Ночной режим" не активирован, то при активации режима "Никого нет дома" установить минимальное значение произношений А листы, выключить радио (если работало) и выключить везде свет */ if(getGlobal('NightMode.active')=="0") { setGlobal('minMsgLevel','2'); callMethod("RadioSetting.Control","stop"); rs('turnOffAll'); } say("По-моему никого нет дома..."); setGlobal('somebodyHomeText','Никого нет дома'); if (timeBetween('00:00', '7:00')) { say("Хотя скорее всего все спят :) Ночь ведь!"); }
if(getGlobal('NightMode.active')=="0") { setGlobal('minMsgLevel','1'); cm('RadioSetting.Control',array('sta'=>'Дорожное радио','cmd'=>'play','vol'=>35)); } if (timeBetween('06:45', '11:00')) { // движение замечено утром runScript('morningGreeting'); // запускаем скрипт "доброе утро" } if (timeBetween('11:01', '17:00')) { // движение замечено днем runScript('dayGreeting'); // запускаем скрипт "добрый день" } if (timeBetween('17:01', '21:00')) { // движение замечено вечером runScript('eveningGreeting'); // запускаем скрипт "добрый вечер" } /* Если время в промежуткое между установленным и режим "Темное время" активирован, то при обнаружении движения включить свет на кухне */ if(timeBetween('16:00', '22:00')&& getGlobal('isDark')=="1") { cm ("MegaD1_Relays10.turnOn"); }
Объекты класса:
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); }
Свойства класса:
Методы класса:
$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'); }
$this->setProperty("status",0);
$this->setProperty("status",1);
Объекты класса:
Объекты класса:
Объекты класса:
if(gg('isDark')) { callMethod('MegaD2_Relays7.turnOn'); // включаем свет SetTimeOut("lightOff",'callMethod("MegaD2_Relays7.turnOff");', 5*60); } else { callMethod("MegaD2_Relays7.turnOff"); }
Объекты класса:
Свойства класса:
Методы класса:
$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")));
$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); }
Свойства класса:
Методы класса:
$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);
Свойства класса:
Методы класса:
$latestActivity=$this->getProperty('LatestActivity'); $this->setProperty('LatestActivity',time()); $this->setProperty('LatestActivityTime',date('H:i')); $this->setProperty('SomebodyHere',1); $ot=$this->object_title; if ($this->getProperty("IdleDelay")) { $activity_timeout=(int)$this->getProperty("IdleDelay"); } else { $activity_timeout=10*60; } clearTimeOut($ot."_activity_timeout"); setTimeOut($ot."_activity_timeout","callMethod('".$ot.".onIdle');",$activity_timeout); $this->callMethod("updateActivityStatus");
$this->setProperty('SomebodyHere',0);
$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";
Объекты класса:
Методы класса:
Объекты класса:
echo "status received: ".$params['status'];
global $voicemode; $voicemode='off'; processCommand($params['message']);
Свойства класса:
Методы класса:
Объекты класса:
$details=array(); $red_state=0; $yellow_state=0; if (!isOnline('Internet')) { $yellow_state=1; $details[]=LANG_GENERAL_NO_INTERNET_ACCESS; } 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."."); say(implode(". ",$details)); } else { say(LANG_GENERAL_COMMUNICATION_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title); } $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'); 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'); }
$details=array(); $red_state=0; $yellow_state=0; 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); }
Объекты класса:
Свойства класса:
Методы класса:
//START openweather module $updateTime = gg('ow_setting.updateTime'); if($updateTime > 0) { $count = gg('ow_setting.countTime'); if($count >= $updateTime) { include_once(DIR_MODULES . 'app_openweather/app_openweather.class.php'); $app_openweather = new app_openweather(); $app_openweather->get_weather(gg('ow_city.id')); sg('ow_setting.countTime', 1); } else { $count++; sg('ow_setting.countTime', $count); } } // END openweather module
Объекты класса:
// Устанавливает текст дня недели и даты if (timeIs('00:00')) { runScript('WeekDayType'); say ('обновление даты',1); } // Обновление курса валют if (timeIs('14:00')) { runScript('MoneyExchange'); say('Обновление курса валют'); } // Спокойной ночи if (timeIs('21:00')) { runScript('goodNight'); say('Спокойной ночи, детки!'); } // С днем Рождения if((timeIs('7:00') && (gg("ThisComputer.isWeekDay")=="1")) || (timeIs('11:00') && (gg("ThisComputer.isWeekDay")!="1"))) { RunScript('birthday'); }
$h=(int)date('G',time()); $m=date('i',time()); setGlobal('timeNow',date('H:i')); //callMethod('ThisComputer.ComputerStatus'); // статус сервера (запуск каждую минуту) if (($h>=8) && getGlobal('clockChimeEnabled')) { if ($m=="00") { say(timeNow(),1); } } $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('isDark')=="1") { setGlobal("isDark",0); callMethod('DarknessMode.deactivate'); } elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')!="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('21:30')) { callMethod('NightMode.activate'); } elseif ((timeIs('06:55') && (gg("ThisComputer.isWeekDay")=="1")) || (timeIs('10:55') && (gg("ThisComputer.isWeekDay")!="1"))) { callMethod('NightMode.deactivate'); say('Темное время суток выключен',1); } if (timeIs("03:00")) { runScript("systemMaintenance"); } if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) { runScript('MorningAlarm'); } //будильник $objects=getObjectsByClass("AlarmClock"); foreach($objects as $obj) { // переберем все будильники в системе if (getGlobal($obj['TITLE'].".AlarmOn") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))){ //если будильник включен и время совпало callMethod($obj['TITLE'].".AlarmRun"); // выполним метод будильника } } //Выключение компов $objects=getObjectsByClass("CompAll"); foreach ($objects as $obj) { if (date('H:i')=='00:00') { sg($obj['TITLE'].".timetoday", 0);//сбрасываем ежедневное время в 12 ночи } if (gg($obj['TITLE'].".Power")=="On") { sg($obj['TITLE'].".timetoday", gg($obj['TITLE'].".timetoday")+1); //прибавляем 1 мин к времени работы, если комп включен } if (gg($obj['TITLE'].".timetoday")>=gg($obj['TITLE'].".timelimit")) { cm($obj['TITLE'].".turnoff"); //запускаем метод на выключение, если время за сегодня больше лимита } { $a=getGlobal ($obj ['TITLE'].".timelimit"); $b=getGlobal ($obj ['TITLE'].".timetoday"); $left=$a-$b; setGlobal($obj['TITLE'].".timeleft",$left); if (gg($obj['TITLE'].'.Power')=='On' && gg($obj['TITLE'].'.timeleft')=='5'){ cm($obj['TITLE'].".say"); }} // автоматическое выключение компьютера Эвелины if (timeIs("20:54") && gg('CompEvelina.Power')== 'On'){ sg('CompEvelina.timetoday', gg('CompEvelina.timelimit')-6); } // автоматическое выключение компьютера Ильюшки if (timeIs("21:54") && gg('CompIlya.Power')== 'On'){ sg('CompIlya.timetoday', gg('CompIlya.timelimit')-6); } } // параметры системы $uptime=shell_exec('uptime'); setGlobal("ThisComputer.uptime",$uptime); $mem=shell_exec("free -m|grep Mem|awk '{print $2,$3,$4}'"); $mem=explode(" ",$mem); $mem="Всего: ".$mem[0]." Занято: ".$mem[1]." Доступно: ".$mem[2]; setGlobal("ThisComputer.memory",$mem); $disk=shell_exec("df -h|grep sdc1|awk '{print $2,$3,$5}'"); // p.s. sdc1 нужно изменить на свой диск $disk=explode(" ",$disk); $disk=$disk[1]."/".$disk[0]." ( ".$disk[2].")"; setGlobal("ThisComputer.driveStatus",$disk); // Получаем часы и минуты отдельно $timeH=date("H", time()); $timeM=date("i", time()); sg("ThisComputer.timeH",$timeH); sg("ThisComputer.timeM",$timeM); // С днем Рождения if((timeIs('7:15') && (gg("ThisComputer.isWeekDay")=="1")) || (timeIs('11:00') && (gg("ThisComputer.isWeekDay")!="1"))) { RunScript('birthday'); }
Методы класса:
Объекты класса:
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']); } }
Свойства класса:
Объекты класса:
Свойства класса:
Объекты класса:
, Россия
© 2025 - Site Built By SergeJey | Реквизиты: Курицын С. С. ИНН 762001394609 | Контакты | Публичный договор
SmartLiving