Работа со временем, таймер включения\выключения.

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

mrcoolyok
Сообщения: 18
Зарегистрирован: Вс янв 19, 2020 9:11 am
Благодарил (а): 7 раз
Поблагодарили: 0

Работа со временем, таймер включения\выключения.

Сообщение mrcoolyok » Ср июн 17, 2020 12:50 pm

Друзья, доброго дня.
Подскажите, есть wi-fi розетка, хочу включать\выключать ее по расписанию.
При этом чтобы сообщала что операция выполнена.
Использую такой код в методе onNewMinute :

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

//расписание для розетки
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time')) && gg('switch_is.shedule_enable')=="1" && gg('switch_is.status')=="0") {
	sg("switch_is.status",1);
	say("Розетка включена по расписанию.");
  } elseif (!timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time')) && gg('switch_is.shedule_enable')=="1" && gg('switch_is.status')=="1") {
	say("Розетка выключена по расписанию.");
	sg("switch_is.status",0);
  }
Но возникает проблема, что в крайних точках start_time и stop_time срабатывание происходит неустойчиво, может выключиться или выключиться произвольно, уведомления вообще пишет когда захочется.
Если же в промежуточное время выключить розетку (во время когда должна быть включена), то она корректно стартует автоматически и отсылается уведомление о включении.
У меня подозрение что в условиях timeBetween и !timeBetween происходит пересечение в моменты времени start_time и stop_time
Подскажите, как этого избежать?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 816 раз

Re: Работа со временем, таймер включения\выключения.

Сообщение tarasfrompir » Ср июн 17, 2020 1:08 pm

может проще посмотреть в эту сторону ?
viewtopic.php?f=5&t=2977&hilit=%D1%80%D ... 0%B8%D0%B5
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 632 раза

Re: Работа со временем, таймер включения\выключения.

Сообщение xor » Ср июн 17, 2020 1:16 pm

mrcoolyok писал(а):
Ср июн 17, 2020 12:50 pm
Друзья, доброго дня.
Подскажите, есть wi-fi розетка, хочу включать\выключать ее по расписанию.
При этом чтобы сообщала что операция выполнена.
Использую такой код в методе onNewMinute :

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

//расписание для розетки
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time')) && gg('switch_is.shedule_enable')=="1" && gg('switch_is.status')=="0") {
	sg("switch_is.status",1);
	say("Розетка включена по расписанию.");
  } elseif (!timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time')) && gg('switch_is.shedule_enable')=="1" && gg('switch_is.status')=="1") {
	say("Розетка выключена по расписанию.");
	sg("switch_is.status",0);
  }
Но возникает проблема, что в крайних точках start_time и stop_time срабатывание происходит неустойчиво, может выключиться или выключиться произвольно, уведомления вообще пишет когда захочется.
Если же в промежуточное время выключить розетку (во время когда должна быть включена), то она корректно стартует автоматически и отсылается уведомление о включении.
У меня подозрение что в условиях timeBetween и !timeBetween происходит пересечение в моменты времени start_time и stop_time
Подскажите, как этого избежать?
если подозреваете timeBetween, перепишите условие, чтобы это исключить

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

//расписание для розетки
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time'))) {
	//тут проверяйте свои статусы
  } else  {
       //тут проверяйте свои статусы
  }
mrcoolyok
Сообщения: 18
Зарегистрирован: Вс янв 19, 2020 9:11 am
Благодарил (а): 7 раз
Поблагодарили: 0

Re: Работа со временем, таймер включения\выключения.

Сообщение mrcoolyok » Ср июн 17, 2020 1:42 pm

tarasfrompir писал(а):
Ср июн 17, 2020 1:08 pm
может проще посмотреть в эту сторону ?
viewtopic.php?f=5&t=2977&hilit=%D1%80%D ... 0%B8%D0%B5
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Спасибо, перенесу в крон, хорошая идея, не знал как еще стандартно сделать выполнение раз в минуту.
xor писал(а):
Ср июн 17, 2020 1:16 pm
если подозреваете timeBetween, перепишите условие, чтобы это исключить

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

//расписание для розетки
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time'))) {
	//тут проверяйте свои статусы
  } else  {
       //тут проверяйте свои статусы
  }
Если я просто сделаю else, то в момент, когда timeBetween() вернет false, скрипт выполнит sg("switch_is.status",0);
а потом каждую минуту будет повторять.
Мне же нужно чтобы он включал и выключал разово, то есть перед выполнением проверял текущий статус, если он уже выключен, то ничего не делать, потому и использовал elseif.
Может быть можно как то из switch_is.start_time вычесть минуту, а к switch_is.stop_time прибавить минуту? Я не смог найти такой функции или примера.
Я бы воткнул это во второе условие и проблема бы была решена.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 632 раза

Re: Работа со временем, таймер включения\выключения.

Сообщение xor » Ср июн 17, 2020 1:56 pm

mrcoolyok писал(а):
Ср июн 17, 2020 1:42 pm
tarasfrompir писал(а):
Ср июн 17, 2020 1:08 pm
может проще посмотреть в эту сторону ?
viewtopic.php?f=5&t=2977&hilit=%D1%80%D ... 0%B8%D0%B5
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Спасибо, перенесу в крон, хорошая идея, не знал как еще стандартно сделать выполнение раз в минуту.
xor писал(а):
Ср июн 17, 2020 1:16 pm
если подозреваете timeBetween, перепишите условие, чтобы это исключить

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

//расписание для розетки
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time'))) {
	//тут проверяйте свои статусы
  } else  {
       //тут проверяйте свои статусы
  }
Если я просто сделаю else, то в момент, когда timeBetween() вернет false, скрипт выполнит sg("switch_is.status",0);
а потом каждую минуту будет повторять.
Мне же нужно чтобы он включал и выключал разово, то есть перед выполнением проверял текущий статус, если он уже выключен, то ничего не делать, потому и использовал elseif.
Может быть можно как то из switch_is.start_time вычесть минуту, а к switch_is.stop_time прибавить минуту? Я не смог найти такой функции или примера.
Я бы воткнул это во второе условие и проблема бы была решена.
я не про то писал( я писал - как исключить из подозрения тайм бетвин
и shedule_enable можно за скобки вынести

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

if(gg('switch_is.shedule_enable')=="1") {
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time'))) {
	//тут проверяйте свои статусы
        if(gg('switch_is.status')=="0") {
           sg("switch_is.status",1);
	   say("Розетка включена по расписанию.");
        }
  } else  {
       //тут проверяйте свои статусы
       if(gg('switch_is.status')=="1"){
	sg("switch_is.status",0);
        say("Розетка выключена по расписанию.");
       }
  }
}
За это сообщение автора xor поблагодарил:
mrcoolyok (Ср июн 17, 2020 2:23 pm)
Рейтинг: 1.16%
mrcoolyok
Сообщения: 18
Зарегистрирован: Вс янв 19, 2020 9:11 am
Благодарил (а): 7 раз
Поблагодарили: 0

Re: Работа со временем, таймер включения\выключения.

Сообщение mrcoolyok » Ср июн 17, 2020 2:25 pm

xor писал(а):
Ср июн 17, 2020 1:56 pm
я не про то писал( я писал - как исключить из подозрения тайм бетвин
и shedule_enable можно за скобки вынести

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

if(gg('switch_is.shedule_enable')=="1") {
if (timeBetween(gg('switch_is.start_time'),gg('switch_is.stop_time'))) {
	//тут проверяйте свои статусы
        if(gg('switch_is.status')=="0") {
           sg("switch_is.status",1);
	   say("Розетка включена по расписанию.");
        }
  } else  {
       //тут проверяйте свои статусы
       if(gg('switch_is.status')=="1"){
	sg("switch_is.status",0);
        say("Розетка выключена по расписанию.");
       }
  }
}
Понял вас, просто сделать вложенные if, отличная идея. Спасибо вам!
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 816 раз

Re: Работа со временем, таймер включения\выключения.

Сообщение tarasfrompir » Ср июн 17, 2020 3:19 pm

tarasfrompir писал(а):
Ср июн 17, 2020 1:08 pm
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Дело в том что я не даром это писал ....
Все дело в том что у ХОРа работает метод онневминут как надо - а у вас нет...
ПОЭТОМУ ОНО МОЖЕТ И ЧЕРЕЗ 20 МИНУТ ИСПОЛНИТСЯ ..... Вы точности в работе по времени - НЕ ПОЛУЧИТЕ.......
За это сообщение автора tarasfrompir поблагодарил:
mrcoolyok (Ср июн 17, 2020 3:55 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
mrcoolyok
Сообщения: 18
Зарегистрирован: Вс янв 19, 2020 9:11 am
Благодарил (а): 7 раз
Поблагодарили: 0

Re: Работа со временем, таймер включения\выключения.

Сообщение mrcoolyok » Ср июн 17, 2020 3:55 pm

tarasfrompir писал(а):
Ср июн 17, 2020 3:19 pm
tarasfrompir писал(а):
Ср июн 17, 2020 1:08 pm
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Дело в том что я не даром это писал ....
Все дело в том что у ХОРа работает метод онневминут как надо - а у вас нет...
ПОЭТОМУ ОНО МОЖЕТ И ЧЕРЕЗ 20 МИНУТ ИСПОЛНИТСЯ ..... Вы точности в работе по времени - НЕ ПОЛУЧИТЕ.......
Уберу в крон, спасибо
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 632 раза

Re: Работа со временем, таймер включения\выключения.

Сообщение xor » Ср июн 17, 2020 4:55 pm

tarasfrompir писал(а):
Ср июн 17, 2020 3:19 pm
tarasfrompir писал(а):
Ср июн 17, 2020 1:08 pm
И еще НЕ НАДО ЗАГРУЖАТЬ метод онневминут разной ерундой... От этого только мдм плохо будет - ибо оно работает НЕ СОВСЕМ ПРАВИЛЬНО
Дело в том что я не даром это писал ....
Все дело в том что у ХОРа работает метод онневминут как надо - а у вас нет...
ПОЭТОМУ ОНО МОЖЕТ И ЧЕРЕЗ 20 МИНУТ ИСПОЛНИТСЯ ..... Вы точности в работе по времени - НЕ ПОЛУЧИТЕ.......
а что? и там поломали? :shock:
я извиняюсь, не знал(
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 816 раз

Re: Работа со временем, таймер включения\выключения.

Сообщение tarasfrompir » Ср июн 17, 2020 5:01 pm

xor писал(а):
Ср июн 17, 2020 4:55 pm
а что? и там поломали? :shock:
я извиняюсь, не знал(
:lol: :lol: :lol: а х ты ж паразит... :lol: :lol: :lol: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
сам жеж тесты заставлял делать..... :oops: :oops: :oops: :oops:
Во память - вся в Алиску ушла..... :D :D :D
Спасибо нам ПОМОЖЕТ..!
Ответить