Class properties:
Class methods:
Class objects:
$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('Задача принята');
return;
}
global $voicemode;
$voicemode='on';
say('Сейчас '.timeNow());
} 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('Задача принята');
return;
}
global $voicemode;
$voicemode='on';
say($m[1]);
} else {
say('Неизвестная команда...');
}say("Отключено питание");Class properties:
Class methods:
$this->setProperty("ProtectionMode",0);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
//echo($ob->getProperty("Name"));
//echo("<br>");
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("ProtectionMode",0);
$ob->setProperty("Alarm_Movement",0);
}
}$this->setProperty("ProtectionMode",1);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("ProtectionMode",1);
}
}$PrtMd=$this->getProperty("ProtectionMode");
echo($this->getProperty("Name"));
if ($PrtMd==1) { // если объект находился под охраной
$this->callmethod("ProtectionModeOFF"); // то снимаем с охраны
echo("OFF");
}
else { // если объект НЕ находился под охраной
$this->callmethod("ProtectionModeON"); // то ставим под охрану
echo("ON");
}$PrtMd=$this->getProperty("NoBodyHome");
echo("<BR>");
if ($PrtMd==1) { // если объект находился под охраной
$this->callmethod("NoBodyHomeOFF"); // то снимаем с охраны
echo("OFF");
}
else { // если объект НЕ находился под охраной
$this->callmethod("NoBodyHomeON"); // то ставим под охрану
echo("ON");
}$this->setProperty("NoBodyHome",1);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("NoBodyHome",1);
}
}$this->setProperty("NoBodyHome",0);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("NoBodyHome",0);
}
}$this->setProperty("EconomMode",1);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("EconomMode",1);
$ob->callMethod("CheckState");
}
}$this->setProperty("EconomMode",0);
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
$ob->setProperty("EconomMode",0);
$ob->callMethod("CheckState");
}
}$EconomMd=$this->getProperty("EconomMode");
echo("<BR> Mode :".$EconomMd."<BR>");
echo("<BR>".$this->getProperty("Name")."<BR>");
if ($EconomMd==1) { // если объект находился в эконом режиме
$this->callmethod("EconomModeOFF"); // то выключаем
echo("OFF");
}
else { // если объект НЕ находился в эконом режиме
$this->callmethod("EconomModeON"); // то включаем
echo("ON");
}
$EconomMd=$this->getProperty("EconomMode");
//---------------- Устанавливаем такое же значение для всех дочерних объектов
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
if ($EconomMd==1) { // если родитель находился в эконом режиме
$ob->callmethod("EconomModeON"); // то включаем и дочерний
echo("OFF");
}
else { // если объект НЕ находился в эконом режиме
$ob->callmethod("EconomModeOFF"); // то выключаем дочерний
echo("ON");
}
}
} $T=$this->getProperty("Temperature");
$ST=$this->getProperty("SetTemperature");
if (($T=="") | ($ST=="")) {
continue;
}
echo("<BR>".$this['TITLE']." t= ".$T.", Required : ".$ST." .");
if ( ($T+2) < $ST) { // Если температура ниже заданной более чем на два градуса - ищем комнатный обогреватель и включаем его
echo(" Room ".$this->object_title." must be heated. ");
$this->callMethod("HeatersON");
}
if ( ($T+1) > $ST) { // Если температура выше заданной более чем на два градуса - ищем комнатный обогреватель и вЫключаем его
echo("Room ".$this->object_title." must be cooled. ");
$this->callMethod("HeatersOFF");
}
if ($this->getProperty("Alarm_Movement")==1 ) {
echo("<BR>Тревога в ".$this->object_title);
}
else {
echo("<BR>Отмена тревоги в ".$this->object_title);
}$AutoTemp=$this->getProperty("AutoTemp");
echo("<BR>AutoTemp".$AutoTemp."<BR>");
//---------------- Устанавливаем такое же значение для всех дочерних объектов
$objects=getObjectsByClass("Rooms");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
if (get_parent_class($ob).Name==get_parent_class($this).Name) {
if ($AutoTemp==1) { // если родитель находился в AutoTemp
$ob->callmethod("AutoTempON"); // то включаем и дочерний
//echo("ON");
}
else { // если объект НЕ находился в AutoTemp
$ob->callmethod("AutoTempOFF"); // то выключаем дочерний
$ob->callMethod("HeatersOFF"); // и выключаем все связаные обогреватели
//echo("OFF");
}
}
}$this->SetProperty("AutoTemp","1");$this->SetProperty("AutoTemp","0");Class objects:
Class properties:
Class methods:
$latestActivity=$this->getProperty('LatestActivity');
$this->setProperty('LatestActivity',time());
$this->setProperty('LatestActivityTime',date('H:i'));
$this->setProperty('SomebodyHere',1);
$this->setProperty("TimerToLightOff",time()+$this->getProperty("Delay")*60); // сбрасываем таймер выключения света
$this->callMethod("CheckState");
//---------------------------------------------------------------------------------------
$this->setProperty('SomebodyHere',0);
$temp=time()+$this->getProperty("Delay")*60;
$this->setProperty('TimerToLightOff',$temp);
$temp=$this->getProperty('TimerToLightOff');
echo("<BR>Time to Light OFF : ".$temp);
$this->callMethod("CheckState"); $heaters=getObjectsByClass("Heaters"); // перебираем все обогреватели
foreach($heaters as $heater) {
$heat=getObject($heater['TITLE']);
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
$heat->callmethod("RelayON"); // Запуск метода ON для обогревателя
echo($heat->getProperty("LinkObject")." - ON<BR>");
}
} $heaters=getObjectsByClass("Heaters"); // перебираем все обогреватели
foreach($heaters as $heater) {
$heat=getObject($heater['TITLE']);
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
$heat->callmethod("RelayOFF"); // Запуск метода OFF для обогревателя
echo($heat->getProperty("LinkObject")." - OFF<BR>");
}
}echo("<BR>CheckState ".$this->object_title);
//------------------------------------------------------------------------------ // Проверка состояния обогревателей в комнате
$heaters=getObjectsByClass("Heaters"); // перебираем все обогреватели
foreach($heaters as $heater) {
$heat=getObject($heater['TITLE']);
$temp=0;
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
if ( $heat->getProperty("Relay") == 1 ) {
$this->setProperty("Heating",1);
$temp=1;
break; // если хотя бы один обогреватель включен
} // то считаем что комната отапливается
}
}
if ($temp==0) { // если ни один обогреватель не включен
$this->setProperty("Heating",0);} // то считаем что комната не обогревается
echo("<BR>".$this->object_title." Heating=".$temp);
//---------------------------------------------------------------------------------------
//------------------------------------------------------------------------------ // Проверка состояния датчиков движения в комнате
$heaters=getObjectsByClass("MovementSensors"); // перебираем все датчики
foreach($heaters as $heater) {
$heat=getObject($heater['TITLE']);
$temp=0;
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
if (( $heat->getProperty("MoveSensor") == 1 )&($heat->getProperty("Active")==1) ) // если датчик сработал и активен )
{ // (потому как мог просто сработать уже давно и отвалится
$this->setProperty("SomebodyHere",1); // если хотя бы один датчик включен
$temp=1; // то считаем что в комнате кто-то есть
break;
}
else
{ $this->setProperty("SomebodyHere",0); // если опросили все датчики и ни один не активен
} // то, считаем что в комнате никого нет
}
}
if ($temp==0) { // если ни один датчик не активен
$this->setProperty("SomebodyHere",0); // то считаем что в комнате никого нет
}
//---------------------------------------------------------------------------------------
if ( $this->getProperty("SomebodyHere") == 1) { // если обнаружено движение
if ($this->getProperty("Light") != 1 ) { // и свет не включен, то включаем свет
echo("<BR>Кто-то в комнате. Включаем свет");
$this->callMethod("LightON");
}
}
//---------------------------------------------------------------------------------- // Проверка по режимам безопасности
if ( $this->getProperty("ProtectionMode") == 1 ) { // если комната находится в режиме охраны
if ( $this->getProperty("SomebodyHere") == 1) { // и в ней обнаружено движение, то запускаем ALARM
echo("<BR>Нарушение безопасности. Движение в ".$this->object_title);
$this->setProperty("Alarm_Movement",1);
}
else{
$this->setProperty("Alarm_Movement",0);
}
}
//---------------------------------------------------------------------------------------
if ( $this->getProperty("NoBodyHome") == 1 ) { // если комната находится в режиме отсутствия людей
if ( $this->getProperty("SomebodyHere") == 1) { // и в ней обнаружено движение, то запускаем
}
}
//---------------------------------------------------------------------------------------
if ($this->getProperty("SomebodyHere")== 1) {
$this->setProperty("TimerToLightOff",0);
}
//---------------------------------------------------------------------------------------
if (( $this->getProperty("EconomMode")== 1)&($this->getProperty("Light")==1)&($this->getProperty("SomebodyHere")== 0) ) { // если комната находится в режиме экономии энергии и включен свет
if ($this->getProperty("TimerToLightOff")== 0) { //если не установлен таймер на выключение
$this->setProperty("TimerToLightOff",time()+$this->getProperty("Delay")*60);
}
}
//---------------------------------------------------------------------------------------
if (( $this->getProperty("EconomMode")== 1)&($this->getProperty("Light")==1)&($this->getProperty("SomebodyHere")== 0) ) { // если комната находится в режиме экономии энергии и включен свет
// if ($this->getProperty("TimerToLightOff")!= 0) { //если установлен таймер на выключение
// echo("<BR>".$this->getProperty("TimerToLightOff")." Нет движения в эконом режиме. Свет гасим"); //то свет не гасим а ждем когда обнулится таймер
echo("<BR>"." Нет движения в эконом режиме. Свет гасим"); //то свет не гасим а ждем когда обнулится таймер
$temp=time()-$this->getProperty("TimerToLightOff");
if ($this->getProperty("TimerToLightOff")>0) { //который обновляет свойство TimerToLightOff через метод объекта oneNewminute
if ($temp<0) echo(" через ".$temp." c.");
if ($temp>0) {
echo(" немедленно.");
$this->callMethod("LightOFF");
}
}
else {
echo("<BR>Включен эконом режим");
if ( $this->getProperty("SomebodyHere") == 1) { // и в ней обнаружено движение, то запускаем
//echo("<BR>Кто-то в комнате. Включаем свет");
}
}
}$this->setProperty('TimerToLightOff',0);
$heaters=getObjectsByClass("Lights"); // перебираем все светильники
foreach($heaters as $heater) {
$heat=getObject($heater['TITLE']);
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
$heat->callmethod("RelayON"); // Запуск метода ON для обогревателя
echo($heat->getProperty("LinkObject")." - ON<BR>");
}
}$lighters=getObjectsByClass("Lights"); // перебираем все светильники
foreach($lighters as $lighter) {
//echo($heat->object_title);
$heat=getObject($lighter['TITLE']);
if ( $this->object_title == $heat->getProperty("LinkObject")) { // Находим те которые закреплены за комнатой
$heat->callmethod("RelayOFF"); // Запуск метода OFF для светильника
echo("<BR>".$heat->getProperty("LinkObject")." - OFF<BR>");
}
}if ( $this->getProperty("Light")== 0 ) {
$this->callMethod("LightON");
}
else {
$this->callMethod("LightOFF");
}//$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
//$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='0B';
$ob=$this;
$IDdev=0;//hexdec("0x".$ob->getProperty("ID"));
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
$IDp="02";
$Param=$IDdev;
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131"."<BR>");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
//}
//}Class objects:
Class properties:
Class methods:
$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);Class properties:
Class methods:
$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 (getGlobal('somebodyHome')!=1) {
setGlobal('somebodyHome',1);
}
$last_register=registeredEventTime('inhouseMovement');
registerEvent('inhouseMovement',$this->name,2);
if (!$last_register || ((time()-$last_register)>2*60*60)) {
if (timeBetween('06:00', '12:00')) {
runScript('morningGreeting');
}
if (timeBetween('16:00', '01:00')) {
runScript('eveningGreeting');
}
}
}Class properties:
Class methods:
$this->setProperty("status",1);
sg($This + ".status",1); $this->setProperty("status",0); exit($State);
if ($params['VALUE']) {
sg("LightBulb1.status","1");
say('Освещение в прихожей включено', 1);
$this->setProperty('statusText','Включено');
} else {
sg("LightBulb1.status","0");
say('Освещение в прихожей выключено', 1);
$this->setProperty('statusText','Выключено');
}Class objects:
Class properties:
Class methods:
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date('H:i'));
if ($this->getProperty('status')) {
say("Mode ".$this->getProperty('title')." activated.");
} else {
say("Mode ".$this->getProperty('title')." deactivated.");
}$this->setProperty('active',1);$this->setProperty('active',0);Class objects:
Class properties:
Class methods:
$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);Class properties:
Class methods:
//$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$this->setProperty("Relay",1);
$aa=substr_replace($this->getProperty("ID"), '0', -1); // Из адреса элемента формируем RF адрес модуля, последней цифрой ставя ноль
$ID="E7E7E7".$aa;
$aa=substr_replace($this->getProperty("ID"), '', -2); // В отправляемом пакете адрес элемента модуля передается младшим байтом вперед
$ab=substr_replace($this->getProperty("ID"), '', 0,2); // получаем млю и стрш. байты
$IDS=$ab.$aa; // формируем конечный адрес
$CMD='02'."00"."00000000"."0100"."3131";
$this->setProperty("LastCommand",$CMD);
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.$CMD);
echo("<BR>".$ID.$IDS.$CMD); //$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$this->setProperty("Relay",0);
$aa=substr_replace($this->getProperty("ID"), '0', -1); // Из адреса элемента формируем RF адрес модуля, последней цифрой ставя ноль
$ID="E7E7E7".$aa;
$aa=substr_replace($this->getProperty("ID"), '', -2); // В отправляемом пакете адрес элемента модуля передается младшим байтом вперед
$ab=substr_replace($this->getProperty("ID"), '', 0,2); // получаем млю и стрш. байты
$IDS=$ab.$aa; // формируем конечный адрес
$CMD='02'."00"."00000000"."0100"."3131";
$CMD='02'."00"."00000000"."0000"."3131";
$this->setProperty("LastCommand",$CMD);
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.$CMD);
echo($ID.$IDS.$CMD);//$params['t']
echo("\n\r");
echo("SetStatus ".$s);
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("Y-m-d H:i",time()));
$this->setProperty("Active","1");
//-----------------------------------------------------------
// запрос класса объекта ( в MD все является классом objects )
$SQL_R=SQLSelectOne("SELECT * FROM classes WHERE ID='".(int)$this->class_id."'");
$class=$SQL_R['TITLE'];
echo($class);
//-------------------------- If This TempSensor ( Если Это датчик температуры ) ------------------------------------------
if ($class=='TempSensors')
if (isset($params['prm'])) { // данные с датчика температуры поступают в сыром виде, так как их выдает датчик DS18B20
// поэтому нужно разделить положительные и отрицательные значения
if ($params['prm']<1100) { // положительная температура
$t=$params['prm']/10;
echo("Received temp =".$t." in ".$this->getProperty("LinkObject")."<BR>");
$this->setProperty('Temp',$t);
$str=($this->getProperty("LinkObject")).".Temperature";
setGlobal($str,$t);
}
if ($params['prm']>2500) { // отрицательная температура
$tmp=$params['prm'];
$t = -(~$tmp + 2 + 65535)/10;
echo("Received temp =".$t." in ".$this->getProperty("LinkObject")."<BR>");
$this->setProperty('Temp',$t);
$str=($this->getProperty("LinkObject")).".Temperature";
setGlobal($str,$t);
}
}
//-------------------------- If This Light ( Если Это лампочка ) ------------------------------------------
if ($class=='Lights'){
$s=$params['s'];
if ((intval($s,16)&1)>0) {
echo("Light ON");
$this->setProperty('Relay',"1");
$str=($this->getProperty("LinkObject")).".Light";
echo(" in ".$str."<BR>");
setGlobal($str,"1");
}
else
{
echo("Light OFF");
$this->setProperty('Relay',"0");
$str=($this->getProperty("LinkObject")).".Light";
echo(" in ".$str."<BR>");
setGlobal($str,"0");
$str=($this->getProperty("LinkObject")).".TimerToLightOff";
echo("<BR> Clear timer ".$str);
setGlobal($str,"0");
}
}
//-------------------------- If This Heater ( Если Это обогреватель ) ------------------------------------------
if ($class=="Heaters"){
$s=$params['s'];
if ((intval($s,16)&1)>0) {
echo($s." ".(intval($s,16)&1)." "."Heaters ON+");
$this->setProperty('Relay',"1");
$str=($this->getProperty("LinkObject"));
echo(" in ".$str."<BR>");
}
if ((intval($s,16)&1)==0) {
echo($s." ".(intval($s,16)&1)." Heaters OFF-");
$this->setProperty('Relay',"0");
$str=($this->getProperty("LinkObject"));
echo(" in ".$str."<BR>");
}
}
//-------------------------- If This MoveSensor ( Если Это датчик движения ) ------------------------------------------
if ($class=='MovementSensors') {
$s=$params['s'];
if ((intval($s,16)&1)>0) {
$this->callMethod('MovementON');
}
else
{
$this->callMethod('MovementOFF');
}
}
//------------------------------------------------------------------------------------------------------------------
$s=$params['s'];
$old_status=$this->getProperty("status");
if (isset($params['s'])) {
if ($old_status!=$s)
{
$this->setProperty('Status',str_pad(strval(decbin($s)),8,"0",STR_PAD_LEFT));
//--------------Побитовая проверка статуса устройства---------------------------------------------
// Младший бит - состояние реле. Можно как читать так и устанавливать.
echo( intval($s,16));
//------Второй бит устройства. -----------------------------------------------------
if ((base_convert($s, "2", "10")&2)>0) {
//
}
else{
//
};
//-----------------------------------------------------------
}
}
if ($params['uptime']) {
$this->setProperty('uptime',$params['uptime']);
}echo($this->getProperty("Relay"));
if ($this->getProperty("Relay")==0) {
$this->callmethod("RelayON");
}
else
{
$this->callmethod("RelayOFF");
}echo("<BR>Adress request");
$ADDR=$params['prm'];
$ID="E7E7E7".$ADDR;
$IDS="00";
$CMD="00".'08'."00"."00000000"."0100"."3131";
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.$CMD);
$this->setProperty("LastCommand",$CMD);$aa=substr_replace($this->getProperty("ID"), '0', -1); // Из адреса элемента формируем RF адрес модуля, последней цифрой ставя ноль
$ID="E7E7E7".$aa;
$aa=substr_replace($this->getProperty("ID"), '', -2); // В отправляемом пакете адрес элемента модуля передается младшим байтом вперед
$ab=substr_replace($this->getProperty("ID"), '', 0,2); // получаем млю и стрш. байты
$IDS=$ab.$aa;
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.'03'."00"."00000000"."0000"."3131");
safe_exec('"echo>>C:/_majordomo/apps/arduino_gw/arduino_gw.log "'.date("H:i",time())." : ".$ID.$IDS.'03'."00"."00000000"."0000"."3131");
$aa="";
$ID="";
$IDS="";// Метод выполняет действия по отработке события на датчике движения,
// кроме установки меток о доступности устройства и времени последней активности*,
// это позволяет запускать метод принудительно из других мест.
// * эти свойства устанавливаются в методе класса при получении реального сигнала от датчика
echo("Activity!");
$this->setProperty('MoveSensor',"1"); // Устанавливаем значение свойства самого датчика движения
$str=$this->getProperty("LinkObject").".onActivity"; // формируем имя метода связанного объекта
callMethod($str); // Запускаем метод связанного объекта// Метод выполняет действия по отработке события на датчике движения,
// кроме установки меток о доступности устройства и времени последней активности*,
// это позволяет запускать метод принудительно из других мест.
// * эти свойства устанавливаются в методе класса при получении реального сигнала от датчика
echo("No active");
$this->setProperty('MoveSensor',"0"); // Устанавливаем значение свойства самого датчика движения
$str=$this->getProperty("LinkObject").".onIdle"; // формируем имя метода связанного объекта
callMethod($str); // Запускаем метод связанного объекта// Если есть связанный объект, то запускаем метод этого
// объекта для обновления своего состояния
if ( $this->getProperty("LinkObject") != "" ) {
echo("Parent object = ".$this->getProperty("LinkObject")."<BR>");
$str=($this->getProperty("LinkObject")).".CheckState";
echo("<br>".$str);
callmethod($str);
}$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='06';
$objects=getObjectsByClass("RF_Device");
echo("<br>");
//foreach($objects as $obj)
{
//$ob=getObject($obj['TITLE']);
$ob=$this;
$IDdev=hexdec("0x".$ob->getProperty("ID"));
//$ADDR=hexdec("0x".$ADDR);
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
$name=$ob->object_title;
echo("<BR>".$name." ");
for ($aa=0;$aa<18;$aa++) {
$IDp=sprintf("%02X",$aa);
$Param=sprintf("%02X",ord($name{$aa})).'00';
if ($Param=="0000"){
break;
}
//echo(dechex(ord($name{$aa}))." ");
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
usleep(300000);
}
}
//safe_exec('"echo>>C:/_majordomo/apps/arduino_gw/arduino_gw.log "'.date("H:i",time())." : ".$ID.$IDS."00".'03'."00"."00000000"."0000"."3131");
$aa="";
$ID="";
$IDS="";$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='0B';
//$objects=getObjectsByClass("TextMessages");
//echo("<br>");
//foreach($objects as $obj)
//{
$ob=$this;
//$ob=getObject($obj['TITLE']);
//$IDtext=$ob->getProperty("ID");
// $IDdev=hexdec("0x"."0001");
$IDdev=hexdec("0x".$ob->getProperty("ID"));
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
$IDp="02";
$Param=$IDdev;
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131"."<BR>");
// E7E7E7E0E162000B02000000003131
//safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '."E7E7E7E0E102000B010000000061003131");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
//}
//}Class objects:
echo("<BR>Start");
if (isset($params['prm'])){
$prm=$params['prm'];
}
$s=$params['s'];
$prm=$params['prm'];
$idd=$params['id'];
$idp=$params['idp'];
echo("<BR>"."ID=".$idd." Status=".$s);
//-----------------------------------------------------------------
$objects=getObjectsByClass("RF_Device");
echo("<br>");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
$ID=$ob->getProperty("ID");
echo($obj['TITLE']." Class -".get_class($ob)." ID= ".$ID." Status= ".$s);
if ($ID==$idd){
echo(" Поступила команда <BR>");
$ob->callmethod("SetStatus",array("s"=>hexdec($s),"prm"=>hexdec($prm),"idp"=>hexdec($idp),"prm"=>hexdec($prm)));
//if (isset($params['prm'])){
//$ob->callmethod("SetStatus",array("prm"=>hexdec($prm)));
//}
}
echo("<BR>");
}
//-----------------------------------------------------------------echo("<BR>Adress request");
$ADDR=$params['prm'];
echo($ADDR);
$CMD=$params['s'];
//-------------------------------------------------------------------------------------------------------------------
// Обработка запроса от RF-модуля на выделение нового адреса.
// Адрес определяется как очередной из уже существующих. Адрес ControlCentre - зарезервирован и в выборе не участвует
//-------------------------------------------------------------------------------------------------------------------
if ($CMD==9) {
echo("Incoming address request");
// ---------------------- Формирование нового номера модуля ---------------------------------------------------------
// Для определения очередного номера делаем запрос в базу объектов с фильтром по PROPERTY_ID объекта - 86 (поле с номером модуля)
$result = mysql_query("SELECT * FROM `pvalues` WHERE `PROPERTY_ID`=86");
if (!$result) {
echo mysql_error();
}
if (!$result) {
$message = 'Неверный запрос: ' . mysql_error() . "\n";
//$message .= 'Запрос целиком: ' . $query;
die($message);
}
//------------------------------------------------------------------------------------------------------------------
$NEW_ModuleID=0;
while ($row = mysql_fetch_object($result)) {
echo ("ID:".$row->ID);
echo (" OBJECT:".$row->OBJECT_ID);
echo (" PROPERTY_ID:".$row->PROPERTY_ID);
echo (" VALUE:".$row->VALUE);
echo ("<BR>");
// ------------------------ если наткнулись на объект ControlCenter (т.е. на себя ) то пропускаем (Обычно у него номер идет не по-порядку) -------------
if ( $row->VALUE == $this->getProperty("ID")) {
echo("It's Control center - continue...<BR>");
continue;
}
//------------------------- здесь находим самый большой(последний) номер --------------------------------------------------
if ($row->VALUE>$NEW_ModuleID) {
$NEW_ModuleID=$row->VALUE;
//--------------------------------------------------------------------------------------------------------------
}
}
mysql_free_result($result); // Удаление объекта с результатом запроса.
//---------------------------- здесь создаем новый номер кратный 0x10 ------------------------------------------------
echo "MAX_ModuleID:".$NEW_ModuleID."<BR>";
//----------- В базе хранятся номера модулей в HEX виде, но этот вид не помечен ни "0х" ни "\х". Поэтому следующий блок приводит номер к НЕХ виду
//----------- и вычисляет следующий по порядку номер для модуля кратный 0х10
$NEW_ModuleID=hexdec("0x".$NEW_ModuleID);
//echo "NEW_ModuleID(HEX):". sprintf("%04X",$NEW_ModuleID)."<BR>";
$NEW_ModuleID=floor($NEW_ModuleID/0x10)*0x10+0x10;
// ------- Если новый адрес совпадает с адресом СontrolCenter то берем следующий адрес -----------------------------
$aa=substr_replace($this->getProperty("ID"), '0', -1); // Из адреса элемента формируем RF адрес модуля, последней цифрой ставя ноль
if ( $NEW_ModuleID == $aa ) {
$NEW_ModuleID=hexdec("0x".$NEW_ModuleID);
$NEW_ModuleID=floor($NEW_ModuleID/0x10)*0x10+0x10;
}
// ------------------------------------------------------------------------------------------------------------------
//echo "NEW_ModuleID(HEX):". sprintf("%04X",$NEW_ModuleID)."<BR>";
//echo sprintf("%02X%02X",$NEW_ModuleID&0x00FF,$NEW_ModuleID>>8);
//----------------- Отсылаем новый номер устройству ----------------------------------------------------------------
$ID="E7E7E7".$ADDR;
echo("<BR>".$ADDR);
//echo("<BR>".sprintf("%02X%02X",$ADDR&0x00FF,$ADDR>>8));
$ADDR=hexdec("0x".$ADDR);
$IDS=sprintf("%02X%02X",$ADDR&0x00FF,$ADDR>>8); //
$CMD='08'."00"."00000000".sprintf("%02X%02X",$NEW_ModuleID&0x00FF,$NEW_ModuleID>>8)."3131"; // сложная конструкция с побитовыми операциями - это смена местами старшего и младшего байта, для передачи
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.$CMD);
echo("<BR>".'"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDS.$CMD);
}
if ($CMD==7) {
echo("Incoming address confirmation");
$NEW_ModuleID=$ADDR;
// ---------------------- Создаем новый RF объект в базе ------------------------------------------------------------
$TITLE="New RF device";
$CLASS_ID=29;
$DESCRIPTION="New RF device ModuleID: ".sprintf("%04s",$NEW_ModuleID); // в описание сразу добавляем номер модуля для удобства
$LOCATION_ID=4;
$query_o = "INSERT INTO `objects` (`TITLE`, `CLASS_ID`, `DESCRIPTION`,`LOCATION_ID`) VALUE (\"$TITLE\", \"$CLASS_ID\",
\"$DESCRIPTION\", \"$LOCATION_ID\")";
echo("<BR>"."Create new object".$query_o."<BR>");
mysql_query ($query_o) or die (mysql_error());
//-------- Сохраняем ИД нового объекта для дальнейшего создания записи со свойствами для этого объекта -----------
$NEW_OBJECT_ID=mysql_insert_id();
echo("<BR>Last inserted record has id ".$NEW_OBJECT_ID." <BR>");
// ---------------------- Присваиваем номер модулю -----------------------------------------------------------------
$PROPERTY_ID=86; // 86 - свойство с номером модуля
$OBJECT_ID=$NEW_OBJECT_ID; // ИД только что созданого объекта
$VALUE=sprintf("%04s",$NEW_ModuleID); // номер модуля
echo "NEW_ModuleID(HEX):".$VALUE."<BR>";
$query_pv = "INSERT INTO `pvalues` (`PROPERTY_ID`, `OBJECT_ID`, `VALUE`) VALUE (\"$PROPERTY_ID\", \"$OBJECT_ID\",\"$VALUE\")";
echo("<BR>".$query_pv);
mysql_query ($query_pv) or die (mysql_error());
$this->setProperty("LastCommand",$CMD); // сохраняем полседнюю команду, Типа мини-лог.
}
echo("Exit DHCP");$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='06';
$objects=getObjectsByClass("RF_Device");
echo("<br>");
foreach($objects as $obj)
{
$ob=getObject($obj['TITLE']);
//$ob=$this;
if ($ob->object_title!=$this->object_title){
$ob->callmethod("SetNames");
}
// $IDdev=hexdec("0x".$ob->getProperty("ID"));
// $IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
// $name=$ob->object_title;
echo("<BR>".$name." ");
/*
for ($aa=0;$aa<16;$aa++) {
$IDp=sprintf("%02X",$aa);
$Param=sprintf("%02X",ord($name{$aa})).'00';
if ($Param=="0000"){
break;
}
// safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
}
*/
//usleep(1000000);
}
//safe_exec('"echo>>C:/_majordomo/apps/arduino_gw/arduino_gw.log "'.date("H:i",time())." : ".$ID.$IDS."00".'03'."00"."00000000"."0000"."3131");
$aa="";
$ID="";
$IDS="";$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='0A';
$objects=getObjectsByClass("TextMessages");
echo("<br>");
foreach($objects as $obj)
{
$ob=getObject($obj['TITLE']);
$IDtext=$ob->getProperty("Text");
$IDdev=hexdec("0x".$ob->getProperty("ID"));
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
echo("<BR>".$IDtext." ");
for ($aa=0;$aa<16;$aa++) {
$IDp=sprintf("%02X",$aa);
$Param=sprintf("%02X",ord($IDtext{$aa})).'00';
if ($Param=="0000"){
break;
}
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131"."<BR>");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
}
}$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='0B';
$objects=getObjectsByClass("TextMessages");
echo("<br>");
//foreach($objects as $obj)
//{
//$ob=getObject($obj['TITLE']);
//$IDtext=$ob->getProperty("ID");
$IDdev=hexdec("0x"."0001");
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
//echo("<BR>".$IDtext." ");
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131"."<BR>");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '."E7E7E7E0E102000B010000000061003131");
// safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD."00"."00000000".$Param."3131");
//}
//}Class objects:
Class objects:
Class objects:
Class objects:
Class methods:
Class objects:
echo "status received: ".$params['status'];
global $voicemode; $voicemode='off'; processCommand($params['message']);
Class properties:
Class methods:
Class objects:
$details=array();
$red_state=0;
$yellow_state=0;
if ($red_state) {
$state='red';
$state_title='Red';
} elseif ($yellow_state) {
$state='yellow';
$state_title='Yellow';
} else {
$state='green';
$state_title='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("System state changed to ".$state_title.".");
say(implode(". ",$details));
} else {
say("System state restored to ".$state_title);
}
$this->callMethod('stateChanged');
}$details=array();
$red_state=0;
$yellow_state=0;
$cycles=array('states'=>'states cycle','main'=>'main cycle','execs'=>'exec cycle','scheduler'=>'scheduler cycle');
foreach($cycles as $k=>$v) {
$tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
if (time()-$tm>5*60) {
$red_state=1;
$details[]=$v." stopped.";
}
}
$cycles=array('ping'=>'ping cycle','webvars'=>'webvars cycle','watchfolders'=>'watch folders cycle','rss'=>'RSS cycle');
foreach($cycles as $k=>$v) {
$tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
if (time()-$tm>10*60) {
$yellow_state=1;
$details[]=$v." stopped.";
}
}
if ($red_state) {
$state='red';
$state_title='Red';
} elseif ($yellow_state) {
$state='yellow';
$state_title='Yellow';
} else {
$state='green';
$state_title='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("System state changed to ".$state_title.".");
say(implode(". ",$details));
} else {
say("System state restored to ".$state_title);
}
$this->callMethod('stateChanged');
}$details=array();
$red_state=0;
$yellow_state=0;
if ($red_state) {
$state='red';
$state_title='Red';
} elseif ($yellow_state) {
$state='yellow';
$state_title='Yellow';
} else {
$state='green';
$state_title='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("System state changed to ".$state_title.".");
say(implode(". ",$details));
} else {
say("System state restored to ".$state_title);
}
$this->callMethod('stateChanged');
}Class properties:
Class methods:
$aa=(round(intval($this->getProperty("ID"))/10, 0)*10);
$aa=str_pad($aa, 4, "0", STR_PAD_LEFT);
echo("<BR>".$aa);
$IDS="E0E1";//intval($this->getProperty("ID"));
$ID=("E7E7E7".$IDS);//$aa;
$CMD='0A';
//$objects=getObjectsByClass("TextMessages");
echo("<br>");
//foreach($objects as $obj)
//{
$ob=$this;
//$ob=getObject($obj['TITLE']);
$IDtext=$ob->getProperty("ID");
$IDdev=hexdec("0x".$ob->getProperty("ID"));
$IDdev=sprintf("%02X%02X",$IDdev&0x00FF,$IDdev>>8);
echo("<BR>".$IDtext." ");
for ($aa=0;$aa<16;$aa++) {
$IDp=sprintf("%02X",$aa);
$Param=sprintf("%02X",ord($name{$aa})).'00';
if ($Param=="0000"){
// break;
}
echo("<BR>".$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131"."<BR>");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" '.$ID.$IDdev.$CMD.$IDp."00000000".$Param."3131");
}
//}Class objects:
Class properties:
Class methods:
Class objects:
//------------------------------------------------------------------------------------
// Конвертирует количество секунд в читабельное время : 5w 4d 6h 58m 50s
function time_elapsed_A($secs){
$bit = array(
'y' => $secs / 31556926 % 12,
'w' => $secs / 604800 % 52,
'd' => $secs / 86400 % 7,
'h' => $secs / 3600 % 24,
'm' => $secs / 60 % 60,
's' => $secs % 60
);
foreach($bit as $k => $v)
if($v > 0)
$ret[] = $v . $k ;
else
$ret[] = "" ;
return join(" ", $ret);
}
//-------------------------------------------------------------------------------------
$h=(int)date('G',time());
$m=date('i',time());
if (isWeekDay()) {
}
//------------------ Опрос всех датчиков температуры --------------------------------------------------
$nowtime = time(); // Текущее время
$objects=getObjectsByClass("TempSensors"); // Выбираем все датчики температуры
echo("<BR>----------------------------------");
echo("<BR> Датчики температуры");
echo("<BR>----------------------------------");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
$updated=$ob->getProperty("updated"); // Получаем время последнего успешного опроса
$temp=$ob->getProperty("RequestPeriod"); // Получаем период опроса из свойств датчика
if ( $temp == "" ) { // Если период не установлен принимаем за 10 мин
$temp=10;
}
$interval= ($nowtime-$updated)/60; // вычисляем время прошедшее с последнего успешного опроса в минутах ( /60 )
echo("<br>".$ob->object_title." Elapsed time: ".$interval." => ".$temp);
if ( $interval > $temp ){
echo(" отправка запроса...");
$ob->callmethod("TempRequest"); // Если время истекло, посылаем запрос на датчик
}
else {
echo(" ждем ...");
}
}
//-------------------------------------------------------------------------------
// Проверка доступности датчиков по времени последнего контакта Свойство LastConnect.
$nowtime = time();
$devices=getObjectsByClass("RF_Device"); // перебираем все удаленные устройства
//------------------------------------------------------------------------------------------------------------------------
echo("<BR>----------------------------------");
echo("<BR> Проверка доступности модулей");
echo("<BR>----------------------------------");
foreach($devices as $dev) {
$device=getObject($dev['TITLE']);
$updated=$device->getProperty("updated");
$AliveTimeOut=$device->getProperty("AliveTimeOut");
echo("<BR>Device: ".$dev['TITLE']." Time: ".date('Y-m-d h:s', $updated));
echo "time_elapsed: ".time_elapsed_A($nowtime-$updated)."\n";
//----------------------------------------------
if ($AliveTimeOut == "" ) { // если время допустимой неактивности не указано
$AliveTimeOut=60*15 ; // 15 min // берем 15 минут
}
//----------------------------------------------
if ( $nowtime-$updated > $AliveTimeOut ){ // помечаем датчик активным/неактивным
$device->setProperty("Active",0); // в зависимости от прошедшего времени с последнего отклика
echo("NoActive 0");
//---------------------------------------------- // запрос имени класса объекта
$SQL_R=SQLSelectOne("SELECT * FROM classes WHERE ID='".(int)$device->class_id."'");
$class=$SQL_R['TITLE'];
//----------------------------------------------
echo("<br>->".$class."<-<br>");
if ($class=="MovementSensors") {
// $device->callMethod("MovementOFF"); // Для датчика движения сбрасываем состояние в неактивное
}
//----------------------------------------------
}
else {
$device->setProperty("Active",1);
echo("Active 1");
}
//----------------------------------------------
}
//------------------------------------------------------------------------------------------------------------------------
// Поддержание температурного режима.
// Выбираем все комнаты и проверяем температуру в каждой
echo("<BR>----------------------------------");
echo("<BR> Проверка комнат");
$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
$ob=getObject($obj['TITLE']);
echo("<BR><BR>---- ".$obj['TITLE']." -------<BR>");
echo ("Терморегуляция ");
if ( $ob->getProperty("AutoTemp")==1 ) {
echo ("включена.");
$T=$ob->getProperty("Temperature");
$ST=$ob->getProperty("SetTemperature");
if (($T=="") | ($ST=="")) {
// continue;
}
echo("<BR>".$obj['TITLE']." t= ".$T.", Required : ".$ST." .");
if ( ($T) < ($ST-2) ) { // Если температура ниже заданной более чем на два градуса - ищем комнатный обогреватель и включаем его
echo(" Room ".$ob->object_title." must be heated. ");
$ob->callMethod("HeatersON");
}
if ( ($T) > ($ST) ) { // Если температура выше заданной ищем комнатный обогреватель и вЫключаем его
echo("Room ".$ob->object_title." must be cooled. ");
$ob->callMethod("HeatersOFF");
}
$ob->callMethod("CheckState"); // опрос состояния и систем комнаты
}
else {
echo ("выключена.<br>");
}
$ob->callMethod("CheckState"); // опрос состояния и систем комнаты
}
//---------------------------------------------------------------------------------------------------------
// Отработка режима энергосбережения
$devices=getObjectsByClass("Rooms"); // перебираем объекты типа ROOM
//------------------------------------------------------------------------------------------------------------------------
foreach($devices as $dev) {
$device=getObject($dev['TITLE']);
$updated=$device->getProperty("LatestActivity"); // вычисляем период времени до последней активности в комнате
if ( ($device->getProperty("EconomMode")==1 ) & ( $nowtime-$updated > 15 ) ) { // > 15 минут и включен эконом режим
// ищем связанный с комнатой выключатель света и гасим свет
//$device-> callMethod("");
}
}
//---------------------------------------------------------------------------------------------------------
// Голосовые сообщения //
if (($h>=8)) { // Объявление каждого нового часа
if ($m=="00") {
say(timeNow());
}
}
if (($h==9)) { // Утренне приветствие
if ($m=="00") {
runScript("morningGreeting");
}
}
if (($h==13)) { // обеденное приветствие
if ($m=="00") {
runScript("LunchTime");
}
}
if (($h==17)) { // Обявление об окончании рабочего дня
if ($m=="25") {
say(timeNow());
runScript("WorkTimeOut");
}
}
//--------------------------------------------------------------------------------------------------------------Class methods:
Class objects:
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']);
}
}Class properties:
Class methods:
$this->setProperty("Start","0"); $this->setProperty("Start","1");Class objects:
$w=round(strip_tags(gg("TempSensor2.Temp"))); //Переводим погоду в переменную
if($w < "0"){ // Задаем условие - если погода минусовая то:
$w=abs($w); // Выводим в плюс
say(' На улице ' .$w.' градусов мороза' );
}
else
{
say(' На улице ' .$w.' градусов тепла' );
}Class properties:
Class objects:
, Ukraine
© 2026 CONNECT service