Вопросы по работе системы
-
Я так понимаю само реальное значение температуры/влажности не будет отображаться?
Мне бы хотелось так - если холодно, то цифры индикатора были бы синие. Жарко - оранжевые. Предельные - красные. И т.д.
-
Я так понимаю само реальное значение температуры/влажности не будет отображаться?
Почему? Значение никуда не исчезает
Если вы используете шаблон представления - Иконка или значение в виде теста - видите значение.
Можете рядом поставить то же устройство, но использовать шаблон Текстовое представление состояния - тогда будет состояние.
@Alex_Jet:Мне бы хотелось так - если холодно, то цифры индикатора были бы синие. Жарко - оранжевые. Предельные - красные. И т.д.
Да, конечно можно. Нужно настроить детали визуализации (в вашем случае Цвет индикатора) для каждого состояния непосредственно на мнемосхеме.
ВАЖНО!! Если меняете количество состояний устройства, нужно это устройство поставить на мнемосхему заново!
-
Подскажите пожалуйста.
При выборе устройства в меню "параметры" элементов на мнемосхеме или виджете наблюдаю устройства "_UNIT_плагин", названные именами установленных плагинов.
В списке устройств в структуре проекта их не видно.
Что это за сущности, и как их можно использовать?
-
@gis:
у устройства в нижнем меню можно создать много состояний.
Состояния привязать в граничным значениям.
Подскажите, пожалуйста, по шагам как у устройства добавить новые состояния. У меня в нижнем меню только Стандарт и других нет. На какие кнопки надо нажимать чтобы добавить новые состояния? В свойствах устройства указал, "метод определения состояния" - "аналоговые значения - интервалы". И объясните, пожалуйста, что такое Погрешность при изменении состояния.
После создания и сохранения актуатора при всех закрытых боковых меню нажимаем кнопку открытия нижнего меню, и видим окно с состояниями актуатора (или выбираем отображение состояний в меню 1).
Выделяем и дважды кликаем (или нажимаем кнопку свойства справа в шапке нижнего меню) название состояния (2), открывается правое боковое меню.
На нем можно:
изменить название состояния (4),
установить верхнюю границу состояния (5) (отображение актуатора на экране может быть разным для разных состояний, и отображения принимают соответствующий вид при нахождении значения актуатора в границах, указанных в описании состояний в этом меню).
Изменить иконку отображения состояния (6)
И цвет иконки (7)
При нажатии копки «копировать» (3) можно создать еще одно состояние актуатора, и настроить его необходимым образом.
Удалить состояния по-умолчанию (включено и выключено) нельзя. Это как раз то лишнее свойство, которое будет на термометрах, но не будет использоваться. Его можно использовать, например, менять цвет иконки, или цифр отображения температуры в соответствии с температурой. Настроить нужное количество состояний, например с шагом 5 градусов от +5 до +30 будет 5 состояний с 5-ю разными цветами, и в зависимости от температуры индикатор будет менять цвет.
После создания своих состояний нужно в свойствах актуатора (правое меню) на вкладке «дополнительно» «метод определения состояния» установить в «Аналоговое значение – интервалы».
А цвет текста, рамки настраивается уже в виджете или мнемосхеме
@Erik:При отображении устройства к состоянию привязывается и цвет фона, и цвет рамки, и цвет шрифта, и скругление углов.
Я термометр уличный сделал на 8 состояний. В нижнем меню устройства да, только цвет картинок.
Но я отображение поставил "значение с единицей измерения", и для каждого состояния настроил разные цвета текста, рамки и фона.
Можно и форму менять. Сделать состоянию "0" скругление углов 50.
Состояниям "-10", "-20", "-30" сделать скругление 0
Состояниям "+10", "+20", "+30" - скругление 100.
Будет при отрицательных температурах квадратный термометр, при положительных - круглый.
-
Подскажите пожалуйста.
При выборе устройства в меню "параметры" элементов на мнемосхеме или виджете наблюдаю устройства "_UNIT_плагин", названные именами установленных плагинов.
В списке устройств в структуре проекта их не видно.
Что это за сущности, и как их можно использовать?
Это виртуальные датчики - индикаторы плагинов - создаются автоматически при подключении плагина.
Работает как обычный датчик, можно вывести на индикацию, использовать в сценариях.
Состояние 0 - плагин остановлен,
Состояние 1 - плагин работает
Свойство err - ошибка плагина - эту возможность должен поддерживать плагин, не везде пока реализовано.
-
Это виртуальные датчики - индикаторы плагинов - создаются автоматически при подключении плагина.
Работает как обычный датчик, можно вывести на индикацию, использовать в сценариях.
Состояние 0 - плагин остановлен,
Состояние 1 - плагин работает
Свойство err - ошибка плагина - эту возможность должен поддерживать плагин, не везде пока реализовано.
Состояния
"Not activated"
"Stopped"
"Run"
правое меню у них обескураживает.
-
правое меню у них обескураживает.
Да, неаккуратно
Этот функционал в процессе доработки, так сказать, "недокументированные возможности"
Пока лучше "Запретить боковое меню устройства в пользовательском интерфейсе"
Мы используем в проектах в основном для создания полосы индикаторов (строки состояния)
-
А откуда у значений счетчиков берутся такие длинные хвосты после запятой? В настройках устройства стоит всегда 2-3 цифры после запятой, счетчик импульсов тоже прибавляет 1, 0,1, 0,01 или 0,001 соответственно отображается на мнемосхеме это нормально, но вот при обработке в скрипте всегда приходится округлять или обрезать. Может есть какое-то решение?
-
После создания и сохранения актуатора при всех закрытых боковых меню нажимаем кнопку открытия нижнего меню, и видим окно с состояниями актуатора (или выбираем отображение состояний в меню 1).
Erik, большое спасибо за подробные пояснения! Проблема была с открытием нижнего меню, сейчас разобрался где эта кнопка.
-
Дополнительные свойства устройству могут добавлять сценарии и плагины.
А можно где-нибудь опубликовать типы дополнительный свойств (помню, что уже рассказывали, но 30-ти минутный поиск ни к чему не привел)? Требуется выводить на вкладке "Параметры" плагинов их состояние. Состояние как правило - это строка.
И еще интересный вопрос - можно ли таким же образом сделать слайдер, при движении которого параметр будет улетать в железку? Суть - голосовой терминал, который интегрирован в iH посредством плагина. Вся оперативная настройка голосового терминала заключается в регулировке его громкости. Конечно можно было бы еще из этого же меню записывать голосовые модели и т.д., но мне кажется, что это должно делаться из веб-интерфейса терминала (пытаюсь продавить данный момент, пока разработчик реализовал только вебку для оперативного изменения кучи настроек).
-
Дополнительные свойства устройству могут добавлять сценарии и плагины.
А можно где-нибудь опубликовать типы дополнительный свойств (помню, что уже рассказывали, но 30-ти минутный поиск ни к чему не привел)? Требуется выводить на вкладке "Параметры" плагинов их состояние. Состояние как правило - это строка.
И еще интересный вопрос - можно ли таким же образом сделать слайдер, при движении которого параметр будет улетать в железку? Суть - голосовой терминал, который интегрирован в iH посредством плагина. Вся оперативная настройка голосового терминала заключается в регулировке его громкости. Конечно можно было бы еще из этого же меню записывать голосовые модели и т.д., но мне кажется, что это должно делаться из веб-интерфейса терминала (пытаюсь продавить данный момент, пока разработчик реализовал только вебку для оперативного изменения кучи настроек).
А с помощью get|post нельзя туда пульять изменения? Привязать уставку датчика и при изменении уставки отправлять в терминал запрос
-
А с помощью get|post нельзя туда пульять изменения? Привязать уставку датчика и при изменении уставки отправлять в терминал запрос
Создатель терминала сейчас сделал полноценный двусторонний обмен данными по соккетам с рукопожатием в том числе, но для этого надо пилить плагин, который я сделал для iH - ни времени, ни достаточных знаний у меня нет. Однако поскольку терминал делался изначально под МЖД, то он кидает в сервер get по http, а вот обратно есть возможность только открыть соккет на 7999 порту (сейчас плагин так и работает).
Однако тут смысл в том, что не хочется плодить какие-то эфимерные виртуальные устройства, а сделать все используя устройство самого плагина - в моем случае "_UNIT_voiceterminal1". Сейчас его параметры отображаются вот так:
Я думаю, что используя "общие принципы iH" можно сделать что я хочу. Только вопрос - как?
-
Однако тут смысл в том, что не хочется плодить какие-то эфимерные виртуальные устройства, а сделать все используя устройство самого плагина - в моем случае "_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.
Тип слайдер пока не реализован
-
Очень изобретательно у Вас получилось
Интерактивный параметр тоже можно сделать через сценарий и команду 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(…) чтобы скрипт запустился и отработал?
-
Наверное, необходимо использовать startOnChange(…) чтобы скрипт запустился и отработал?
Да, конечно.
-
Наверное, необходимо использовать startOnChange(…) чтобы скрипт запустился и отработал?
Да, конечно.
А можно поподробнее как? Поскольку все что я пробовал при сохранении ругалось на не верные аргументы
-
Не понимаю в какой момент setvolume меняется - при изменении значения или нажатия кнопки? Сейчас подобную структуру вставил в start, но в логе при изменении значения setvolume ничего подобного нет. Проверка на изменение происходит только при запуске скрипта внешним запросом (плагином):
Свойство (уставка) отправляется на сервер, когда нажимаете галочку.
При этом возникает событие устройства, свойство которого изменилось.
А можно поподробнее как? Поскольку все что я пробовал при сохранении ругалось на не верные аргументы
У Вас сценарий, который добавляет свойства индикатору 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 варианту, так как можно объявлять разные свойства устройства в разных сценариях, желательно конечно, чтобы имена свойств не совпадали.
-
Свойство (уставка) отправляется на сервер, когда нажимаете галочку.
При этом возникает событие устройства, свойство которого изменилось.
Спасибо за разъяснения! Все что надо получилось. Жаль, что информация в боковом меню не обновляется онлайн, а только при каждом новом вызове…
А еще просветите - от 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}); }
-
Спасибо за разъяснения! Все что надо получилось. Жаль, что информация в боковом меню не обновляется онлайн, а только при каждом новом вызове…
Здорово, что все получилось!
А еще просветите - от startOnChange можно как-то получить что конкретно изменилось? Сейчас сделал обработку событий "вручную":
Да, это логично - получить объект, в котором содержатся данные, которые привели к запуску сценария .
Добавим
-
Да, это логично - получить объект, в котором содержатся данные, которые привели к запуску сценария .
Добавим
Да, это очень логично! Причем в отладчике сценария уже сейчас пишется что именно изменилось, только это сейчас не забрать… Пример, проверки на изменение - 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+ "%"), поэтому значение обнулялось.