Пока так, но никак не продумаю логику, чтобы система докладывала, если прихожу я.
При существующем коде, если до срабатывания первого датчика система не успела отпинговать мой телефон и определить, что я рядом, то доклада не будет.
Код: Выделить всё
$this->setProperty('status',$params['status']); // выставляем статус сенсора
$this->setProperty('updatedTime',date("y-m-d H:i")); // выставляем время срабатывания сенсора
if ($params['status']) { // если статус = 1
sg('somebodyHome',1); // ставим глобальный флаг на то что кто-то дома
sg('somebodyHomeText','Дома кто-то есть'); // так же ставим свойства глобальной переменной для текстового статуса
sg('sensorMovementSUM.status', 1);
sg('sensorMovementSUM.alive', 1);
sg('sensorMovementSUM.updated', time());
sg('sensorMovementSUM.updatedTime', date("y-m-d H:i"));
$ot=$this->object_title;
clearTimeOut("sensorMovementSUM");
setTimeOut("sensorMovementSUM","sg('sensorMovementSUM.status',0);",30);
ClearTimeOut("nobodyHome"); // очищаем таймер события "никого нет дома"
SetTimeOut("nobodyHome","runScript('nobodyHome');", 1*30*60); // назначаем новый таймер. срабатывает через час после последнего срабатывания датчика.
$last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома"
if (!$last_register || ((time()-$last_register)>2*60*60)) { // срабатывало более 2х часов назад (либо никогда не срабатывало ранее)
say("Ура! Наконец кто-то появился дома!",1);
if (gg("Yulia.status") > 0 && time() - gg("Yulia.updated") > 90){
say("Здравствуйте Юлия",1);
}
if (gg("Andrey.status") > 0 && time() - gg("Andrey.updated") > 90){
say("Здравствуйте Андрей",1);
callMethod("доклад.action");
}
if (timeBetween('06:45', '12:00')) { // движение замечено утром
runScript('morningGreeting'); // запускаем скрипт "доброе утро"
}
if (timeBetween('18:00', '23:00')) { // движение замечено утром
runScript('eveningGreeting'); // запускаем скрипт "
}
}
registerEvent('inhouseMovement',$this->name,7); // регистрируем событие "движение внутри дома"
}