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



  • Подскажите пожалуйста.

    При выборе устройства в меню "параметры" элементов на мнемосхеме или виджете наблюдаю устройства "_UNIT_плагин", названные именами установленных плагинов.

    В списке устройств в структуре проекта их не видно.

    Что это за сущности, и как их можно использовать?



  • @gis:

    @Erik:

    у устройства в нижнем меню можно создать много состояний.

    Состояния привязать в граничным значениям.

    Подскажите, пожалуйста, по шагам как у устройства добавить новые состояния. У меня в нижнем меню только Стандарт и других нет. На какие кнопки надо нажимать чтобы добавить новые состояния? В свойствах устройства указал, "метод определения состояния" - "аналоговые значения - интервалы". И объясните, пожалуйста, что такое Погрешность при изменении состояния.

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

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

    На нем можно:

    изменить название состояния (4),

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

    Изменить иконку отображения состояния (6)

    И цвет иконки (7)

    При нажатии копки «копировать» (3) можно создать еще одно состояние актуатора, и настроить его необходимым образом.

    Удалить состояния по-умолчанию (включено и выключено) нельзя. Это как раз то лишнее свойство, которое будет на термометрах, но не будет использоваться. Его можно использовать, например, менять цвет иконки, или цифр отображения температуры в соответствии с температурой. Настроить нужное количество состояний, например с шагом 5 градусов от +5 до +30 будет 5 состояний с 5-ю разными цветами, и в зависимости от температуры индикатор будет менять цвет.

    После создания своих состояний нужно в свойствах актуатора (правое меню) на вкладке «дополнительно» «метод определения состояния» установить в «Аналоговое значение – интервалы».

    А цвет текста, рамки настраивается уже в виджете или мнемосхеме
    @Erik:

    При отображении устройства к состоянию привязывается и цвет фона, и цвет рамки, и цвет шрифта, и скругление углов.

    Я термометр уличный сделал на 8 состояний. В нижнем меню устройства да, только цвет картинок.

    Но я отображение поставил "значение с единицей измерения", и для каждого состояния настроил разные цвета текста, рамки и фона.

    Можно и форму менять. Сделать состоянию "0" скругление углов 50.

    Состояниям "-10", "-20", "-30" сделать скругление 0

    Состояниям "+10", "+20", "+30" - скругление 100.

    Будет при отрицательных температурах квадратный термометр, при положительных - круглый.



  • @Erik:

    Подскажите пожалуйста.

    При выборе устройства в меню "параметры" элементов на мнемосхеме или виджете наблюдаю устройства "_UNIT_плагин", названные именами установленных плагинов.

    В списке устройств в структуре проекта их не видно.

    Что это за сущности, и как их можно использовать?

    Это виртуальные датчики - индикаторы плагинов - создаются автоматически при подключении плагина.

    Работает как обычный датчик, можно вывести на индикацию, использовать в сценариях.

    Состояние 0 - плагин остановлен,

    Состояние 1 - плагин работает

    Свойство err - ошибка плагина - эту возможность должен поддерживать плагин, не везде пока реализовано.



  • @intrapro:

    Это виртуальные датчики - индикаторы плагинов - создаются автоматически при подключении плагина.

    Работает как обычный датчик, можно вывести на индикацию, использовать в сценариях.

    Состояние 0 - плагин остановлен,

    Состояние 1 - плагин работает

    Свойство err - ошибка плагина - эту возможность должен поддерживать плагин, не везде пока реализовано.

    Состояния

    "Not activated"

    "Stopped"

    "Run"

    правое меню у них обескураживает.



  • @Erik:

    правое меню у них обескураживает.

    Да, неаккуратно 😞

    Этот функционал в процессе доработки, так сказать, "недокументированные возможности"

    Пока лучше "Запретить боковое меню устройства в пользовательском интерфейсе"

    Мы используем в проектах в основном для создания полосы индикаторов (строки состояния)



  • А откуда у значений счетчиков берутся такие длинные хвосты после запятой? В настройках устройства стоит всегда 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:

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

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


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