Страница 17 из 18

Re: вопросы от новичка

Добавлено: Пн июл 09, 2018 1:19 pm
fandaymon
Denis_k писал(а):
Пн июл 09, 2018 1:05 pm
fandaymon писал(а):
Пн июл 09, 2018 12:44 pm
А если в консоли дать команду brLinkCommand('sp3_2.off'), розетка её отработает? Если да, то возможно просто время таймера неправильно выставляется
попробовал выполнить, получил несколько ошибок, выполнение такой строки

Код: Выделить всё

cm('sp3_2.turnOff');
тоже проходит с ошибками, но розетка выключается
впрочем скорее всего ошибка именно с выставлением времени таймера, потому, что не отрабатывают оба таймера
fandaymon писал(а):
Пн июл 09, 2018 12:44 pm
Ну и в принципе странно делать несколько таймеров, чтобы выключить розетку и послать сообщение. Обычно просто запускают сценарий, в котором написаны все эти команды.
если конструкция используется "в одном месте", то особого смысла в сценарии не вижу
Ну можно тогда просто в одном таймере всё это написать -

Код: Выделить всё

setTimeOut("1_1","brLinkCommand('Вентилятор1.Off');sg('Вентилятор1.status',0);sayReply('Выключаю вытяжку ...',2);",gg('zad_vent1.sec'));

Re: вопросы от новичка

Добавлено: Пн июл 09, 2018 1:23 pm
Logrus
Logrus писал(а):
Пн июл 09, 2018 1:05 pm
нет не отработает, это же команда на рм про по рф, а сп3 по вай-фай через свойства-методы-в модуле
попробовал выполнить, получил несколько ошибок, выполнение такой строки
ну наверное нужно привести эти ошибки и вообще разобраться с настройками, то гложут ... ;)

Re: вопросы от новичка

Добавлено: Пн мар 11, 2019 9:49 pm
Samir77
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);
}

Это сам код...

Re: вопросы от новичка

Добавлено: Вт мар 12, 2019 12:46 am
Logrus
ну с месяц назад помнится в лс кидал все это по самому минимуму, работало?

Код: Выделить всё

$ot = $this->object_title;
$status = $this->getProperty('status');

$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;

if ($status) {
 clearTimeOut($ot . '_passed');
 say('Входная дверь закрыта', 2);
}
elseif ($passed < 60 && $status == 0) {
 $newTimeout = 60;
 say('Входная дверь открыта', 2);
} 
elseif ($passed < 90 && $status == 0) {
 $newTimeout = 120;
 say('Входная дверь открыта одну минуту', 2);
}
elseif ($passed < 240 && $status == 0) {
 $newTimeout = 120;
 say('Входная дверь открыта три минуты', 2);
}
elseif ($passed < 1600 && $status == 0) {
 $newTimeout = 300;
 say('Входная дверь открыта ' . round($passed/60) . ' минут', 2);
} else {
 //если больше аларм
 say('Аларм! Дверь!!!', 3);
}

if ($newTimeout > 0) {
 setTimeOut($ot . '_passed', 'callMethod("' . $ot . '.logicAction");', $newTimeout);
}
в жалобе выше вижу использование тлг, он вообще нормально работает или тормозит, то что-то такое в чатике помнится :)
двоит сообщения только с двери (отправка по сай и через модуль?) или со всего (если со всего при чем тут дверь?)?
на скринах выше у тлг самый высший приоритет, зачем? сай тоже приходит в тлг если в модуле не задран "Приоритет истории" для данного пользователя (по умолчанию там 0)

Re: вопросы от новичка

Добавлено: Вт мар 12, 2019 2:14 pm
Samir77
Logrus писал(а):
Вт мар 12, 2019 12:46 am
ну с месяц назад помнится в лс кидал все это по самому минимуму, работало?

Код: Выделить всё

$ot = $this->object_title;
$status = $this->getProperty('status');

$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;

if ($status) {
 clearTimeOut($ot . '_passed');
 say('Входная дверь закрыта', 2);
}
elseif ($passed < 60 && $status == 0) {
 $newTimeout = 60;
 say('Входная дверь открыта', 2);
} 
elseif ($passed < 90 && $status == 0) {
 $newTimeout = 120;
 say('Входная дверь открыта одну минуту', 2);
}
elseif ($passed < 240 && $status == 0) {
 $newTimeout = 120;
 say('Входная дверь открыта три минуты', 2);
}
elseif ($passed < 1600 && $status == 0) {
 $newTimeout = 300;
 say('Входная дверь открыта ' . round($passed/60) . ' минут', 2);
} else {
 //если больше аларм
 say('Аларм! Дверь!!!', 3);
}

if ($newTimeout > 0) {
 setTimeOut($ot . '_passed', 'callMethod("' . $ot . '.logicAction");', $newTimeout);
}
в жалобе выше вижу использование тлг, он вообще нормально работает или тормозит, то что-то такое в чатике помнится :)
двоит сообщения только с двери (отправка по сай и через модуль?) или со всего (если со всего при чем тут дверь?)?
на скринах выше у тлг самый высший приоритет, зачем? сай тоже приходит в тлг если в модуле не задран "Приоритет истории" для данного пользователя (по умолчанию там 0)
Сергей!!! Ни каких жалоб!!! Я может и сам что навертел... Тут больше крик о помощи! Уж простите что нагрузил! :?
Двоит только с герконов открытия и закрытия...Приоритеты ставил так что бы хоть как то получать уведомление об открытии и закрытии.
Сделал тестовый сай .. говорит и прилетает сразу..

Re: вопросы от новичка

Добавлено: Вт мар 12, 2019 11:55 pm
Logrus
ну на ненормальное поведение жалуешься, на вопросы не отвечаешь, сути так и не понял, чую через месяц следующая итерация будет ;)

Re: вопросы от новичка

Добавлено: Сб мар 28, 2020 9:22 pm
Sergey.Chek
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 при открытой, у сяоми наоборот
У меня 0 при открытой, 1 при закрытой. Что нужно в коде изменить? Спасибо.

Re: вопросы от новичка

Добавлено: Сб мар 28, 2020 9:57 pm
Chainik
Sergey.Chek писал(а):
Сб мар 28, 2020 9:22 pm
...
У меня 0 при открытой, 1 при закрытой. Что нужно в коде изменить? Спасибо.
Попробуйте убрать из кода восклицательный знак.

Re: вопросы от новичка

Добавлено: Сб мар 28, 2020 10:07 pm
Sergey.Chek
Chainik писал(а):
Сб мар 28, 2020 9:57 pm
Sergey.Chek писал(а):
Сб мар 28, 2020 9:22 pm
...
У меня 0 при открытой, 1 при закрытой. Что нужно в коде изменить? Спасибо.
Попробуйте убрать из кода восклицательный знак.
Убрал. При закрытии говорит, дверь закрыта и сразу же в догонку говорит дверь открыта.

Re: вопросы от новичка

Добавлено: Сб мар 28, 2020 10:28 pm
Chainik
Тогда надо вернуть восклицательный знак и попробовать действовать "в лоб". Инвертируем значение переменной на входе.
После строчки

Код: Выделить всё

$status = $this->getProperty('status');
вставляем фрагмент

Код: Выделить всё

If ($status <> 0) {
$status = 0;
} else {
$status = 1;}
По идее должно помочь.