Вопросы по работе системы
-
А с помощью 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+ "%"), поэтому значение обнулялось.
-
Еще раз про отображение.
В хроме полосы.
Начал перебирать браузеры, и в IE вообще так.
Как правильно использовать часы?
-
Добрый день,
Еще раз про отображение.
В хроме полосы.
Попробуйте уменьшить виджет "Часы", возможно виджет налезает на другой и перекрывает полосу скролинга
Еще раз про отображение.
Начал перебирать браузеры, и в IE вообще так.
Спасибо за помощь
Как правильно использовать часы?
Данный виджет несет только информационный характер, логическая часть в нем отсутствует
-
там нет ничего, что может его перекрывать.
Часы в свои границы не помещаются, если использовать IE
Вопрос про SVG.
У стороннего SVG не совпадают каналы с ожиданиями IH. В результате ни цвет ни фон не меняются.
Есть ли описание, что нужно IH от SVG?
-
Часы в свои границы не помещаются, если использовать IE
Поддерживаю! У меня и в хроме на некоторых разрешениях не помещаются - сдвигаются в сторону.
-
там нет ничего, что может его перекрывать.
Часы в свои границы не помещаются, если использовать IE
Вопрос про SVG.
У стороннего SVG не совпадают каналы с ожиданиями IH. В результате ни цвет ни фон не меняются.
Есть ли описание, что нужно IH от SVG?
Добрый день, жестких стандартов нет, в большинстве случаев проблем не должно быть, пришлите Ваш файл и мы сообщим почему возникает проблема
-
https://yadi.sk/d/gx340JbOGgebEQ
файл svg
-
https://yadi.sk/d/gx340JbOGgebEQ
файл svg
Добрый день, файл состоит из линий и графических элементов (png). Лини замкнутые и их можно залить, но у них уставлена принудительная заливка слоя в белый цвет, отключите её и все заработает. Графические элементы залить цветом не получиться
-
фон не меняется
-
фон не меняется
Добрый день, заливка работает по другому, например: попробуйте нарисовать в svg пустой прямоугольник, загрузите в систему intraHouse и установите цвет
-
Есть такой 3D редактор - SweetHome.
Он нарисованные планы может импортировать в SVG.
Дальше что, вручную в коде файла ковыряться?
Или другим редактором открыть?
Каким?
-
Я тоже использую SweetHome для построения планов.
Но получаю png, обрезаю и использую в качестве плана.
Вариант с svg узнал от Вас. Попробовал. План в IH загружается нормально.
Но менять цвет фона и окантовки в IH действительно не получается. Хотя это вроде и не требуется. План из SweetHome обычно получаем раскрашенным как надо
Тем не менее. Попытался открыть Ваш файл цоколь.svg в программе Graphic. В этой программе я делаю все svg иконки.
Попробовал поменять цвет фона на красный. Не получилось:
Там идет заливка не цветом а паттерном. Graphic изменить ее не может, как и IHВозможно связано с особенностями формата svg в SweetHome