Релиз 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)

    Переходим на вкладку "Описание"

    11b88d4c-5c88-42b5-add2-71871cc894b3-image.png

    Сценарий активен. Переходим на вкладку "Редактор".

    941b2dc7-4ff0-45f4-a270-df1df1b37d12-image.png

    Видим, что сценарий не работает. И по факту утром и вечером состояние датчика не меняется.
    А вот тут показано, что вроде как ошибка есть, но нет времени останова сценария

    e36219c6-ce68-404a-81d2-2f29d4a4658f-image.png



  • А теперь вот такой вариант:

    /**

    • @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

    Вкладка "Описание"

    5325851a-1110-46c6-a0c9-46229faf54cb-image.png

    Вкладка "Редактор"

    5644ec1d-8e4a-4561-8fc0-77d3c7bc9ca6-image.png

    Вкладка "Сценарии"

    39736e99-03fd-44b9-bec0-597e465cb082-image.png

    Тут теперь ошибок нет, но сценарий типа остановлен. Хотя по факту в этом случае все работает.



  • И еще. Если в последнем варианте сценария сделать какие либо правки и сохранить их, то после следующего запуска он сразу останавливается. Запустить его удается только после перезагрузки сервера

    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() на вкладке "Выполнение" папки "Сценарии" вот такая картина:

    425a908a-c7bb-499b-b706-288f163e432c-image.png

    По факту сценарий активен, а тут показано, что он остановился.



  • Пользователь @Lost написал в Релиз IntraHouse V5:

    Все вроде работает....
    По факту сценарий активен, а тут показано, что он остановился.

    Да, это вы верно заметили, здесь информация не совсем верно представлена.
    Показывает, сколько длится синхронная часть (последняя выполненная функция, грубо говоря). Контроль зацикливания


Авторизуйтесь, чтобы ответить