Logrus писал(а): ↑Вт фев 06, 2018 9:34 pm
ypiter2006 писал(а):в телеграмме был вопрос
возможно это то что нужно
в SDevices/SOpenClose в метод logicAction у объекта "входная дверь"
Код: Выделить всё
$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;
if (!$status) {
ClearTimeOut($ot.'_passed');
say("Входная дверь закрыта",2);
}
if ($passed < 60 && $status) {
$newTimeout = 60;
say("Входная дверь открыта",2);
} elseif ($passed < 90 && $status) {
$newTimeout = 120;
say("Входная дверь открыта ".round($passed/60)." минуту",2);
} elseif ($passed < 240 && $status) {
$newTimeout = 120;
say("Входная дверь открыта ".round($passed/60)." минуты",2);
} elseif ($passed < 1900 && $status) {
$newTimeout = 300;
say("Входная дверь открыта ".round($passed/60)." минут",2);
}
if ($newTimeout > 0) {
setTimeOut($ot.'_passed','callMethod("'.$ot.'.logicAction");',$newTimeout);
}
это на входную дверь:
при открытой - Входная дверь открыта, Входная дверь открыта 1 минуту, Входная дверь открыта 3 минуты, Входная дверь открыта 5 минут и далее с 5-ти минутным интервалом до 30 минут включительно
при закрытой - Входная дверь закрыта
п.с. у датчика от броадлинк в свойства 0 при закрытой, 1 при открытой, у сяоми наоборот
Все кричат иди на форум в чате не спросить у всех все работает...
Вопрос вот в чем и сама проблема у меня как то странно отрабатывает этот код, может конечно лишнего туда напихал, но все же, то задержки в телегу приходят спустя 2 минуты, и уже потом знать что дверь открыта радости мало...
И что самое интересное , если в свойствах менять значение сначала на 0 (открыто) а потом пытаться поменять на 1(закрыто) то в браузере страница начинает тупо висеть.... Я уже не знаю как и что...
если не сложно .. то помоги..
$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;
if ($status)
{
say('Входная дверь закрыта', 2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll("Входная дверь закрыта");
//сбросить таймер
ClearTimeOut($ot . '_passed');
//в режим
setTimeOut($ot . '_presence', "cm('Rooms.Check');", 600);
//проверяем когда в последний раз срабатывало событие "Входная дверь"
$last_register = registeredEventTime('entranceClosed');
//регистрируем событие "Входная дверь"
registerEvent('entranceClosed', $this->description, 7);
if ($last_register == '-1' || (time() - $last_register) > 7200)
{
if (round(getHistoryValue('NobodyHomeMode.active', time() - 600, true)) == 1)
{
runScriptSafe('Greeting');
}
}
}
elseif ($passed < 60 && !$status)
{
$newTimeout = 60;
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll("Входная дверь закрыта");
//добавить камеру
}
elseif ($passed < 90 && !$status)
{
$newTimeout = 120;
say('Входная дверь открыта одну минуту', 1);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll("Входная дверь открыта одну минуту");
}
elseif ($passed < 240 && !$status)
{
$newTimeout = 180;
say('Входная дверь открыта три минуты', 1);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll("Входная дверь открыта три минуты");
}
elseif ($passed < 1800 && $status)
{
$newTimeout = 300;
say('Входная дверь открыта ' . round($passed/60) . ' минут', 3);
}
else
{
//если больше аларм (ну смс, астериск отправить)
say('Тревога!', 3);
playSound("alarm.mp3");
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll("Тревога");
}
if ($newTimeout > 0)
{
setTimeOut($ot . '_passed', 'cm("' . $ot . '.logicAction");', $newTimeout);
}
Это сам код...