Свойства класса:
Свойства класса:
Методы класса:
$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac, 0, $ctx);
if(isset($response) && $response!='') {
$json = json_decode($response);
$this->setProperty('temperature', (float)$json->{'temperature'});
$this->setProperty('humidity', (float)$json->{'humidity'});
$this->setProperty('noise', (int)$json->{'noisy'});
$this->setProperty('luminosity', (int)$json->{'light'});
$this->setProperty('air', (int)$json->{'air'});
}//$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);
$old_temp=$params['OLD_VALUE'];
$t=$params['NEW_VALUE'];
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('temperatureDirection',$d);
$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
setGlobal($linked_room.'.Temperature',$t);
}$old_hum=$params['OLD_VALUE'];
$h=$params['NEW_VALUE'];
if ($params['uptime']) {
$this->setProperty('uptime',$params['uptime']);
}
if ($h>$old_hum) {
$d=1;
} elseif ($h<$old_hum) {
$d=-1;
} else {
$d=0;
}
$this->setProperty('humidityDirection',$d);
$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
setGlobal($linked_room.'.Humidity',$h);
}Объекты класса:
Свойства класса:
Методы класса:
$status = $this->getProperty("status");
if ($status) {
$this->callMethod('turnOn');
} else {
$this->callMethod('turnOff');
}$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);$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$buttonId = $this->getProperty('buttonId');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&buttonId='.$buttonId, 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$buttonId = $this->getProperty('buttonId');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=off&buttonId='.$buttonId, 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$buttonId = $this->getProperty('buttonId');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=on&buttonId='.$buttonId, 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}Объекты класса:
Свойства класса:
Методы класса:
$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac, 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('temperature', (float)$response);
}
$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);
$old_temp = $params['OLD_VALUE'];
$t = $params['NEW_VALUE'];
if ($t>$old_temp) {
$d = 1;
} elseif ($t<$old_temp) {
$d = -1;
} else {
$d = 0;
}
$this->setProperty('direction', $d);if(!isset($params['name'])) {return;}
$name = $params['name'];
$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=send&name='.$name, 0, $ctx);Объекты класса:
Свойства класса:
Методы класса:
$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$sensorsStr = $this->getProperty('connectedSensors');
$sensors = explode(",", $sensorsStr);
if(!$sensors || count($sensors) == 0) {return;}
$ctx = stream_context_create(array(
'http' => array('timeout'=>1)
)
);
//sensors status
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac, 0, $ctx);
if(isset($response) && $response!='') {
$json = json_decode($response);
$sensorsStatus = $json->{'sensorsList'};
for($i=0; $i<count($sensorsStatus); $i++) {
for($j=0; $j<count($sensors); $j++) {
if(gg($sensors[$j].'.index') == $sensorsStatus[$i]->{'index'}){
sg($sensors[$j].'.status', (int)$sensorsStatus[$i]->{'status'});
}
}
}
}$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); $bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$sensorsStr = $this->getProperty('connectedSensors');
$sensors = explode(",", $sensorsStr);
if(!$sensors || count($sensors) == 0) {return;}
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
//sensors alarm
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=alarm', 0, $ctx);
if(isset($response) && $response!='') {
$json = json_decode($response);
$sensorsStatus = $json->{'sensorsAlarm'};
$s1Alarm = 0;
for($i=0; $i<count($sensorsStatus); $i++) {
for($j=0; $j<count($sensors); $j++) {
if(gg($sensors[$j].'.index') == $sensorsStatus[$i]->{'index'}){
sg($sensors[$j].'.alarm', (int)$sensorsStatus[$i]->{'alarm'});
if($sensorsStatus[$i]->{'alarm'} == 1) {
$s1Alarm = 1;
}
}
}
}
$this->setProperty('alarm', (int)$s1Alarm);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>3)
)
);
//S1 defence
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=defence', 0, $ctx);
if(isset($response) && $response!='') {
$json = json_decode($response);
$this->setProperty('defence', (int)$json->{'systemDefence'});
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=setdefence&defenceId=0', 0, $ctx);
if(isset($response) && $response!='' && (int)$response == 1) {
$this->setProperty('defence', 0);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=setdefence&defenceId=2', 0, $ctx);
if(isset($response) && $response!='' && (int)$response == 1) {
$this->setProperty('defence', 2);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=cancelalarm', 0, $ctx);
if(isset($response) && $response!='' && (int)$response == 1) {
$this->setProperty('alarm', 0);
}Объекты класса:
Свойства класса:
Методы класса:
$status=$this->getProperty("status");
if ($status) {
$this->callMethod('turnOn');
} else {
$this->callMethod('turnOff');
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=off', 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac.'&action=on', 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}$bridge = $this->getProperty('HTTPBridge');
if(!isset($bridge)) {return;}
$ip = gg($bridge.'.IP');
$port = gg($bridge.'.Port');
$mac = $this->getProperty('deviceMAC');
$ctx = stream_context_create(array(
'http' => array('timeout'=>2)
)
);
$response = file_get_contents('http://'.$ip.':'.$port.'/?devMAC='.$mac, 0, $ctx);
if(isset($response) && $response!='') {
$this->setProperty('status', (int)$response);
}$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);Объекты класса:
Свойства класса:
Методы класса:
$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($params['NEW_VALUE']==1) {
if(gg('RGB_Corridor.status')==0) {
callMethod('RGB_Corridor.turnOn');
}
clearTimeout("RGB_Corridor_off_timer");
setTimeOut("RGB_Corridor_off_timer", "callMethod('RGB_Corridor.turnOff');", 60);
}if($params['NEW_VALUE']==1) {
if(gg('RGB_Corridor.status')==0) {
callMethod('RGB_Corridor.turnOn');
}
clearTimeout("RGB_Corridor_off_timer");
setTimeOut("RGB_Corridor_off_timer", "callMethod('RGB_Corridor.turnOff');", 60);
}Свойства класса:
Методы класса:
$volume=round(65535*$params['VALUE']/100);
$this->setProperty('volumeLevel',$params['VALUE']);
safe_exec('..\\apps\\nircmd\\nircmdc setsysvolume '.$volume);
say("Изменилась громкость до ".$params['VALUE']." процентов");Объекты класса:
$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);
}say("Отключено питание");Свойства класса:
Методы класса:
//$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'); // запускаем скрипт "доброе утро"
}
}Объекты класса:
Свойства класса:
Методы класса:
$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("RGB_Corridor.setColor", array("color"=>"3D1200"));setGlobal('minMsgLevel','1');
callMethod("RGB_Corridor.setColor", array("color"=>"FF7077"));Свойства класса:
Методы класса:
$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);Свойства класса:
Методы класса:
$cmdline='"c:\Program Files\nooLite\nooLite.exe" -api '.$params['command'];
$last_called=gg('NoolightCommandSend');
$min_delay=3;
$now=time();
if (($now-$last_called)>$min_delay) {
//safe_exec($cmdline);
$last_callled=$now;
sg('NoolightCommandSend',$last_called);
DebMes("Noolite instant exec: ".$cmdline);
system($cmdline);
//exec($cmdline);
} else {
if ($last_callled<$now) {
$last_callled=$now;
}
$last_called+=$min_delay;
sg('NoolightCommandSend',$last_called);
DebMes("Noolite scheduled job for ".date('H:i:s',$last_called));
AddScheduledJob("noolight".md5($cmdline),"safe_exec('".$cmdline."');",$last_called);
}
$this->setProperty("status",0);
//safe_exec('"c:\Program Files\nooLite\noolite.exe" -api -off_ch'.$this->getProperty("channel"));
$this->callMethod("sendCommand",array('command'=>'-off_ch'.$this->getProperty("channel")));$this->setProperty("status",1);
$this->callMethod("sendCommand",array('command'=>'-on_ch'.$this->getProperty("channel")));Свойства класса:
Методы класса:
$code1=$this->getProperty('Code1');
$code2=$this->getProperty('Code2');
safe_exec("c:\_majordomo\apps\arduino_gw\arduino_gw.exe 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);Свойства класса:
Методы класса:
$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','watchfolders'=>'watch folders','rss'=>'RSS');
foreach($cycles as $k=>$v) {
$tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
if (time()-$tm>10*60) {
$yellow_state=1;
$details[]=$v." ".LANG_GENERAL_CYCLE." ".LANG_GENERAL_STOPPED.".";
}
}
if ($red_state) {
$state='red';
$state_title=LANG_GENERAL_RED;
} elseif ($yellow_state) {
$state='yellow';
$state_title=LANG_GENERAL_YELLOW;
} else {
$state='green';
$state_title=LANG_GENERAL_GREEN;
}
$new_details=implode(". ",$details);
if ($this->getProperty("stateDetails")!=$new_details) {
$this->setProperty('stateDetails',$new_details);
}
if ($this->getProperty('stateColor')!=$state) {
$this->setProperty('stateColor',$state);
$this->setProperty('stateTitle',$state_title);
if ($state!='green') {
say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title.".");
say(implode(". ",$details));
} else {
say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title);
}
$this->callMethod('stateChanged');
}$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');
}Свойства класса:
Методы класса:
//$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 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*/Объекты класса:
$h=(int)date('G',time());
$m=date('i',time());
if (isWeekDay()) {
}
if (($h>=8) && getGlobal('clockChimeEnabled')) {
if ($m=="00") {
say(timeNow(),1);
}
}
//
sg('ThisComputer.SunSetTime', gg('yw_day0.sunset'));
sg('ThisComputer.SunRiseTime', gg('yw_day0.sunrise'));
//ежеминутные методы
callMethod('RM2_Living.requestTemperature');
//таймеры для методов меньше 1 мин
runScript('Broadlink Devices Update 1s');
runScript('Broadlink Devices Update 1s_2');
runScript('Broadlink Devices Update 5s');
runScript('Broadlink Devices Update');
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 (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('20:30')) {
callMethod('NightMode.activate');
} elseif (timeIs('08:00')) {
callMethod('NightMode.deactivate');
}
if (timeIs("03:00")) {
runScript("systemMaintenance");
}
if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) {
runScript('MorningAlarm');
}Свойства класса:
Методы класса:
if(!isset($params['command'])) {return;}
$sendStr = $params['command'];
$hostIP = $this->getProperty('IP');
if(!isset($hostIP)) {return;}
//добавляем к данным хэш-сумму
$sendStrArray = str_split($sendStr, 2);
$sum = 0;
for ($i = 0; $i <count($sendStrArray); $i++) {
$sum += hexdec($sendStrArray[$i]);
}
$sendStr .= substr(dechex($sum), -2, 2);
//открываем сокет
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp"));
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>1, "usec"=>0));
if (socket_connect($socket, $hostIP, 5577)) {
//отсылаем данные
socket_write ($socket, hex2bin($sendStr));
}
//закрываем сокет
socket_close($socket);
$this->callMethod("requestStatus");
$this->callMethod("sendCommand", array("command"=>"71230F"));$this->callMethod("sendCommand", array("command"=>"71240F"));$hostIP = $this->getProperty('IP');
if(!isset($hostIP)) {return;}
$sendStr = "818A8B";
//добавляем к данным хэш-сумму
$sendStrArray = str_split($sendStr, 2);
$sum = 0;
for ($i = 0; $i <count($sendStrArray); $i++) {
$sum += hexdec($sendStrArray[$i]);
}
$sendStr .= substr(dechex($sum), -2, 2);
//открываем сокет
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp"));
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>0, "usec"=>500000));
if(socket_connect($socket, $hostIP, 5577)) {
//отсылаем данные
socket_write ($socket, hex2bin($sendStr));
//принимаем данные
$receiveStr = "";
while($buffer = @socket_read($socket, 1, PHP_BINARY_READ)){
$receiveStr .= $buffer;
}
$receiveStrHex = bin2hex($receiveStr);
if(isset($receiveStrHex) && strlen($receiveStrHex)>27) {
if(substr($receiveStrHex, 4, 2) == 23) {
$this->setProperty('status', 1);
} else if(substr($receiveStrHex, 4, 2) == 24) {
$this->setProperty('status', 0);
}
$this->setProperty('color', substr($receiveStrHex, 12, 6));
}
}
//закрываем сокет
socket_close($socket);$status=$this->getProperty("status");
if ($status) {
$this->callMethod('turnOn');
} else {
$this->callMethod('turnOff');
}$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['color'])) {return;}
$color = $params['color'];
$this->callMethod("sendCommand", array("command"=>"31".$color."FF000F"));Объекты класса:
Свойства класса:
Методы класса:
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));
$this->setProperty("alive",1);
$status = $this->getProperty("status");
$alive = $this->getProperty("alive");
$charge = $this->getProperty("batCharge");
if (!$alive || $alive == 0) {
$this->setProperty("stateColor","na");
} elseif ($status == "OL") {
$this->setProperty("stateColor","green");
} elseif ($charge < 15) {
$this->setProperty("stateColor","red");
} else {
$this->setProperty("stateColor","yellow");
}
$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);sg('".$ot.".stateColor','na');",$alive_timeout);Объекты класса:
Методы класса:
Объекты класса:
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']);
}
}Свойства класса:
Объекты класса:
Объекты класса:
, Россия
© 2026 SJLab | Реквизиты: Курицын С. С. ИНН 762001394609 | Контакты | Публичный договор
SmartLiving