Релиз IntraHouse V5



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

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

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



  • Добрый вечер!
    При дальнейшем ковырянии выявил, что вот такая конструкция не передает сообщения в Telegram:
    this.info("telegram","u0002", "Был план получить снимок с камеры " + this.cam_id + ", но увы" );
    Хотя в отладчике все нормально. В Pushnotification передача выполняется.

    110a01d8-200a-4f02-98a2-29c50f329a11-image.png



  • @Lost, уберите "не" из конструкции if (result.filename)



  • @Alex_Jet Это сделано специально, чтобы отправляла ь не картинка, а сообщение после else.



  • Это сообщение удалено!


  • Странно, ничего не делал и pushnotification заработал


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