Релиз IntraHouse V5
-
@intrapro Спасибо! Заработало. А вот функция boot() в настоящее время не работает?
-
Обнаружил еще косяк, связанный с работой модуля MegaD-2RW. Если релюхи этого модуля переключить минуя сервер, то при выполнении опроса модуля командой /%pwd%/?pt=%adr%&cmd=get изменение состояния в системе не происходит. Для примера, релюхи были изначально выключены. Потом я их напрямую включил. После опроса состояние устройств, привязанных к этим каналам, в системе не изменилось. В плагине значение в канале отображается как отключено. По факту реле включено.
06.02 17:17:50.484 megad2:
06.02 17:17:50.484 megad2: localhost => 192.168.1.15 HTTP GET /sec/?pt=43&cmd=get
06.02 17:17:50.529 megad2: localhost <= 192.168.1.15 response: statusCode=200 contentType = text/html
06.02 17:17:50.531 megad2: body: 225758000000:ON/ON
06.02 17:18:10.717 megad2:
06.02 17:18:10.718 megad2: localhost => 192.168.1.15 HTTP GET /sec/?pt=43&cmd=get
06.02 17:18:10.763 megad2: localhost <= 192.168.1.15 response: statusCode=200 contentType = text/html
06.02 17:18:10.765 megad2: body: 225758000000:ON/ON
06.02 17:18:30.946 megad2:
06.02 17:18:30.947 megad2: localhost => 192.168.1.15 HTTP GET /sec/?pt=43&cmd=get
06.02 17:18:30.991 megad2: localhost <= 192.168.1.15 response: statusCode=200 contentType = text/html
06.02 17:18:30.993 megad2: body: 225758000000:ON/ON
-
@Lost, попробуйте использовать cmd=list
/%pwd%/?pt=43&cmd=list
-
@intrapro Заработало. Спасибо за подсказку!
-
Пользователь @intrapro написал в Релиз IntraHouse V5:
@Lost, да, Вы правы. Такой вариант запуска startTimer (второй аргумент не интервал, а временная точка) пока не работает. Добавим в ближайшем релизе.
Всем удачи и больше светлых полос в Новом тигровом году!Хотел бы узнать, этот момент в настоящее время поправлен?
-
@Lost, да. должно работать
-
Похоже не работает. Ваш пример сценария виртуального датчика темноты после запуска на вкладке "Описание" имеет состояние "Активен", а в окне на вкладке "Редактор" состояние Not active. Если же в таймерах этого сценария вместо временных точек указать интервал то сценарий нормально отрабатывает. На вкладке "Редактор" отображаются сообщения, например Active timer "sunrise" on 10.02 07:47:14 Active timer "sunset" on 10.02 17:20:43
-
Пользователь @Lost написал в Релиз IntraHouse V5:
Похоже не работает. Ваш пример сценария виртуального датчика темноты после запуска на вкладке "Описание" имеет состояние "Активен", а в окне на вкладке "Редактор" состояние Not active. Если же в таймерах этого сценария вместо временных точек указать интервал то сценарий нормально отрабатывает. На вкладке "Редактор" отображаются сообщения, например Active timer "sunrise" on 10.02 07:47:14 Active timer "sunset" on 10.02 17:20:43
Проверили, такая конструкция отрабатывает штатно:
this.startTimer('sunrise', this.getSysTime('sunrise','tomorrow'), 'onSunrise');
Результат в отладчике:
10.02 10:38:20.544 ---Started 10.02 10:38:20.555 getSysTime sunrise tomorrow = 11.02 07:27:55.983 (1644553675983) 10.02 10:38:20.555 Start timer sunrise on time 11.02 07:27:55 (1644553675983)
Какой код вы используете, из V4?
-
@intrapro У меня сообщения такие же. Но как я уже писал, после перехода на вкладку "Описание" и обратно в "редактор" внизу в окне пишет, что сценарий не активен. На вкладке описание он активен. И по факту отработок утром и вечером нет
-
Вечером смогу прислать скрин и сообщения отладчика.
-
Код брал из v4
-
Вот первый вариант сценария:
/**
- @desc 0 - светло, 1 - темно
- Запускается на старте сервера
- @version 5
*/
const darkness = Device("DDark_001");
const script = {
time:0,
// boot() {
// return true;
// },start() { let now = Date.now(); let sunrise = this.getSysTime('sunrise','today'); let sunset = this.getSysTime('sunset','today'); let val = (now < sunrise || now > sunset) ? 1 : 0; darkness.assign('state', val); let nextrise = (now < sunrise) ? sunrise : this.getSysTime('sunrise','tomorrow'); this.startTimer('sunrise', nextrise, 'onSunrise'); let nextset = (now < sunset) ? sunset : this.getSysTime('sunset','tomorrow'); this.startTimer('sunset', nextset, 'onSunset'); },
//Восход
onSunrise() {
ну и дальше код.После запуска сценария в отладчике видим:
10.02 19:47:28.925 ---Started
10.02 19:47:28.926 getSysTime sunrise today = 10.02 07:47:14.968 (1644468434968)
10.02 19:47:28.926 getSysTime sunset today = 10.02 17:20:43.979 (1644502843979)
10.02 19:47:28.926 DDark_001 device common function: assign
10.02 19:47:28.927 assign[ 'state', 1, 'scen003' ]
10.02 19:47:28.927 getSysTime sunrise tomorrow = 11.02 07:45:21.239 (1644554721239)
10.02 19:47:28.927 Start timer sunrise on time 11.02 07:45:21 (1644554721239)
10.02 19:47:28.927 getSysTime sunset tomorrow = 11.02 17:22:40.361 (1644589360361)
10.02 19:47:28.927 Start timer sunset on time 11.02 17:22:40 (1644589360361)Переходим на вкладку "Описание"
Сценарий активен. Переходим на вкладку "Редактор".
Видим, что сценарий не работает. И по факту утром и вечером состояние датчика не меняется.
А вот тут показано, что вроде как ошибка есть, но нет времени останова сценария
-
А теперь вот такой вариант:
/**
- @desc 0 - светло, 1 - темно
- Запускается на старте сервера
- @version 5
*/
const darkness = Device("DDark_001");
const script = {
time:0,
// boot() {
// return true;
// },start() { let now = Date.now(); let sunrise = this.getSysTime('sunrise','today'); let sunset = this.getSysTime('sunset','today'); let val = (now < sunrise || now > sunset) ? 1 : 0; darkness.assign('state', val); let nextrise = (now < sunrise) ? sunrise : this.getSysTime('sunrise','tomorrow'); this.startTimer('sunrise', (nextrise-now)/1000, 'onSunrise'); let nextset = (now < sunset) ? sunset : this.getSysTime('sunset','tomorrow'); this.startTimer('sunset', (nextset-now)/1000, 'onSunset'); },
//Восход
onSunrise() {Отладчик:
10.02 20:00:07.496 ---Started
10.02 20:00:07.498 getSysTime sunrise today = 10.02 07:47:14.968 (1644468434968)
10.02 20:00:07.498 getSysTime sunset today = 10.02 17:20:43.979 (1644502843979)
10.02 20:00:07.499 DDark_001 device common function: assign
10.02 20:00:07.515 assign[ 'state', 1, 'scen003' ]
10.02 20:00:07.522 getSysTime sunrise tomorrow = 11.02 07:45:21.239 (1644554721239)
10.02 20:00:07.522 Start timer sunrise for 42313.743 sec
10.02 20:00:07.523 getSysTime sunset tomorrow = 11.02 17:22:40.361 (1644589360361)
10.02 20:00:07.524 Start timer sunset for 76952.865 secВкладка "Описание"
Вкладка "Редактор"
Вкладка "Сценарии"
Тут теперь ошибок нет, но сценарий типа остановлен. Хотя по факту в этом случае все работает.
-
И еще. Если в последнем варианте сценария сделать какие либо правки и сохранить их, то после следующего запуска он сразу останавливается. Запустить его удается только после перезагрузки сервера
10.02 20:03:54.197 scen003 Active:
Active timer "sunrise" on 11.02 07:45:21
Active timer "sunset" on 11.02 17:22:40
10.02 20:05:38.958 Exit
10.02 20:05:38.959 ---Stopped---
10.02 20:05:38.959 ---Stopped---
10.02 20:05:44.721 ---Started
10.02 20:05:44.721 getSysTime sunrise today = 10.02 07:47:14.968 (1644468434968)
10.02 20:05:44.721 getSysTime sunset today = 10.02 17:20:43.979 (1644502843979)
10.02 20:05:44.721 DDark_001 device common function: assign
10.02 20:05:44.722 assign[ 'state', 1, 'scen003' ]
10.02 20:05:44.722 getSysTime sunrise tomorrow = 11.02 07:45:21.239 (1644554721239)
10.02 20:05:44.722 Start timer sunrise for 41976.518 sec
10.02 20:05:44.722 getSysTime sunset tomorrow = 11.02 17:22:40.361 (1644589360361)
10.02 20:05:44.723 Start timer sunset for 76615.64 sec
10.02 20:05:44.723 ---Stopped---Ну как то так. Уж не знаю я что не верно делаю или косяк. Подскажите.
-
@Lost, спасибо за подробный анализ проблемы!
Будем разбираться
-
И функция boot() похоже не работает. По крайней мере этот сценарий не запускается при перезегрузке сервера. Пока закоментарил.
-
Пользователь @Lost написал в Релиз IntraHouse V5:
И функция boot() похоже не работает. По крайней мере этот сценарий не запускается при перезагрузке сервера. Пока закоментарил.
Вышла версия 5.8.12-beta. В ней работает функция boot(), синтаксис как в V4.
Проблемы с таймерами также исправлены. Еще раз спасибо за баг-репорт
-
@intrapro Спасибо. Будем дальше изучать систему.
-
Все вроде работает. Заметил, что после перезагрузки сервера и запуска сценария функцией boot() на вкладке "Выполнение" папки "Сценарии" вот такая картина:
По факту сценарий активен, а тут показано, что он остановился.
-
Пользователь @Lost написал в Релиз IntraHouse V5:
Все вроде работает....
По факту сценарий активен, а тут показано, что он остановился.Да, это вы верно заметили, здесь информация не совсем верно представлена.
Показывает, сколько длится синхронная часть (последняя выполненная функция, грубо говоря). Контроль зацикливания