Релиз IntraHouse V5



  • @intrapro Ок. Ждем



  • @intrapro А то, что при изменении параметров в расширениях плагина MegaD они после сохранения не применяются поправите? Сейчас нужно перезапускать плагин MegaD.



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

    Господа разработчики, как все таки выбрать сценарий для запуска в расширениях плагина MegaD?

    Выпущена версия плагина megad v5.0.10, список сценариев берется (мультисценарии не включаются).
    Для сработки сценария нужно также обновить систему. Сейчас доступна v5.8.11-beta, стабильный релиз выпустим на следующей неделе.
    В beta версию в тестовом режиме включен новый метод сценария showDialog для вызова диалога на экран конкретного пользователя (группы):

    Диалоговое окно будет выведено на все терминалы, на которых в данный момент запущен пользовательский интерфейс с логином 'admin'. Первый аргумент 'di0012' - ID диалога:

     this.showDialog('di0012','admin');  
    

    Если диалог создан для использования с "Любым устройством", нужно передать в качестве контекста внутренний идентификатор устройства:

     this.showDialog('di0013','admin', {contextId: 'd0095'});  
    

    А то, что при изменении параметров в расширениях плагина MegaD они после сохранения не применяются поправите? Сейчас нужно перезапускать плагин MegaD.

    Это пока к сожалению не сделано. Плагин MegaD был выпущен одним из первых и не использует новое API плагинов. Планируется разработать новый плагин MegaD с механизмом сканирования и всеми возможностями нового API. По срокам сказать не могу.



  • @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.
    Проблемы с таймерами также исправлены. Еще раз спасибо за баг-репорт 🙂


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