Страница 1 из 1

Как выполнить один раз?

Добавлено: Вс сен 13, 2015 8:25 pm
Zaezd2008
Помогите, пожалуйста, разрешить небольшую проблемку.
Пример.
Есть метод для свойства "test":
if ($this->getProperty('test') <= (5000 > 0)) {
say('Тревога!', 2);
}

период обновления SNMP свойства "test" выставлено 3 минуты. Получается так, что каждые 3 минуты Алиса говорит Тревога! А как сделать, что бы она говорила один раз, пока "test" не станет больше 5000?
Просто есть потребность отправлять смс, но если они будут отправляться через каждые 3 минуты- это разорение -))

Пробовал ввести ещё одно свойство- не работает, т.е. как только через 3 минуты обновляется значение "test" и оно <= 5000, фраза повторяется вновь до бесконечности, пока не станет больше 5000:

if ($this->getProperty('test') <= (5000 > 0)) {
if (!$this->getProperty('alarm_sent')) {
$this->setProperty('alarm_sent',1);
say('Тревога!', 2);
}
} elseif ($this->getProperty('alarm_sent')) {
$this->setProperty('alarm_sent',0);
}

P.S. речь идет о частоте вращения кулера и когда обороты падают меньше 5000 - должна срабатывать тревога и смс оповещение.

Re: Как выполнить один раз?

Добавлено: Вс сен 13, 2015 8:40 pm
GreatBAO
что-то не совсем понял вот это ($this->getProperty('test') <= (5000 > 0))
а если быть точнее то именно вот это (5000 > 0) ?
что подразумевается под этим выражением ?:)

думаю что так будет вернее:

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

if ($this->getProperty('test') <= 5000) {
   say('Тревога!', 2);
} 

Re: Как выполнить один раз?

Добавлено: Вс сен 13, 2015 8:49 pm
Zaezd2008
GreatBAO писал(а):что-то не совсем понял вот это ($this->getProperty('test') <= (5000 > 0))
а если быть точнее то именно вот это (5000 > 0) ?
что подразумевается под этим выражением ?:)

думаю что так будет вернее:

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

if ($this->getProperty('test') <= 5000) {
   say('Тревога!', 2);
}

Это не принимать отрицательных значений, точнее "5000" должны быть только положительными...

Re: Как выполнить один раз?

Добавлено: Вс сен 13, 2015 8:54 pm
GreatBAO
просто объясню что бы вы понимали, ваше выражение гласит:

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

($this->getProperty('test') <= (5000 > 0))
(5000 > 0) в данном случае = true так как 5000 больше 0
при проверке $this->getProperty('test') <= (true) получается следующее:
$this->getProperty('test') имеет какое-то значение и сравнивается уже с (true) то-есть true <= (true)
тем самым, будет всегда иметь положительный результат так как true = true :)

в вашем случае нужно сделать так

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

if(($this->getProperty('test') > 0 and $this->getProperty('test') <= (5000)))
в таком случае, условие будет верным если $this->getProperty('test') будет больше 0 и меньше или равно 5000

Re: Как выполнить один раз?

Добавлено: Вс сен 13, 2015 9:01 pm
Zaezd2008
GreatBAO писал(а):просто объясню что бы вы понимали, ваше выражение гласит:

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

($this->getProperty('test') <= (5000 > 0))
(5000 > 0) в данном случае = true так как 5000 больше 0
при проверке $this->getProperty('test') <= (true) получается следующее:
$this->getProperty('test') имеет какое-то значение и сравнивается уже с (true) то-есть true <= (true)
тем самым, будет всегда иметь положительный результат так как true = true :)

в вашем случае нужно сделать так

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

if(($this->getProperty('test') > 0 and $this->getProperty('test') <= (5000)))
Спасибо, значит упустил данный момент...