Свойства класса:
Методы класса:
Свойства класса:
Методы класса:
$volume=round(65535*$params['VALUE']/100); $this->setProperty('volumeLevel',$params['VALUE']); safe_exec('..\\apps\\nircmd\\nircmdc setsysvolume '.$volume); say("Изменилась громкость до ".$params['VALUE']." процентов");
Объекты класса:
say("Отключено питание");
$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); }
Свойства класса:
Методы класса:
$this->setProperty('LastRun',date('Y-m-d H:i:s'));
$name='Cron_'.$this->object_title; SQLExec("DELETE FROM jobs WHERE title='".$name."'");
Свойства класса:
Методы класса:
$state=$this->getProperty("state"); $state++; if ($state>1) $state=0; $this->setProperty("state",$state);
$this->setProperty("error",0); $this->setProperty("errorMessage",'');
$this->setProperty("state",0);
$this->setProperty("state",1);
// Если пришел ответ - сбрасываем ошибку //$this->callMethod("errorReset"); // Обновляем время $this->setProperty("responceTime",time()); //Проверяем включена ли обратная связь $feedback=$this->getProperty("feedback"); if ($feedback!=1) return; // Если проверка обратной связи выключена - прекращаем выполнение $responce=$this->getProperty("responce"); $state=$this->getProperty("state"); // Если response не соответствует state, вероятно, реле переключили автономно if ($responce!=$state) { // Актуализируем текущее состояние $this->setProperty("state",$responce); }
$state=$this->getProperty("state"); $this->setProperty("NO_set",$state); $this->setProperty("NC_set",abs($state-1)); // Смотрим нужна ли проверка ответа от контроллера $check=$this->getProperty("checkResponce"); if ($check=='') { $check=0; $this->setProperty("checkResponce",0); } // Если нужна - проведем через указанное время if ($check==1) { //После всех действий проверяем ответ контроллера $responceTimeout=$this->getProperty("responceTimeout"); $this->setProperty("responceTime",''); $ot=$this->object_title; clearTimeOut($ot."_checkResponce"); setTimeOut($ot."_checkResponce","callMethod('".$ot.".check');",$responceTimeout); }
$ot=$this->object_title; //Проверяем ответ от контроллера. $NO=$this->getProperty("NO_set"); $state=$this->getProperty("state"); $response=$this->getProperty("responce"); $respTime=$this->getProperty("responceTime"); if ($this->getProperty("responceTimeout")!='') { $respTimeout=$this->getProperty("responceTimeout"); } else { $this->setProperty("responceTimeout",5); $respTimeout=5; } //При правильной работе параметр responce соответствует параметрам state и NO_set if (($response==$state)&&($response==$NO)&&($respTime!='')) { $this->setProperty("responceTime",''); $this->callMethod("errorReset"); clearTimeOut($ot."_relaySet"); clearTimeOut($ot."_checkResponce"); } else { // Если в работе есть ошибки, например, не пришел ответ от контроллера - фиксируем ошибку $error=$this->getProperty("error"); if ($error!='') $error=$error+1; $this->setProperty("error",$error); $this->setProperty("errorMessage","Ответ контроллера не получен "); $this->callMethod("error"); //Если количество ошибок меньше 10 if ($error<10) { // Через 10 секунд повторно отправляем команду на реле clearTimeOut($ot."_relaySet"); setTimeOut($ot."_relaySet","callMethod('".$ot.".relaySet');",10); } else { // Уведомляем о проблеме в работе реле $errorMessage=$this->getProperty("errorMessage"); $comment=$this->getProperty("comment"); $message=$ot.' '.$comment.' '.$errorMessage; say($message,1); } } /* //Если поле responce не пустое, значит он пришел и контроллер работает нормально, можно сбросить ошибки if (time()-$respTime<=$respTimeout) { //$this->setProperty("responce",''); //$this->setProperty("error",''); //$this->setProperty("errorMessage",''); } else { // Если ответ не пришел, значит есть ошибка в работе и поэтому восстанавливаем исходное положение state $this->setProperty("error",1); $this->setProperty("errorMessage","Ответ контроллера не получен "); $this->callMethod("error"); $state=$this->getProperty("state"); $state = abs($state-1); $this->setProperty("state",$state); //Через 5 секунд сбрасываем ошибку, чтобы можно было произвести повторную попытку clearTimeOut($ot."_error"); setTimeOut($ot."_error","callMethod('".$ot.".errorReset');",5); }*/
//Изменилось состояние, проверяем режим работы условный или безусловный. //Если режим не задан - по-умолчанию считаем что он безусловный //if ($this->getProperty("error")=='') $this->setProperty("error",0); $this->setProperty("error",0); if ($this->getProperty("condition")=='') $this->setProperty("condition",0); if ($this->getProperty("feedback")=='') $this->setProperty("feedback",0); if ($this->getProperty("responceTimeout")=='') $this->setProperty("responceTimeout",5); $condition=$this->getProperty("condition"); $response=$this->getProperty("response"); $error=$this->getProperty("error"); //$responceTimeout=$this->getProperty("responceTimeout"); $ot=$this->object_title; //if ($error!=0) return; //Если безусловный режим, меняем значения реле if ($condition==0) { // Если responseTime не пустое, значит пришел feedback, в таком случае очищаем responseTime и прекращаем выполнение $responseTime=$this->getProperty("responseTime"); $state=$this->getProperty("state"); $feedback=$this->getProperty("feedback"); if (($responseTime!='') and ($state==$response) and ($feedback=="1")) { $this->setProperty("responseTime",''); return; } else { $this->callMethod("relaySet"); } } if ($condition!=0) { $this->callMethod("conditional"); } /* перенесено в relaySet $check=$this->getProperty("checkResponce"); if ($check=='') { $check=0; $this->setProperty("checkResponce",0); } if ($check==1) { //После всех действий проверяем ответ контроллера clearTimeOut($ot."_checkResponce"); setTimeOut($ot."_checkResponce","callMethod('".$ot.".check');",$responceTimeout); } */
Объекты класса:
$state=$this->getProperty("state"); if ($state==1) { setTimeOut("UV2-OFF","sg('UV2.state',0);",15*60); } else { clearTimeOut("UV2-OFF"); }
$state=$this->getProperty("state"); if ($state==1) { setTimeOut("UV1-OFF","sg('UV1.state',0);",15*60); } else { clearTimeOut("UV1-OFF"); }
Свойства класса:
Методы класса:
//$params["USER_OBJECT"]
//$params["USER_OBJECT"]
Объекты класса:
Свойства класса:
Методы класса:
Объекты класса:
$com=$this->getProperty("command"); switch ($com) { case 100: // cool 25 fan medium $this->setProperty("sendIR","Z6VXAe8BAACBAgAATwYAAHURAADtHgAAUSMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1ISEBAQEBASEBISEBAQEBAQEhIQEBAQEBASEBASEBASEBAQEBAQEBAQEBAQEBAQEBQSEBIQEhAQEhIQEBISEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBISEBAQFBAQEBAQEBAQEhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEhAQEBAQEBAQEBAQEBIQEBIQEBAQEB"); break; case 200: // heat 25 fan medium $this->setProperty("sendIR","Z6VXAfwBAABEAgAAdQIAAFkGAAB2EQAA9h4AAEgjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGMjICAgICAjICMjICAgICAgIyMgICAgICAgICAjICAjICAgICAgICAgICAgICAgICUjIyMgIyAgIyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICAgICAgJSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICMgICMgICAgIB"); break; }
Свойства класса:
Методы класса:
$S0 = $this->getProperty("S0"); $S1 = $this->getProperty("S1"); $ot=$this->object_title; $inputState = $this->getProperty("inputState"); if ($inputState==$S1) { $this->callMethod('action'); }
if ($this->getProperty("S0")=='') $this->setProperty("S0","OPEN"); if ($this->getProperty("S1")=='') $this->setProperty("S1","CLOSE"); if ($this->getProperty("timeForAction")=='') $this->setProperty("timeForAction",10); $S0 = $this->getProperty("S0"); $S1 = $this->getProperty("S1"); $timeForAction = $this->getProperty("timeForAction"); $ot=$this->object_title; $inputState = $this->getProperty("inputState"); // Если произошло событие if ($inputState==$S1) { $this->setProperty("updatedTimestamp",time()); $this->setProperty("updatedTime",date('H:i')); $this->setProperty("state",1); clearTimeOut($ot."_checkForAction"); setTimeOut($ot."_checkForAction","callMethod('".$ot.".checkState');",$timeForAction); } if ($inputState==$S0) { $this->setProperty("state",0); clearTimeOut($ot."_checkForAction"); }
Свойства класса:
Методы класса:
SQLUpdate('objects', array("ID"=>$this->id, "DESCRIPTION"=>$this->getProperty("title").' '.gg('sysdate').' '.gg('timenow')));
Объекты класса:
Свойства класса:
Методы класса:
$input=$this->getProperty("Input"); //Если на вход пришел 0 - завершаем выполнение метода if ($input==0) return; $this->setProperty("LastMovementTimestamp",time()); $this->setProperty("LastMovementTime",date("H:i")); $this->setProperty("Status",1); $timeout=$this->getProperty("IdleDelay"); if ($timeout=='') $timeout=60; $ot=$this->object_title; setTimeOut($ot."_timeout","sg('".$ot.".Status',0);",$timeout); if ($this->getProperty("LinkedRoom")!='') { $LinkRoom=$this->getProperty("LinkedRoom"); $name=$this->getProperty("comment"); if ($name!='') { callMethod($LinkRoom.".onActivity",array("sensor"=>$ot)); } else { callMethod($LinkRoom.".onActivity",array("sensor"=>$ot)); } }
Объекты класса:
Свойства класса:
Методы класса:
// Версия от 27.07.2017 /* Модуль для слежения за работой перефирийных устройств. От устройств с определенной периодичностью приходит значение их аптайма, если оно не приходит в течение таймаута, значит устройство не работает, о чем выводится предупреждение. */
$alive=$this->getProperty("alive"); $ip=$this->getProperty("IPaddr"); $ot=$this->object_title; if ($alive==0) { say ($ot." ".$ip." не отвечает",1); $this->setProperty("Status","Down"); $this->callMethod("stateNotAlive"); } else { if (($this->getProperty("Status"))!="OK") { say ($ot." ".$ip." работает нормально",1); $this->callMethod("stateAlive"); $this->setProperty("LastBoot",date("d-m-Y H:i")); } $this->setProperty("Status","OK"); }
//$this->setProperty("LastBoot",date("d-m-Y H:i"));
$UptimeSec=$this->getProperty("UptimeSec"); $Uptime = sprintf('%02dd %02dh %02dm', $UptimeSec/86400, ($UptimeSec % 86400)/3600, ($UptimeSec % 3600)/60); $this->setProperty("Uptime",$Uptime); $this->setProperty("alive",1); $ot=$this->object_title; $alive_timeout=(int)$this->getProperty("aliveTimeOut"); if (!$alive_timeout) { $alive_timeout=3*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);
Объекты класса:
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
if ($this->getProperty("active")==1) { $this->setProperty('active',0); return; }
if ($this->getProperty("active")==0) { $this->setProperty('active',1); return; }
$this->setProperty("updated",time()); $this->setProperty("updatedTime",date('H:i')); if ($this->getProperty('active')) { say("Режим ".$this->getProperty('title')." активирован.",1); } else { say("Режим ".$this->getProperty('title')." выключен.",1); }
Объекты класса:
setGlobal('minMsgLevel','1'); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nightmode_deactivate.php'); /* end injection of {SDevices} */ sg("Livingroom.Light0",0); sg("smartLedHall.prog","random");
setGlobal('minMsgLevel','2'); sg("Kitchen.Light4",0); sg("Livingroom.Light0",10); sg("XiRgb01.color","ff4000"); sg("Hall.Light1",0); sg("smartLedHall.prog","night"); // Ночной режим ленты sg("smartLed2.prog","night"); // Ночной режим ленты /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nightmode_activate.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/darknessmode_deactivate.php'); /* end injection of {SDevices} */
if (gg(" NobodyHomeMode.active")==0) sg("Kitchen.Light4",1); sg("Livingroom.Light0",50); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/darknessmode_activate.php'); /* end injection of {SDevices} */
callMethod("mainSecure.armed");
callMethod("mainSecure.disarm");
if ((gg("DarknessMode.active"))&&(!gg("NightMode.active"))) { sleep(2); sg("Hall.Light1",1); setTimeOut("HallLight1","sg('Hall.Light1',0);",4*60); sleep(10); sg("Livingroom.Light2",1); sg("Kitchen.Light1",1); } /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nobodyhomemode_deactivate.php'); /* end injection of {SDevices} */
include_once(DIR_MODULES.'app_smarttv/app_smarttv.class.php'); $smartTv=new app_smarttv(); $smartTv->control("TV_kitchen",'sendCode',1); //Выключаем телевизор sg("smartLedHall.prog","off"); RunScript("LightOffAll"); //sg("UV1.state",1); //sg("UV2.state",1); sg("TH_bathHF.state",0); $message="Потребляемая мощность: ".gg("Power.value")."Вт"; runScript('message',array('type'=>'tlg','name'=>'all','mes'=>$message)); if (gg("SecureModeAuto")&&(gg("SecurityArmedMode.active")==0)) callMethod("SecurityArmedMode.activate"); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/nobodyhomemode_activate.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/econommode_activate.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/econommode_deactivate.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
$ADCMin = $this->getProperty("ADCMin"); $ADCMax = $this->getProperty("ADCMax"); $PressureMin = $this->getProperty("PressureMin"); $PressureMax = $this->getProperty("PressureMax"); $ADC = $this->getProperty("ADC"); $linkedProperty = $this -> getProperty("LinkedProperty"); // Проверяем, что все значения для рассчета заданы и корректны, иначе получил деление на ноль и уничтожим вселенную if ($PressureMin=='') return; if ($PressureMax=='') return; if ($ADCMin=='') return; if ($ADCMax=='') return; if ($PressureMin==$PressureMax) return; $voltage=(5*$ADC)/1024; $this->setProperty("Voltage",round($voltage,2)); /* Где-то видел такой рассчет, однако что-то в нем не так, пока оставлю в комментах. $PressureBar=(3*($voltage-0.47))*10; $this->setProperty("PressureBar",round($PressureBar,2)); */ $ADCK = ($ADCMax-$ADCMin)/($PressureMax-$PressureMin); $Pressure = (($ADC-$ADCMin)/$ADCK); $this->setProperty("ADCK",$ADCK); $this->setProperty("Pressure",round($Pressure,2)); if ($linkedProperty!='') sg($linkedProperty,round($Pressure,2));
Объекты класса:
Свойства класса:
Методы класса:
$alive_timeout=5*60; $Alive=$this->getProperty("Alive"); $Value=$this->getProperty("Value"); $InputCount=$this->getProperty("InputCount"); $InputCountPrev=$this->getProperty("InputCountPrev"); $LastPulseTime=$this->getProperty("LastPulseTime"); $PPV=$this->getProperty("PPV"); $Count=$this->getProperty("Count"); $ot=$this->object_title; if ($Alive=="") { $Alive=0; $this->setProperty("Alive",0); } if ($LastPulseTime=="") $LastPulseTime=0; // Прошедшее время с последнего измерения $dt=time()-$LastPulseTime; if ($InputCountPrev=="") $InputCountPrev=0; if ($Count=="") $Count=0; if ($PPV=="") $PPV=1000; // Если датчик был перезагружен if ($InputCountPrev>$InputCount) $InputCountPrev=0; // Рассчитываем количество импульсов с момента последних показаний $DeltaCount=$InputCount-$InputCountPrev; $Count=$Count+$DeltaCount; // Рассчитываем текущее значение счетчика //$Value=round($Count/$PPV,3); // Рассчитываем изменение значения счетчика с момента последнего замера $DeltaVal=$DeltaCount/$PPV; // Рассчитываем текущее значение счетчика $Value=round($Value+$DeltaVal,3); // Рассчитываем скорость изменения показаний (мгновенная мощность или потребление воды) $VPH=round($DeltaVal/($dt/3600),3); // Обновляем свойства объекта $this->setProperty("VPH",$VPH); $this->setProperty("InputCountPrev",$InputCount); $this->setProperty("Value",$Value); if ($DeltaCount!=0) $this->setProperty("LastPulseTime",time()); $this->setProperty("Count",$Count); // Проверяем активен ли датчик if (($dt>$alive_timeout)&&($Alive!=0)) { $this->setProperty("Alive",0); $phrase="Датчик ".$ot." недоступен"; say($phrase,0); } if (($dt<$alive_timeout)&&($Alive==0)) { $this->setProperty("Alive",1); $phrase="Датчик ".$ot." активен"; say($phrase,0); } $cycle_time=2*60; setTimeOut($ot."_cycle","callMethod('".$ot.".CalcValue');",$cycle_time); // Если информация с датчика не приходит больше суток - прекращаем выполнение цикла if ($dt>(60*60*24)) ClearTimeOut($ot."_cycle");
Объекты класса:
Методы класса:
Объекты класса:
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); } /* begin injection of {app_radio} */ include_once(DIR_MODULES.'app_radio/app_radio.class.php'); $app_radio = new app_radio(); if(is_array($params)) { foreach($params as $key=>$value) { switch((string)$key) { case 'sta': $app_radio->change_station($params['sta'], $app_radio); break; case 'cmd': $app_radio->control($params['cmd']); break; case 'vol': $app_radio->set_volume($params['vol'], $app_radio); break; default: if($value == 'play' || $value == 'stop') $app_radio->control($value); elseif(strpos($value, 'vol') === 0) $app_radio->set_volume((int)substr($value, 3), $app_radio); elseif(strpos($value, 'sta:') === 0) $app_radio->change_station(substr($value, 4), $app_radio); } } } /* end injection of {app_radio} */
Свойства класса:
Методы класса:
Свойства класса:
Методы класса:
$this->setProperty("errorMessage",''); $this->setProperty("error",'');
$state=$this->getProperty("state"); $this->setProperty("NC_set",abs($state-1)); $this->setProperty("NO_set",$state);
$ot=$this->object_title; //Проверяем ответ от контроллера. //Если поле responce не пустое, значит он пришел и контроллер работает нормально, можно сбросить ошибки if ($this->getProperty("responce")!='') { $this->setProperty("responce",''); $this->setProperty("error",''); $this->setProperty("errorMessage",''); } else { // Если ответ не пришел, значит есть ошибка в работе и поэтому восстанавливаем исходное положение state $this->setProperty("error",1); $this->setProperty("errorMessage","Ответ контроллера не получен "); $this->callMethod("error"); $state=$this->getProperty("state"); $state = abs($state-1); $this->setProperty("state",$state); //Через 5 секунд сбрасываем ошибку, чтобы можно было произвести повторную попытку clearTimeOut($ot."_error"); setTimeOut($ot."_error","callMethod('".$ot.".errorReset');",5); }
//Изменилось состояние, проверяем режим работы условный или безусловный. //Если режим не задан - по-умолчанию считаем что он безусловный if ($this->getProperty("condition")=='') $this->setProperty("condition",0); if ($this->getProperty("responceTimeout")=='') $this->setProperty("responceTimeout",5); $condition=$this->getProperty("condition"); $state=$this->getProperty("state"); $error=$this->getProperty("error"); $responceTimeout=$this->getProperty("responceTimeout"); $ot=$this->object_title; //Если в работе есть ошибки - прекращаем выполнение if ($error!='') return; //Если безусловный режим, меняем значения реле if ($condition==0) { $this->callMethod("relaySet"); } if ($condition!=0) { $this->callMethod("conditional"); } //После всех действий проверяем ответ контроллера clearTimeOut($ot."_checkResponce"); setTimeOut($ot."_checkResponce","callMethod('".$ot.".check');",$responceTimeout);
Объекты класса:
Свойства класса:
Методы класса:
$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);
Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty("status",1); $this->callMethod("sendCommand",array('command'=>'-on_ch'.$this->getProperty("channel")));
$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")));
$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 rcon$code1:$code2;"); $this->setProperty("status",1);
$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);
Свойства класса:
Методы класса:
$delay=1; // Количество секунд между выключением групп света //Определяем массив групп света $lightgroups = array('Light1', 'Light2', 'Light3', 'Light4', 'Light5'); foreach ($lightgroups as $group) { $this->setProperty($group,0); /*if ($this->getProperty($group)) { $this->setProperty($group,0); sleep($delay); }*/ }
$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']; } if (!function_exists('cmp_room')) { function cmp_room($a, $b) { if ($a['diff'] == $b['diff']) { return 0; } return ($a['diff'] < $b['diff']) ? -1 : 1; } } usort($rooms,"cmp_room"); 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); } if (gg("NobodyHomeMode.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"; /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/Rooms_updateActivityStatus.php'); /* end injection of {SDevices} */
$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=$this->getProperty("IdleDelay"); } else { $activity_timeout=gg("IdleDelay"); } clearTimeOut($ot."_activity_timeout"); setTimeOut($ot."_activity_timeout","callMethod('".$ot.".onIdle');",$activity_timeout); //$this->callMethod("updateActivityStatus"); sg("LastMovement",$ot); sg('LastMovementTimestamp',time()); sg('LastMovementTime',date('H:i')); $isBedroom=$this->getProperty("isBedroom"); if ((gg("WakeUpTime")==0)&&($isBedroom!=1)) sg("WakeUpTime",date('H:i')); if (gg("NobodyHomeMode.active")==1) callMethod("NobodyHomeMode.deactivate"); callMethod("mainSecure.event",array("sensor"=>$params["sensor"])); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/Rooms_onActivity.php'); /* end injection of {SDevices} */
$this->setProperty('SomebodyHere',0); /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/Rooms_onIdle.php'); /* end injection of {SDevices} */
Объекты класса:
if ((gg("DarknessMode.active"))&&(!gg("NightMode.active"))) { sg("Hall.Light1",1); setTimeOut("HallLight1","sg('Hall.Light1',0);",2*60); } if (gg("NightMode.active")) { sg("smartLedHall.prog","nightMove"); setTimeOut("HallNightMove",'sg("smartLedHall.prog","night");',70); }
/* if (timeBetween("02:00","07:00")) { sg("UV1.state",1); } */
//При движении на кухне - отключаем УФ-лампу sg("UV1.state",0);
$auto=$this->getProperty("AutoLight"); $night=gg("NightMode.active"); $dark=gg("DarknessMode.active"); /* $light=0; $lightgroups = array('Light1', 'Light2', 'Light3', 'Light4', 'Light5'); foreach ($lightgroups as $group) { if ($this->getProperty($group)) $light++; } if (($auto)&&($dark)&&(!$night)&&($light==0)) { $this->setProperty("Light2",1); setTimeOut("LivingroomLight2","sg('Livingroom.Light2',0);",3*60); } */
$auto=$this->getProperty("AutoLight"); if ($auto) $this->callMethod("LightOff");
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SDevices_setUpdatedText.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SDevices_setUpdatedText.php'); /* end injection of {SDevices} */
require(DIR_MODULES.'devices/SDevices_statusUpdated.php');
require(DIR_MODULES.'devices/SDevices_logicAction.php');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SButtons_pressed.php');
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_takeSeries.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_motionDetected.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_motionDetected.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_updatePreview.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_updatePreview.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_takeSnapshot.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCameras_takeSnapshot.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SControllers_turnOff.php');
require(DIR_MODULES.'devices/SControllers_switch.php');
require(DIR_MODULES.'devices/SControllers_turnOn.php');
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SDimmers_levelWorkUpdated.php'); /* end injection of {SDevices} */
require(DIR_MODULES.'devices/SDimmers_turnOn.php');
require(DIR_MODULES.'devices/SDimmers_turnOff.php');
require(DIR_MODULES.'devices/SDimmers_levelUpdated.php');
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SGroups_statusUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SGroups_switch.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SGroups_turnOff.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SGroups_turnOn.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_turnOn.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SRGB_turnOff.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_setColor.php'); /* end injection of {SDevices} */
Объекты класса:
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_turnOff.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_turnOn.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_switchEnable.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_enable.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_disable.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_valueUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_valueUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_statusUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_statusUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_tempDown.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_tempUp.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_tempUp.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SThermostats_tempDown.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCounters_valueWorkUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCounters_refreshStats.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SCounters_valueUpdated.php'); /* end injection of {SDevices} */
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SLeak_statusUpdated.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SOpenClose_statusUpdated.php');
Объекты класса:
sg('LastDoorTimestamp',time()); sg('LastDoorTime',date('H:i')); callMethod('Hall.onActivity',array("sensor"=>"door")); if (!gg("NightMode.active")) { sg("Hall.Light1",1); setTimeOut("HallLight1","sg('Hall.Light1',0);",1*60); } //callMethod("mainSecure.event",array("sensor"=>"door")); sleep(3); sg('LastMovement','Door');
Свойства класса:
Методы класса:
require(DIR_MODULES.'devices/SSensors_valueUpdated.php');
Свойства класса:
Свойства класса:
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SPowerSensors_valueUpdated.php'); /* end injection of {SDevices} */
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SPowerSensors_loadStatusChanged.php'); /* end injection of {SDevices} */
Свойства класса:
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/STempHumSensors_valueUpdated.php'); /* end injection of {SDevices} */
Методы класса:
/* begin injection of {SDevices} */ require(DIR_MODULES.'devices/SSmoke_statusUpdated.php'); /* end injection of {SDevices} */
Свойства класса:
Свойства класса:
Методы класса:
if ($this->getProperty("status")==0) return; // Устанавливаем сигнализации соответствующий статус $this->setProperty("status",0); // Чистим таймауты, если сигнализация ожидала постановки на охрану или тревогу $ot=$this->object_title; clearTimeout($ot."_arm"); clearTimeout($ot."_alarm"); // Обнуляем счетчик событий $this->setProperty("eventCounter",0); $name=$this->getProperty("name"); $msgPriority=$this->getProperty("msgPriority"); if ($msgPriority!=-1) { if (($name=='')||($name=='дом')||($name=='квартира')) { say("Объект снят с охраны",$msgPriority); } else { say("Контур $name снят с охраны",$msgPriority); } } $modeLink=$this->getProperty("modeLink"); if (($modeLink==1)&&(gg("SecurityArmedMode.active")==1)) callMethod("SecurityArmedMode.deactivate");
$this->setProperty("status",5); $this->setProperty("lastAlarmTimestamp",time()); $this->setProperty("lastAlarmTime",date("Y-m-d H:i")); $name=$this->getProperty("name"); $msgPriority=$this->getProperty("msgPriority"); if ($msgPriority!=-1) { if (($name=='')||($name=='дом')||($name=='квартира')) { say("Тревога! Сработка сигнализации!",$msgPriority); } else { say("Тревога! Сработка сигнализации! Контур: $name",$msgPriority); } } // Через интервал повторяем $repeatTime=$this->getProperty("alarmRepeat"); if ($repeatTime>0) { $ot=$this->object_title; setTimeOut($ot."_alarm","callMethod('".$ot.".alarm');",$repeatTime*60); }
$status=$this->getProperty("status"); if ($status<2) return; $counter=$this->getProperty("eventCounter")+1; $this->setProperty("eventCounter",$counter); $treshold=$this->getProperty("eventTreshold"); if ($treshold=='') $treshold=0; $msgPriority=$this->getProperty("msgPriority"); $sensor=$params['sensor']; if ($sensor!='') { $this->setProperty("statusText","Сработка датчика $sensor"); if ($msgPriority!=-1) say("Сработка датчика $sensor",$msgPriority); } // Если счетчик событий превысил допустимый порог - тревога if ($counter>$treshold) { $this->callMethod("warning"); } else { //Если произошло событие, но не превысило порог - режим внимание $this->setProperty("status",3); $name=$this->getProperty("name"); $this->setProperty("statusText","Контур $name внимание"); if ($msgPriority!=-1) say("Контур $name внимание",$msgPriority); }
$status=$this->getProperty("status"); //0 - отключена, 1 - постановка на охрану, 2 - под охраной, 3 - внимание, 4 - ожидает снятия, 5 - тревога switch($status) { case 0: $this->setProperty("statusText","отключена"); break; case 1: $this->setProperty("statusText","постановка на охрану"); break; case 2: $this->setProperty("statusText","поставлена на охрану"); break; case 3: $this->setProperty("statusText","внимание"); break; case 4: $this->setProperty("statusText","ожидает снятия"); break; case 5: $this->setProperty("statusText","тревога!"); break; }
//Проверяем, что система еще не на охране, иначе запуск не имеет смысла $status=$this->getProperty("status"); if ($status==2) return; //Обнуляем счетчик событий $this->setProperty("eventCounter",0); $this->setProperty("status",2); $name=$this->getProperty("name"); $modeLink=$this->getProperty("modeLink"); if (($modeLink==1)&&(gg("SecurityArmedMode.active")==0)) callMethod("SecurityArmedMode.activate"); $msgPriority=$this->getProperty("msgPriority"); if ($msgPriority!=-1) { if (($name=='')||($name=='дом')||($name=='квартира')) { say("Объект под охраной",$msgPriority); } else { say("Контур $name под охраной",$msgPriority); } }
$status=$this->getProperty("status"); // Если статус уже равен 4 или 5, то это повторный запуск и он не нужен. // Если статус меньше 2, то сигнализация уже снята или еще не поставлена на охрану if (($status>=4)||($status<2)) return; $this->setProperty("status",4); $disarmTimeout=$this->getProperty("disarmTimeout"); if (($disarmTimeout=='')||($disarmTimeout==0)) { $this->callMethod("alarm"); } else { $name=$this->getProperty("name"); $msgPriority=$this->getProperty("msgPriority"); if ($msgPriority!=-1) { if (($name=='')||($name=='дом')||($name=='квартира')) { say("Отключите сигнализацию",$msgPriority); } else { say("Отключите охрану контура $name",$msgPriority); } } $ot=$this->object_title; setTimeOut($ot."_alarm","callMethod('".$ot.".alarm');",$disarmTimeout); }
$status=$this->getProperty("status"); if ($status!=0) return; $this->setProperty("status",1); /* if ($params['timeout']!='') { $timeout=$params['timeout']; } else { $timeout=$this->getProperty("armTimeout"); } */ $timeout=$this->getProperty("armTimeout"); // Если таймаут не указан - переводим мгновенно if (($timeout==0)||($timeout=='')) { $this->callMethod("armed"); } else { $ot=$this->object_title; // Переводим сигнализацию в режим охраны через время armTimeout setTimeOut($ot."_arm","callMethod('".$ot.".armed');",$timeout); $name=$this->getProperty("name"); $msgPriority=$this->getProperty("msgPriority"); if ($msgPriority!=-1) { if (($name=='')||($name=='дом')||($name=='квартира')) { say("Сигнализация переводится в режим охраны",$msgPriority); } else { say("Контур $name переводится в режим охраны",$msgPriority); } } }
Объекты класса:
callMethod("NobodyHomeMode.activate");
sg("smartLedHall.prog","securityWaitOff");
sg("smartLedHall.prog","securityWaitOn");
sg("smartLedHall.prog","securityOff"); setTimeOut("HallLEDRandom","sg('smartLedHall.prog','random');",30);
sg("smartLedHall.prog","alarm"); runScript('message',array('name'=>'Pavel','type'=>'sms','mes'=>'Тревога! Проникновение в дом!')); sleep(1); runScript('message',array('name'=>'Alina','type'=>'sms','mes'=>'Тревога! Проникновение в дом!')); //sleep(1); //runScript('message',array('name'=>'Anatol','type'=>'sms','mes'=>'Тревога! Проникновение в дом!'));
Свойства класса:
Методы класса:
$ot=$this->object_title; $comment=$this->getProperty("comment"); say("Значение ".$ot." (".$comment.") вернулось в норму",0);
$ot=$this->object_title; $comment=$this->getProperty("comment"); say("Значение ".$ot." (".$comment.") выше предельного",0);
$ot=$this->object_title; $comment=$this->getProperty("comment"); say("Значение ".$ot." (".$comment.") ниже предельного",0);
/* Значения свойства maxTresholdAlert и minTresholdAlert 0 - Значения в норме 1 - Значение выше нормы, требуется оповещение, но оно еще не отправлено 2 - Оповещение отправлено */ $value=$this->getProperty("value"); $maxTreshold=$this->getProperty("maxTreshold"); $maxTresholdAlert=$this->getProperty("maxTresholdAlert"); $minTreshold=$this->getProperty("minTreshold"); $minTresholdAlert=$this->getProperty("minTresholdAlert"); $ot=$this->object_title; if (($maxTresholdAlert==0)&&($minTresholdAlert==0)) { $this->callMethod('valueNormalAlert'); } if ($maxTresholdAlert==1) { $this->callMethod('maxTresholdAlert'); say("Значение ".$ot." больше порогового",0); $this->setProperty("maxTresholdAlert",2); } if ($minTresholdAlert==1) { $this->callMethod('minTresholdAlert'); say("Значение ".$ot." меньше порогового",0); $this->setProperty("minTresholdAlert",2); }
/* В метод onNewMinute поместить следующий код: $objects=getObjectsByClass("Sensors"); foreach($objects as $obj) { callMethod($obj['TITLE'].".Periodic"); } */ $value=$this->getProperty("value"); $val1m=$this->getProperty("val1m"); $val5m=$this->getProperty("val5m"); $val20m=$this->getProperty("val20m"); $value=$this->getProperty("value"); $alive=$this->getProperty("alive"); $aliveTimeout=$this->getProperty("aliveTimeout"); $maxTreshold=$this->getProperty("maxTreshold"); $maxTresholdAlert=$this->getProperty("maxTresholdAlert"); $minTreshold=$this->getProperty("minTreshold"); $minTresholdAlert=$this->getProperty("minTresholdAlert"); $tresholdCounter=$this->getProperty("tresholdCounter"); $tresholdTime=$this->getProperty("tresholdTime"); $updated=$this->getProperty("updated"); $h=(int)date('G',time()); $m=date('i',time()); $ot=$this->object_title; //Каждый час обновляем суточные минимумы и максимумы if ($m=="00") { $this->setProperty("dailyMin",getHistoryMin("$ot.val1m", strtotime("-24 hour"))); $this->setProperty("dailyMax",getHistoryMax("$ot.val1m", strtotime("-24 hour"))); } // Если датчик не активен - прерываем выполнение if ($alive==0) return; //Проверяем корректность значений if ($aliveTimeout=='') { $this->setProperty("aliveTimeout",5); $aliveTimeout=5; } // Переводим $aliveTimeout в секунды $aliveTimeout=$aliveTimeout*60; // Если данные не поступают больше чем $aliveTimeout то помечаем датчик как неработоспособный и прерываем выполнение if (((time()-$updated)>$aliveTimeout)&&($alive!=0)) { $alive=0; $this->setProperty("alive",$alive); return; } // Заполняем минутную историю if ($this->getProperty("val1m")!=$value) $this->setProperty("val1m",$value); // Заполняем пятиминутную историю и direction if (($m%5)==0) { $direction=$value-$val5m; $this->setProperty("direction",$direction); if ($this->getProperty("val5m")!=$value) $this->setProperty("val5m",$value); } // Заполняем 20 минутную историю if (($m%20)==0) { if ($this->getProperty("val20m")!=$value) $this->setProperty("val20m",$value); } //Если срабатывало оповещение, о превышении максимального порога, а сейчас значение в норме - обнуляем счетчик if (($maxTresholdAlert!=0)&&($value<$maxTreshold)) { $tresholdCounter=0; $this->setProperty("tresholdCounter",$tresholdCounter); $maxTresholdAlert=0; $this->setProperty("maxTresholdAlert",$maxTresholdAlert); //$this->callMethod('valueNormalAlert'); } if (($minTresholdAlert!=0)&&($value>$minTreshold)) { $tresholdCounter=0; $this->setProperty("tresholdCounter",$tresholdCounter); $minTresholdAlert=0; $this->setProperty("minTresholdAlert",$minTresholdAlert); //$this->callMethod('valueNormalAlert'); } // Если значение верхнего порога задано - проверяем... if ($maxTreshold!='') { // Если текущее значение больше порогового if ($value>$maxTreshold) { $tresholdCounter++; $this->setProperty("tresholdCounter",$tresholdCounter); // Если значение больше порогового больше допустимого времени, а оповещения еще не было if (($tresholdCounter>$tresholdTime)&&($maxTresholdAlert==0)) { // Оповещение о превышении порога $maxTresholdAlert=1; $this->setProperty("maxTresholdAlert",$maxTresholdAlert); } } } // Если значение нижнего порога задано - проверяем... if ($minTreshold!='') { // Если текущее значение меньше порогового if ($value<$minTreshold) { $tresholdCounter++; $this->setProperty("tresholdCounter",$tresholdCounter); // Если значение меньше порогового больше допустимого времени, а оповещения еще не было if (($tresholdCounter>$tresholdTime)&&($minTresholdAlert==0)) { // Оповещение о превышении порога $minTresholdAlert=1; $this->setProperty("minTresholdAlert",$minTresholdAlert); } } } // Если задано максимально допустимое изменение - проверяем. $maxLeap=$this->getProperty("maxLeap"); $alert=$this->getProperty("leapAlert"); if (($maxLeap!='')&&($m%5)==0) { // Разбиваем строку на аргументы $arg = explode(":", $maxLeap); $leap=$arg[0]; $time=$arg[1]; $dir=$arg[2]; $debug="leap: $leap time: $time dir: $dir"; $this->setProperty("debug",$debug); // Получаем массив изменений $arr=getHistory("$ot.val1m",strtotime("-$time minute")); // Считаем максимум, минимум $max=0; $min=0; foreach ($arr as $val) { if ($max<$val["VALUE"]) $max=$val["VALUE"]; if ($min>$val["VALUE"]) $min=$val["VALUE"]; } // Если текущее значение больше минимума на $leap if ((($value-$min)>$leap)&&($alert!="up")&&(($dir=='')||($dir=='u'))) { say("Резко выросло значение $ot $comment. Сейчас $value. Минимум за $time минут: $min",2); $this->callMethod("leapAlert"); $this->setProperty("leapAlert","up"); } // Если текущее значение меньше максимума на $leap if ((($max-$value)>$leap)&&($alert!="down")&&(($dir=='')||($dir=='d'))) { say("Резко упало значение $ot $comment. Сейчас $value. Максимум за $time минут: $max",2); $this->callMethod("leapAlert"); $this->setProperty("leapAlert","down"); } if (($alert=="up")&&(($max-$value)<$leap)) $this->setProperty("leapAlert",0); if (($alert=="down")&&(($value-$min)<$leap)) $this->setProperty("leapAlert",0); } elseif (($maxLeap=='')&&($alert!='')) $this->setProperty("leapAlert",'');
/* Значения 0 - датчик не работает 1 - датчик работает, нужно оповестить 2 - датчик работает */ $ot=$this->object_title; $alive=$this->getProperty("alive"); $comment=$this->getProperty("comment"); if ($alive==0) say("Датчик ".$ot." ".$comment." не работает",0); if ($alive==1) { say("Датчик ".$ot." ".$comment." работает нормально",0); $this->setProperty("alive",2); }
/* Данный класс разработан для сбора показаний с различных датчиков, за основу взяты готовые классы TempSensors и HumSensors, однако они были сильно переработаны. В данном классе назначение датчика лучше обозначать в его имени, т.к. свойства не содержат температуру, влажность и.т.п. в явном виде, есть поля input и value, которые содержат именно значения датчика. Привязка внешних датчиков осуществляется в свойство input, его можно фильтровать, округлять и правильное значение сразу же записывается в свойство value. Свойства val1m, val5m, val20m содержат историю с заданной дискретностью Важным моментом является то, что отслеживание работы датчика и заполнение свойств происходит каждую минуту, для чего в метод onNewMinute необходимо поместить следующий код: $objects=getObjectsByClass("Sensors"); foreach($objects as $obj) { callMethod($obj['TITLE'].".Periodic"); } Он каждую минуту вызывает метод Periodic в каждом объекте методы maxTresholdAlert minTresholdAlert valueNormalAlert не содержат кода и срабатывают при выходе за пороговые значения на период tresholdTime и возврат к норме. Подразумевается изменение этих методов для каждого конкретного датчика. */
$input=$this->getProperty("input"); $linkprop=$this->getProperty("linkprop"); $value=$this->getProperty("value"); $alive=$this->getProperty("alive"); $round=$this->getProperty("round"); if ($round=='') { $round=1; $this->setProperty("round",$round); } $correction=$this->getProperty("correction"); if ($correction=='') { $correction=0; $this->setProperty("correction",$correction); } $correctionM=$this->getProperty("correctionM"); if ($correctionM=='') { $correctionM=1; $this->setProperty("correctionM",$correctionM); } $deviationTreshold=$this->getProperty("deviationTreshold"); if ($deviationTreshold=='') { $deviationTreshold=0; $this->setProperty("deviationTreshold",0); } $this->setProperty("updated",time()); $this->setProperty("updatedTime",date('H:i')); if (($alive==0)) $this->setProperty("alive",1); if (($alive=='')) $this->setProperty("alive",2); $ot=$this->object_title; /* $alive_timeout=(int)$this->getProperty("aliveTimeout"); if ($alive_timeout) { $alive_timeout=$alive_timeout*60; } else { $this->setProperty("aliveTimeout",5); $alive_timeout=5*60; } clearTimeOut($ot."_alive"); setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); */ // Проверяем корректность показаний датчика, если допустимое отклонение задано. if ($deviationTreshold>0) { if (abs($value-$input)>$deviationTreshold) return; } // Вносим коррекцию в значение $value=$input*$correctionM+$correction; // Округляем значение $value=round($value, $round); $this->setProperty("value",$value); if ($linkprop!='') sg($linkprop,$value);
Объекты класса:
//Отправка значений в гараж $val=$this->getProperty("value"); $url = "http://192.168.60.100/objects/?object=TempOutside&op=set&p=input&v=".$val; $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "user:kukuruza"); $result = curl_exec($ch); curl_close($ch);
say("Температура полотенцесушителя возвращается в норму",2);
$temp=$this->getProperty("value"); say("Температура полотенцесушителя опустилась ниже 30 градусов: ".$temp,2);
Свойства класса:
Методы класса:
//$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); }
Объекты класса:
Свойства класса:
Методы класса:
if ($params['status']) { $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 (timeBetween('05:00', '12:00') && ((time()-$last_register)>2*60*60)) { runScript('Greeting'); // запускаем скрипт "доброе утро" } }
Объекты класса:
Свойства класса:
Методы класса:
$voltage=$this->getProperty("Voltage"); $const=$this->getProperty("Constant"); $k=$this->getProperty("Coefficient"); $current=$this->getProperty("Current"); if ($voltage="") $voltage=220; if ($const="") $const=0; if ($k="") $k=1; $power=($current*$voltage+$const)*$k; $this->setProperty("Power",$power);
Свойства класса:
Методы класса:
//$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); }
Объекты класса:
Методы класса:
Объекты класса:
echo "status received: ".$params['status'];
global $voicemode; $voicemode='off'; processCommand($params['message']);
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
$count=$this->getProperty("counter"); $state=$this->getProperty("state"); $linkProperty=$this->getProperty("linkProperty"); $linkMethod=$this->getProperty("linkMethod"); // После перезапуска контроллера тут может быть 0, это не событие. if ($count==0) return; if ($linkProperty!='') sg("$linkProperty",$count); if ($linkMethod!='') { $methods=explode(" ", $linkMethod); $i=0; while ($methods[$i]!='') { callMethod("$methods[$i]"); $i++; } } //if ($linkMethod!='') callMethod("$linkMethod");
$state=$this->getProperty("state"); if ($state=="OPEN") $stateBool=0; if ($state=="CLOSE") $stateBool=1; $this->setProperty("stateBool",$stateBool);
Объекты класса:
Свойства класса:
Методы класса:
Объекты класса:
$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'); } /* begin injection of {SDevices} */ require(DIR_MODULES.'devices/system_checkstate.php'); /* end injection of {SDevices} */
$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'); }
Свойства класса:
Методы класса:
// для правильной работы логики необходимо, чтобы ежеминутно выполнялся следующий код /* $objects=getObjectsByClass("Thermostats"); foreach($objects as $obj) { callMethod($obj['TITLE'].".Periodic"); } */ // Получаем показания температуры с датчиков $temps = explode(" ", $this->getProperty("tempSensors")); // Вычисляем среднюю температуру $summTemp=0; $n=0; while ($n<count($temps)) { $summTemp=$summTemp+gg($temps[$n]); $n++; } $temp=$summTemp/count($temps); $this->setProperty("temp",$temp); if (count($temps)==0) $this->setProperty("temp",''); $period=$this->getProperty("period"); if ($period=='') { $this->setProperty("period",5); $period=5; } if ($period>30) { $this->setProperty("period",30); $period=30; } if ($period<1) { $this->setProperty("period",1); $period=1; } $m=date('i',time()); // Проверяем периодичность работы if ($period!=0) { if ($m%$period!=0) return; } $this->callMethod("MainLogic");
// для правильной работы логики необходимо, чтобы ежеминутно выполнялся следующий код /* $objects=getObjectsByClass("Thermostats"); foreach($objects as $obj) { callMethod($obj['TITLE'].".Periodic"); } */ $ot=$this->object_title; $period=$this->getProperty("period"); $cooler=$this->getProperty("cooler"); $coolerLink=$this->getProperty("coolerLink"); if ($coolerLink!='') $cooler=gg($coolerLink); $heater=$this->getProperty("heater"); $heaterLink=$this->getProperty("heaterLink"); if ($heaterLink!='') $heater=gg($heaterLink); $power=$this->getProperty("power"); if ($power=='') $power=100; //Проверяем режим работы $state=$this->getProperty("state"); if ($state=='') $this->setProperty("state",0); // 0 -нагрузка выключена if (($state==0)||($power==0)) { if ($cooler!=0) { $this->setProperty("cooler",0); if ($coolerLink!='') sg($coolerLink,0); $this->callMethod("CoolOff"); } if ($heater!=0) { $this->setProperty("heater",0); if ($heaterLink!='') sg($heaterLink,0); $this->callMethod("HeatOff"); } return; } if (($state==1)&&($power>0)) { //if ($cooler!=1) { $this->setProperty("cooler",1); if ($coolerLink!='') { sg($coolerLink,1); $coolerLink="'".$coolerLink."'"; if ($power<100) setTimeOut($ot."_".$coolerLink."_OFF","sg($coolerLink,0);",round(($period*60*$power/100),0)); } $this->callMethod("CoolOn"); //} //if ($heater!=1) { $this->setProperty("heater",1); if ($heaterLink!='') { sg($heaterLink,1); $heaterLink="'".$heaterLink."'"; if ($power<100) setTimeOut($ot."_".$heaterLink."_OFF","sg($heaterLink,0);",round(($period*60*$power/100),0)); } $this->callMethod("HeatOn"); //} return; } $targetTemp=$this->getProperty("targetTemp"); $mode=$this->getProperty("mode"); if ($mode=='') { $this->setProperty("mode",1); $mode=1; } // Если термостат выключен - прерываем выполнение программы if ($mode==0) return; $temp=$this->getProperty("temp"); $hysteresis=$this->getProperty("hysteresis"); if ($hysteresis=='') { $this->setProperty("hysteresis",2); $hysteresis=2; } $hysteresis2=$hysteresis/2; // проверяем условия для подогрева if (($mode==1)||($mode==3)) { if ($temp<$targetTemp-$hysteresis) $power=100; // Если текущая температура меньше целевой на целый гистерезис - включаем подогрев на полную. if ($temp<$targetTemp-$hysteresis2) { //if ($heater!=1) { // Включаем подогрев $this->setProperty("heater",1); if ($heaterLink!='') { sg($heaterLink,1); $heaterLink="'".$heaterLink."'"; if ($power<100) setTimeOut($ot."_".$heaterLink."_OFF","sg($heaterLink,0);",round(($period*60*$power/100),0)); } $this->callMethod("HeatOn"); //} } if ($temp>$targetTemp) { if ($heater!=0) { // Выключаем подогрев $this->setProperty("heater",0); if ($heaterLink!='') sg($heaterLink,0); $this->callMethod("HeatOff"); } } } // проверяем условия для охлаждения if (($mode==2)||($mode==3)) { if ($temp<$targetTemp+$hysteresis) $power=100; // Если текущая температура больше целевой на целый гистерезис - включаем охлаждение на полную. if ($temp>$targetTemp+$hysteresis2) { //if ($cooler!=1) { // Включаем охлаждение $this->setProperty("cooler",1); if ($coolerLink!='') { sg($coolerLink,1); $coolerLink="'".$coolerLink."'"; if ($power<100) setTimeOut($ot."_".$coolerLink."_OFF","sg($coolerLink,0);",round(($period*60*$power/100),0)); } $this->callMethod("CoolOn"); //} } if ($temp<$targetTemp) { if ($cooler!=0) { //Выключаем охлаждение $this->setProperty("cooler",0); if ($coolerLink!='') sg($coolerLink,0); $this->callMethod("CoolOff"); } } } $tempControl=$this->getProperty("tempControl"); if ($tempControl=='') $this->setProperty("tempControl",0);
Объекты класса:
Свойства класса:
Методы класса:
/* START yaWeather module*/ $updateTime = gg('yw_setting.updateTime'); if($updateTime > 0){ $count = gg('yw_setting.countTime'); if($count >= $updateTime){ include_once(DIR_MODULES.'app_yaweather/app_yaweather.class.php'); $app_yaweather=new app_yaweather(); $app_yaweather->get_weather(gg('yw_setting.city_id')); sg('yw_setting.countTime',1); } else { $count++; sg('yw_setting.countTime',$count); } }/* END yaWeather*///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//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//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//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//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//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//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//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//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//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//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//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
Объекты класса:
$h=(int)date('G',time()); $m=date('i',time()); if (isWeekDay()) { } if (($h>=8) && getGlobal('clockChimeEnabled')) { if ($m=="00") { say(timeNow(),1); } } setGlobal('timeNow',date('H:i')); $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 (timeIs(getGlobal('SunRiseTime'))) { say('Всходит солнце',1); setGlobal("isDark",0); callMethod('DarknessMode.deactivate'); } if (timeIs(getGlobal('SunSetTime'))) { say('Солнце заходит',1); setGlobal("isDark",1); callMethod('DarknessMode.activate'); } if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) { say("Похоже никого нет сегодня, можно сэкономить немного."); callMethod('EconomMode.activate'); } if (timeIs(gg("TimeNightModeON"))) { callMethod('NightMode.activate'); } if (timeIs(gg("TimeNightModeOFF"))) { callMethod('NightMode.deactivate'); } if (timeIs("03:00")) { runScript("systemMaintenance"); safe_exec("sudo service ntp restart"); // Перезапускаем сервис ntp sg("smsCount",0); //Обнуляем счетчик смс } if (timeIs("02:30")) { if (gg("Kitchen.SomebodyHere")==0) sg("UV1.state",1); } if (timeIs("06:00")) { if (gg("Kitchen.SomebodyHere")==0) sg("UV1.state",1); // Обнуляем время первого движения sg("WakeUpTime",0); sg("SleepTime",gg("LastMovementTime")); } if (timeIs("07:00")) { if (gg("Kitchen.SomebodyHere")==0) sg("UV1.state",1); sg("tempNight",getHistoryMin("TempOut.val1m", strtotime("-8 hour"))); } if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) { runScript('MorningAlarm'); } //Запуск основного скрипта логики runScript("Core"); require(ROOT.'scripts/newMinute.php');
Методы класса:
Объекты класса:
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']); } }
Свойства класса:
Методы класса:
//$params["LOCATION_OBJECT"], $params["LOCATION"]
//$params["LOCATION_OBJECT"], $params["LOCATION"]
//$params["LOCATION_OBJECT"], $params["LOCATION"]
//$params["LOCATION_OBJECT"], $params["LOCATION"]
Объекты класса:
Свойства класса:
Объекты класса:
Свойства класса:
Методы класса:
$prog=$this->getProperty("prog"); if ($prog=="random") $prog=rand(100, 106); switch ($prog) { case "off": // выключено $this->setProperty("color","0"); $this->setProperty("mode",0); $this->setProperty("brightness",5); $this->setProperty("speed",2750); $this->callMethod("update"); break; case "night": // Красный приглушенный свет (ночной режим) $this->setProperty("color","ff0000"); //Red $this->setProperty("mode",0); $this->setProperty("brightness",30); $this->setProperty("speed",200); $this->callMethod("update"); break; case "securityWaitOn": // Ждем включения сигнализации $this->setProperty("color","ffcc33"); $this->setProperty("mode",14); $this->setProperty("brightness",255); $this->setProperty("speed",2000); $this->callMethod("update"); break; case "nobody": // Никого нет дома $this->setProperty("color","0"); $this->setProperty("mode",0); $this->setProperty("brightness",50); $this->setProperty("speed",2750); $this->callMethod("update"); break; case "securityWaitOff": // Ждем отключения сигнализации $this->setProperty("color","ff0000"); $this->setProperty("mode",14); $this->setProperty("brightness",255); $this->setProperty("speed",2750); $this->callMethod("update"); break; case "securityOff": // сигнализация отключена $this->setProperty("color","00ff0e"); $this->setProperty("mode",25); $this->setProperty("brightness",255); $this->setProperty("speed",250); $this->callMethod("update"); break; case "alarm": // тревога $this->setProperty("color","ff0000"); $this->setProperty("mode",26); $this->setProperty("brightness",255); $this->setProperty("speed",160); $this->callMethod("update"); break; case "nightMove": // ночь, движение в комнате $this->setProperty("color","ff5f00"); $this->setProperty("mode",0); $this->setProperty("brightness",70); $this->setProperty("speed",4000); $this->callMethod("update"); break; case "romantic": // ночь, движение в комнате $this->setProperty("color","ff00b3"); $this->setProperty("mode",3); $this->setProperty("brightness",50); $this->setProperty("speed",4000); $this->callMethod("update"); break; case 100: // ChaseRandom $this->setProperty("color","f88c28"); $this->setProperty("mode",32); $this->setProperty("brightness",255); $this->setProperty("speed",2500); $this->callMethod("update"); break; case 101: // Fireworks $this->setProperty("color","f88c28"); $this->setProperty("mode",45); $this->setProperty("brightness",255); $this->setProperty("speed",3500); $this->callMethod("update"); break; case 102: // FireworksRandom $this->setProperty("mode",46); $this->setProperty("brightness",255); $this->setProperty("speed",3500); $this->callMethod("update"); break; case 103: // Rainbow $this->setProperty("mode",11); $this->setProperty("brightness",255); $this->setProperty("speed",2500); $this->callMethod("update"); break; case 104: // RainbowCycle $this->setProperty("mode",12); $this->setProperty("brightness",255); $this->setProperty("speed",2500); $this->callMethod("update"); break; case 105: // Breath $this->setProperty("color","6699ff"); $this->setProperty("mode",2); $this->setProperty("brightness",255); $this->setProperty("speed",3000); $this->callMethod("update"); break; case 106: // ColorWipeRandom $this->setProperty("mode",7); $this->setProperty("brightness",255); $this->setProperty("speed",4000); $this->callMethod("update"); break; }
/* // Установка параметров режима $obj="smartLedHall"; sg("$obj.color","ff0000"); //Red sg("$obj.mode",0); sg("$obj.brightness",150); sg("$obj.speed",200); callMethod("$obj.update"); // Список режимов 0=Static 1=Blink 2=Breath 3=Color Wipe 4=Color Wipe Inverse 5=Color Wipe Reverse 6=Color Wipe Reverse Inverse 7=Color Wipe Random 8=Random Color 9=Single Dynamic 10=Multi Dynamic 11=Rainbow 12=Rainbow Cycle 13=Scan 14=Dual Scan 15=Fade 16=Theater Chase 17=Theater Chase Rainbow 18=Running Lights 19=Twinkle 20=Twinkle Random 21=Twinkle Fade 22=Twinkle Fade Random 23=Sparkle 24=Flash Sparkle 25=Hyper Sparkle 26=Strobe 27=Strobe Rainbow 28=Multi Strobe 29=Blink Rainbow 30=Chase White 31=Chase Color 32=Chase Random 33=Chase Rainbow 34=Chase Flash 35=Chase Flash Random 36=Chase Rainbow White 37=Chase Blackout 38=Chase Blackout Rainbow 39=Color Sweep Random 40=Running Color 41=Running Red Blue 42=Running Random 43=Larson Scanner 44=Comet 45=Fireworks 46=Fireworks Random 47=Merry Christmas 48=Fire Flicker 49=Fire Flicker (soft) 50=Fire Flicker (intense) 51=Circus Combustus 52=Halloween 53=Bicolor Chase 54=Tricolor Chase 55=ICU */
$ip=$this->getProperty("ip"); if ($ip=="") return; $b=$this->getProperty("brightness"); $m=$this->getProperty("mode"); $s=$this->getProperty("speed"); $c=$this->getProperty("color"); $c = ltrim($c, "#"); $param="b=".$b."&"."m=".$m."&"."s=".$s."&"."c=".$c; $ch = curl_init(); // установка URL и других необходимых параметров curl_setopt($ch, CURLOPT_URL, "http://".$ip."/set?".$param); curl_setopt($ch, CURLOPT_HEADER, false); // загрузка страницы и выдача её браузеру curl_exec($ch); // завершение сеанса и освобождение ресурсов curl_close($ch);
$this->setProperty("prog","off");
Объекты класса:
Свойства класса:
Свойства класса:
Методы класса:
$this->setProperty("log","double click");
$this->setProperty("log","long click");
$this->setProperty("log","click");
Объекты класса:
callMethod("mainSecure.arm");
if (gg("SecurityArmedMode.active")) { // Отключаем режим охраны clearTimeOut("NobodyHomeMode"); callMethod("SecurityArmedMode.deactivate"); callMethod("mainSecure.disarm"); } else { sg("Hall.Light1",1); setTimeOut("HallLight1","sg('Hall.Light1',0);",2*60); } callMethod("mainSecure.disarm");
$state=gg("Sonoff1.state"); if ($state==0) { sg("Sonoff1.state",1); setTimeOut("HallMirror",'sg("Sonoff1.state",0);',200); } else { sg("Sonoff1.state",0); clearTimeOut("HallMirror"); }
Свойства класса:
Методы класса:
Объекты класса:
$light=0; $lightgroups = array('Light1', 'Light2', 'Light3', 'Light4', 'Light5'); foreach ($lightgroups as $group) { if (gg("Livingroom.".$group)) $light++; } if ($light==0) { sg("Livingroom.Light2",1); } else { callMethod("Livingroom.LightOff"); }
$light=gg("Livingroom.Light0"); if ($light>0) sg("Livingroom.Light0",0); if ($light==0) sg("Livingroom.Light0",10);
$light=gg("Livingroom.Light0"); $rotate=$this->getProperty("rotate"); $light=$light+$rotate*2; if ($light>100) $light=100; if ($light<0) $light=0; sg("Livingroom.Light0",$light);
Объекты класса:
, Россия
На форуме: Fav0rit
© 2024 - Site Built By SergeJey | Реквизиты: Курицын С. С. ИНН 762001394609 | Контакты | Публичный договор
SmartLiving