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

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

Добавлено: Ср июн 17, 2020 12:50 pm
mrcoolyok
Друзья, доброго дня.
Подскажите, есть 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
Подскажите, как этого избежать?

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

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

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

Добавлено: Ср июн 17, 2020 1:16 pm
xor
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  {
       //тут проверяйте свои статусы
  }

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

Добавлено: Ср июн 17, 2020 1:42 pm
mrcoolyok
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 прибавить минуту? Я не смог найти такой функции или примера.
Я бы воткнул это во второе условие и проблема бы была решена.

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

Добавлено: Ср июн 17, 2020 1:56 pm
xor
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("Розетка выключена по расписанию.");
       }
  }
}

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

Добавлено: Ср июн 17, 2020 2:25 pm
mrcoolyok
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, отличная идея. Спасибо вам!

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

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

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

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

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

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

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

Добавлено: Ср июн 17, 2020 5:01 pm
tarasfrompir
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