Вопросы по работе системы



  • А откуда у значений счетчиков берутся такие длинные хвосты после запятой? В настройках устройства стоит всегда 2-3 цифры после запятой, счетчик импульсов тоже прибавляет 1, 0,1, 0,01 или 0,001 соответственно отображается на мнемосхеме это нормально, но вот при обработке в скрипте всегда приходится округлять или обрезать. Может есть какое-то решение?
    afterdotdigits.JPG



  • @Erik:

    После создания и сохранения актуатора при всех закрытых боковых меню нажимаем кнопку открытия нижнего меню, и видим окно с состояниями актуатора (или выбираем отображение состояний в меню 1).

    Erik, большое спасибо за подробные пояснения! Проблема была с открытием нижнего меню, сейчас разобрался где эта кнопка.



  • @intrapro:

    Дополнительные свойства устройству могут добавлять сценарии и плагины.

    А можно где-нибудь опубликовать типы дополнительный свойств (помню, что уже рассказывали, но 30-ти минутный поиск ни к чему не привел)? Требуется выводить на вкладке "Параметры" плагинов их состояние. Состояние как правило - это строка.

    И еще интересный вопрос - можно ли таким же образом сделать слайдер, при движении которого параметр будет улетать в железку? Суть - голосовой терминал, который интегрирован в iH посредством плагина. Вся оперативная настройка голосового терминала заключается в регулировке его громкости. Конечно можно было бы еще из этого же меню записывать голосовые модели и т.д., но мне кажется, что это должно делаться из веб-интерфейса терминала (пытаюсь продавить данный момент, пока разработчик реализовал только вебку для оперативного изменения кучи настроек).



  • @Alex_Jet:

    @intrapro:

    Дополнительные свойства устройству могут добавлять сценарии и плагины.

    А можно где-нибудь опубликовать типы дополнительный свойств (помню, что уже рассказывали, но 30-ти минутный поиск ни к чему не привел)? Требуется выводить на вкладке "Параметры" плагинов их состояние. Состояние как правило - это строка.

    И еще интересный вопрос - можно ли таким же образом сделать слайдер, при движении которого параметр будет улетать в железку? Суть - голосовой терминал, который интегрирован в iH посредством плагина. Вся оперативная настройка голосового терминала заключается в регулировке его громкости. Конечно можно было бы еще из этого же меню записывать голосовые модели и т.д., но мне кажется, что это должно делаться из веб-интерфейса терминала (пытаюсь продавить данный момент, пока разработчик реализовал только вебку для оперативного изменения кучи настроек).

    А с помощью get|post нельзя туда пульять изменения? Привязать уставку датчика и при изменении уставки отправлять в терминал запрос



  • @homa:

    А с помощью get|post нельзя туда пульять изменения? Привязать уставку датчика и при изменении уставки отправлять в терминал запрос

    Создатель терминала сейчас сделал полноценный двусторонний обмен данными по соккетам с рукопожатием в том числе, но для этого надо пилить плагин, который я сделал для iH - ни времени, ни достаточных знаний у меня нет. Однако поскольку терминал делался изначально под МЖД, то он кидает в сервер get по http, а вот обратно есть возможность только открыть соккет на 7999 порту (сейчас плагин так и работает).

    Однако тут смысл в том, что не хочется плодить какие-то эфимерные виртуальные устройства, а сделать все используя устройство самого плагина - в моем случае "_UNIT_voiceterminal1". Сейчас его параметры отображаются вот так:
    VoiceTerminal_Settings.png
    Я думаю, что используя "общие принципы iH" можно сделать что я хочу. Только вопрос - как?



  • @Alex_Jet:

    Однако тут смысл в том, что не хочется плодить какие-то эфимерные виртуальные устройства, а сделать все используя устройство самого плагина - в моем случае "_UNIT_voiceterminal1". Сейчас его параметры отображаются вот так:

    VoiceTerminal_Settings.png

    Я думаю, что используя "общие принципы iH" можно сделать что я хочу. Только вопрос - как?

    Очень изобретательно у Вас получилось 🙂

    Интерактивный параметр тоже можно сделать через сценарий и команду pluginCommand(). Например, так:

    • Добавить на уровне сценария параметр
    {"name":"setvolume", "note":"Установить громкость", "type":"number", "val":50}
    
    
    • В сценарии, если громкость изменили - отправить команду плагину
    if (this.isChanged(unit, 'setvolume')) {
    	this.pluginCommand({unit:'voiceterminal1', command:{prop:'volume', value:unit.getParam('setvolume')}});
    }
    
    
    
    • плагин получит сообщение: {type:'command', command:…..все что прислали}

    Он должен реализовать разбор command и выполнение

    По типам параметров в сценарии - пока реализовано только три типа для ввода: number, cb (checkbox) и time (для ввода временных интервалов). Любой другой тип, включая string, выводится как readOnly string.

    Тип слайдер пока не реализован 😞



  • @intrapro:

    Очень изобретательно у Вас получилось 🙂

    Интерактивный параметр тоже можно сделать через сценарий и команду pluginCommand(). Например, так:

    • Добавить на уровне сценария параметр
    > {"name":"setvolume", "note":"Установить громкость", "type":"number", "val":50}
    > 
    
    • В сценарии, если громкость изменили - отправить команду плагину
    > if (this.isChanged(unit, 'setvolume')) {
    > 	this.pluginCommand({unit:'voiceterminal1', command:{prop:'volume', value:unit.getParam('setvolume')}});
    > }
    > 
    > 
    

    Не понимаю в какой момент setvolume меняется - при изменении значения или нажатия кнопки? Сейчас подобную структуру вставил в start, но в логе при изменении значения setvolume ничего подобного нет. Проверка на изменение происходит только при запуске скрипта внешним запросом (плагином):

    26.02 15:58:55.737 do _UNIT_voiceterminal1 uptime 69:41:28
    26.02 15:58:55.738 do _UNIT_voiceterminal1 status stop_record
    26.02 15:58:55.739 isChanged(_UNIT_voiceterminal1,set_volume)=false
    26.02 15:58:55.739 isChanged(_UNIT_voiceterminal2,set_volume)=false
    
    

    Наверное, необходимо использовать startOnChange(…) чтобы скрипт запустился и отработал?



  • @Alex_Jet:

    Наверное, необходимо использовать startOnChange(…) чтобы скрипт запустился и отработал?

    Да, конечно.



  • @intrapro:

    @Alex_Jet:

    Наверное, необходимо использовать startOnChange(…) чтобы скрипт запустился и отработал?

    Да, конечно.

    А можно поподробнее как? Поскольку все что я пробовал при сохранении ругалось на не верные аргументы 😞



  • @Alex_Jet:

    Не понимаю в какой момент setvolume меняется - при изменении значения или нажатия кнопки? Сейчас подобную структуру вставил в start, но в логе при изменении значения setvolume ничего подобного нет. Проверка на изменение происходит только при запуске скрипта внешним запросом (плагином):

    Свойство (уставка) отправляется на сервер, когда нажимаете галочку.

    При этом возникает событие устройства, свойство которого изменилось.

    @Alex_Jet:

    А можно поподробнее как? Поскольку все что я пробовал при сохранении ругалось на не верные аргументы 😞

    У Вас сценарий, который добавляет свойства индикатору unit, какие действия выполняет?

    Как обычно, есть минимум три варианта 🙂

    1. Добавить в этот же сценарий триггер: startOnChange(unit)

    и действие в функцию start()

    if (this.isChanged(unit, 'setvolume')) {
    	this.pluginCommand({unit:'voiceterminal1', command:{prop:'volume', value:unit.getParam('setvolume')}});
    }
    
    

    Действие будет выполняться, если сценарий запускается при изменении свойства setvolume

    2. Можно сделать отдельный сценарий - только управление громкостью, так как свойство можно объявить в одном сценарии, а использовать в другом

     const unit = Device("_UNIT_voiceterminal1");
     startOnChange(unit);
       script({
          start() {
              if (this.isChanged(unit, 'setvolume')) {
    	    this.pluginCommand({unit:'voiceterminal1', command:{prop:'volume', value:unit.getParam('setvolume')}});
             }
         }
      })
    
    
    

    3. Можно и объявление свойства setvolume перенести в сценарий по 2 варианту, так как можно объявлять разные свойства устройства в разных сценариях, желательно конечно, чтобы имена свойств не совпадали.



  • @intrapro:

    Свойство (уставка) отправляется на сервер, когда нажимаете галочку.

    При этом возникает событие устройства, свойство которого изменилось.

    Спасибо за разъяснения! Все что надо получилось. Жаль, что информация в боковом меню не обновляется онлайн, а только при каждом новом вызове…

    А еще просветите - от startOnChange можно как-то получить что конкретно изменилось? Сейчас сделал обработку событий "вручную":

          //Проверка с какого устройства поступила команда
          if(this.isChanged(dev1, "set_volume")) {
            device = dev1;
          }
          else if(this.isChanged(dev2, "set_volume")) {
            device = dev2;
          }
    
          //Установка громкости нужного терминала
          this.SetVolume(device);
    
    

    Ну и функция, которая дает команду плагину:

    SetVolume(dev) {
        let unit = dev.id.replace('_UNIT_', '');
        let command = dev.getParam('set_volume');
        this.pluginCommand({unit: unit, command:"volume:" +command});
      }
    
    


  • @Alex_Jet:

    Спасибо за разъяснения! Все что надо получилось. Жаль, что информация в боковом меню не обновляется онлайн, а только при каждом новом вызове…

    Здорово, что все получилось!

    @Alex_Jet:

    А еще просветите - от startOnChange можно как-то получить что конкретно изменилось? Сейчас сделал обработку событий "вручную":

    Да, это логично - получить объект, в котором содержатся данные, которые привели к запуску сценария .

    Добавим



  • @intrapro:

    Да, это логично - получить объект, в котором содержатся данные, которые привели к запуску сценария .

    Добавим

    Да, это очень логично! Причем в отладчике сценария уже сейчас пишется что именно изменилось, только это сейчас не забрать… Пример, проверки на изменение - if(this.isChanged(dev1)), в отладчике получаем вот это:

    28.02 22:19:21.119 Started
    28.02 22:19:21.119 isChanged(_UNIT_voiceterminal1,dval)=false Changed: {"_UNIT_voiceterminal1":{"set_volume":90}}
    
    

    PS: подумайте над онлайн-обновлением данных в боковом меню устройства.

    Update1: Еще момент - управлять громкостью могу, вводя новые значения. А как можно из сценария поменять значение свойства?

    {"name":"set_volume", "note":"Громкость терминала", "type":"number", "val":50},
    
    

    Дело в том, что я могу сказать голосом терминалу "Алиса громкость 60" и он сделает громкость 60 и отправит об этом данные на сервер, но как это "записать" в val "set_volume"? Сейчас его val просто обнуляется…

    Update2: затупил немного… изменял val по сути на стринг (obj.volume+ "%"), поэтому значение обнулялось.



  • Еще раз про отображение.

    В хроме полосы.

    Начал перебирать браузеры, и в IE вообще так.

    Как правильно использовать часы?



  • Добрый день,

    @Erik:

    Еще раз про отображение.

    В хроме полосы.

    Попробуйте уменьшить виджет "Часы", возможно виджет налезает на другой и перекрывает полосу скролинга

    @Erik:

    Еще раз про отображение.

    Начал перебирать браузеры, и в IE вообще так.

    Спасибо за помощь 😉

    @Erik:

    Как правильно использовать часы?

    Данный виджет несет только информационный характер, логическая часть в нем отсутствует



  • там нет ничего, что может его перекрывать.

    Часы в свои границы не помещаются, если использовать IE 🙂

    Вопрос про SVG.

    У стороннего SVG не совпадают каналы с ожиданиями IH. В результате ни цвет ни фон не меняются.

    Есть ли описание, что нужно IH от SVG?



  • @Erik:

    Часы в свои границы не помещаются, если использовать IE 🙂

    Поддерживаю! У меня и в хроме на некоторых разрешениях не помещаются - сдвигаются в сторону.



  • @Erik:

    там нет ничего, что может его перекрывать.

    Часы в свои границы не помещаются, если использовать IE 🙂

    Вопрос про SVG.

    У стороннего SVG не совпадают каналы с ожиданиями IH. В результате ни цвет ни фон не меняются.

    Есть ли описание, что нужно IH от SVG?

    Добрый день, жестких стандартов нет, в большинстве случаев проблем не должно быть, пришлите Ваш файл и мы сообщим почему возникает проблема





  • @Erik:

    https://yadi.sk/d/gx340JbOGgebEQ

    файл svg

    Добрый день, файл состоит из линий и графических элементов (png). Лини замкнутые и их можно залить, но у них уставлена принудительная заливка слоя в белый цвет, отключите её и все заработает. Графические элементы залить цветом не получиться


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