Как пользоваться новым разделителем в WEB UI?

Добрый день.
Какие изменения произошли в WEB UI?, ( вижу что добавили separator)
как им пользоваться при создании виртуальных устройств? Посмотрел GitHub - wirenboard/conventions: Wiren Board MQTT Conventions и не нашел такого типа.
А в моем давнем коде

`// Разделитель  для WEB_GUI
                Separator1: {
                    title: { en: "", ru: "" },
                    type: "text",
                    value: "----------------- НАСТРОЙКИ РЕГУЛЯТОРА -----------------",
                    forceDefault: true,
                    readonly: true,
                    order: 2,`

он сломал вывод


Ранее надпись Separator1 и Separator2 не выводилась.

Добрый день.

Вот так:


Результат:

Разделитель не имеет отношения к MQTT. Это способ форматирования виджетов.

А для чего перед элементов указывать наименование элемента?

я же показал что это использовалось при СОЗДАНИИ виртуального устройства функцией
например

vdRegulatorPID.prototype.CreateVirtualDevice = function () {
    try {
        var self = this;                         
        return defineVirtualDevice(this.NameVD, {
            title: { 
                en: this.NameEN, 
                ru: this.NameRU
            },
            cells: {
                
                TempPV: {
                    title: { 
                        en: "Current temperature", 
                        ru: "Текущая температура" 
                    },
                    type: "value",
                    value: 0,
                    min: -50,
                    max: 250,
                    precision: 0.1,
                    units: "°C",
                    forceDefault: true,
                    readonly: true,
                    order: 1,
                },
                //Разделитель  для WEB_GUI
                Separator1: {
                    title: { en: "", ru: "" },
                    type: "text",
                    value: "----------------- НАСТРОЙКИ РЕГУЛЯТОРА -----------------",
                    forceDefault: true,
                    readonly: true,
                    order: 2,
                },

Т.е. мой вопрос как им пользоваться при создании виртуальных устройств, а не тогда когда они созданы и находятся на дашбоарде.
попробовал так

// place your rules here or add more .js files in this directory
log("add your rules to /etc/wb-rules/");
try {
        return defineVirtualDevice('Test', {                           
            // Выводимое имя в шапке виджета в WEB UI
            title: {
                en: "Hum " ,
                ru: "Вла "  
            },
            cells: {
        
                Code: {
                    title: {
                        en: "Sensor Code", 
                        ru: "Код от датчика" 
                    },
                    type: "value",
                    value: 0,
                    min: 0,
                    max: 65534,
                    forceDefault: true,
                    readonly: true,
                    order: 1,
                },
                // Разделитель  для WEB_GUI
                Sep: {    
                    type: 'Separator',
                    value: "_",
                    order: 2,
                },
                // Рассчитанное значение канала с единицами измерения (только для чтения)
                CalcValue: {
                    title: {
                        en: "Hum ",
                        ru: "Вла "
                    },
                    type: "value",
                    value: 0,
                    forceDefault: true,
                    readonly: true,
                    precision: 0.1,
                    order: 3,
                },   
            },
        });
    } catch (error) {
        log.error ("GT try defineVirtualDevice: = {}, error = {}", error);
    };

Устройство создается но разделитель не появляется


а в MQTT так

Значит я не так понял вопрос.

У нас нет элементов “разделитель” для виртуальных устройств. Вот скорее всего поэтому я и не понял вопроса.
Все возможные типы перечислены в конвенции - тут согласен.

Нету типа ‘Separator’. То есть то что он создается в общем можно рассматривать как багу - но конвенции в общем не противоречит. То есть то что в ней описано - гарантированно работает. Что не описано - поведение не определено.

Ну и про архитектуру. То что находится в “устройствах” - это просто для отладки, для прямого управления. Служебное, в общем. Для взаимодействия с пользователем - именно виджеты.

Спасибо. Просто ранее я использовал текстовое поле при создании виртуального устройства, а разделителем были тире. Сейчас это не работает так как ранее. Было бы неплохо ввести тип Separator в виртуальное устройство для визуального разделения различных свойств.

1 лайк

А для чего? То есть какой кейс использования?

Добрый день.
Визуальное разделение различных свойств виртуального устройства. Например входов и выходов виртуального устройства когда оно состоит из более чем 7 строк. Просто не все созданные виртуальные устройства переносятся на дашбоард и часть видна только администратору. Но ему же все равно нужно реагировать.
См как было ранее


еще пример

а теперь вот так

 title: {en: that.NameEN, ru: that.NameRU},
            cells: {
                // Разделитель для WEB UI
                Separator0: {
                    title: {
                        en: "",
                        ru: "",
                    },
                    type: "text",
                    value: "==========================================",
                    forceDefault: true,
                    readonly: true,
                    order: 1,
                },
                // Ошибка 1 (короткое описание)
                ErrorS0: {
                    title: {
                        en: "Error 1: ",
                        ru: "Авария 1: ",
                    },
                    type: "text",
                    value: "",
                    forceDefault: true,
                    readonly: true,
                    order: 2,
                },
                // Ошибка 1 (расширенное описание)
                ErrorF0: {
                    title: {
                        en: "",
                        ru: "",
                    },
                    type: "text",
                    value: ".",
                    forceDefault: true,
                    readonly: true,
                    order: 3,
                },

Почему названия cells начали выводится в виджете?
Что изменилось? и как вывести как раньше? просто как текст.

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

То есть из-за того что интерфейс в плане вывода стал работать корректно (не обрезать наименования значений) вывод стал выглядеть не так как ожидалось.

Добавлю в список пожеланий.

Я присоединяюсь к пожеланиям. Разделитель в виртуальном устройстве нужен.

2 лайка

То есть из-за того что интерфейс в плане вывода стал работать корректно (не обрезать наименования значений) вывод стал выглядеть не так как ожидалось.

Так имя поля как почему попадает в WEB UI

 title: {en: that.NameEN, ru: that.NameRU},
            cells: {
                // Разделитель для WEB UI
                Separator0: {
                    title: {
                        en: "",
                        ru: "",
                    },
                    type: "text",
                    value: "==========================================",
                    forceDefault: true,
                    readonly: true,
                    order: 1,
                },
                // Ошибка 1 (короткое описание)
                ErrorS0: {
                    title: {
                        en: "Error 1: ",
                        ru: "Авария 1: ",
                    },
                    type: "text",
                    value: "",
                    forceDefault: true,
                    readonly: true,
                    order: 2,
                },
                // Ошибка 1 (расширенное описание)
                ErrorF0: {
                    title: {
                        en: "",
                        ru: "",
                    },
                    type: "text",
                    value: ".",
                    forceDefault: true,
                    readonly: true,
                    order: 3,
                },

Почему выводится ErrorS0, F0, Separator0 как это убрать?

Оно должно туда попадать.

Чем, например “Separator0” отличается от наименования “ErrorF2”?
Или я не понимаю вопрос? То есть в устройства выводится: наименование параметра, его значение, единицы измерения (опционально). Почему наименование не должно выводиться?

Так ведь ранее на релизе


такого не было да и ранее я такого не наблюдал. Возможно это моя ошибка я ожидал что имя поля не переносится в Web UI , а отображается только то что в Text. Вот как ранее было

И собственно я так и хочу сделать. Я не планировал переносить это в дашбоард виджетом. Код JavaScript одинаковый в обоих случаях и не менялся.

Вот тут, как раз на скриншоте:

“Номер партии” - это текстовое поле.

Я ожидал (и ранее это работало) что если есть title (пусть и пустой у поля “Separator0” как в коде выше

Separator0: {
                   title: {
                       en: "",
                       ru: "",
                   },

то имя в виджете будет выводится из него (и ранее это работало) так как там ничего нет ,то ничего и не выводилось.

, а не браться из имени поля если блок “title” есть, но он пустой


Соответственно отвечая на вопрос

Чем, например “Separator0” отличается от наименования “ErrorF2”?
Тем что у ErrorF2 блок “title” полный и описан так


Естественно (ИМХО) что тут мы видим вывод из “title”

. Вот в связи с этим и возник вопрос. Укажите где это описано чтобы в последующем учитывать это поведение. С уважением Юрий.

Например вот тут
то есть буквально:

Виртуальным устройствам и контролам можно присваивать русские имена, задавая title в виде title: { en: ’Title’, ru: ’Заголовок’ }, или через setTitle у контрола: setTitle({ en: ’Title’, ru: ’Заголовок’ }).

Если значение пустое - то оно не задано. Если не задано - используется имя самого элемента.
В конвенции это (пустое = не задано) явно не указано. Добавим, наверно.

Сильно плюсую про добавление сепаратора в виртуальные, да и в реальные устройства!
Что-бы было по фен-шую думаю не надо экспортировать их в mqtt.

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

2 лайка

Это, без добавления в mqtt - невозможно. То есть интерфейс не работает ни с чем кроме как брокером.

1 лайк