Страница 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
Спасибо, перенесу в крон, хорошая идея, не знал как еще стандартно сделать выполнение раз в минуту.
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
Спасибо, перенесу в крон, хорошая идея, не знал как еще стандартно сделать выполнение раз в минуту.
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 МИНУТ ИСПОЛНИТСЯ ..... Вы точности в работе по времени - НЕ ПОЛУЧИТЕ.......
а что? и там поломали?

я извиняюсь, не знал(
Re: Работа со временем, таймер включения\выключения.
Добавлено: Ср июн 17, 2020 5:01 pm
tarasfrompir