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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Zaezd2008
Сообщения: 165
Зарегистрирован: Чт ноя 13, 2014 8:56 pm
Благодарил (а): 23 раза
Поблагодарили: 7 раз

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

Сообщение Zaezd2008 » Вс сен 13, 2015 8:25 pm

Помогите, пожалуйста, разрешить небольшую проблемку.
Пример.
Есть метод для свойства "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 - должна срабатывать тревога и смс оповещение.
GreatBAO
Сообщения: 119
Зарегистрирован: Пн авг 24, 2015 11:24 am
Откуда: Сочи
Благодарил (а): 4 раза
Поблагодарили: 14 раз

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

Сообщение GreatBAO » Вс сен 13, 2015 8:40 pm

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

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

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

if ($this->getProperty('test') <= 5000) {
   say('Тревога!', 2);
} 
Zaezd2008
Сообщения: 165
Зарегистрирован: Чт ноя 13, 2014 8:56 pm
Благодарил (а): 23 раза
Поблагодарили: 7 раз

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

Сообщение Zaezd2008 » Вс сен 13, 2015 8:49 pm

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

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

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

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

Это не принимать отрицательных значений, точнее "5000" должны быть только положительными...
GreatBAO
Сообщения: 119
Зарегистрирован: Пн авг 24, 2015 11:24 am
Откуда: Сочи
Благодарил (а): 4 раза
Поблагодарили: 14 раз

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

Сообщение GreatBAO » Вс сен 13, 2015 8:54 pm

просто объясню что бы вы понимали, ваше выражение гласит:

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

($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
Zaezd2008
Сообщения: 165
Зарегистрирован: Чт ноя 13, 2014 8:56 pm
Благодарил (а): 23 раза
Поблагодарили: 7 раз

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

Сообщение Zaezd2008 » Вс сен 13, 2015 9:01 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)))
Спасибо, значит упустил данный момент...
Ответить