Вопрос и предложение по схемам wb-mqtt-confed

Доброго дня!

Есть просьба (предложение) разрешить в описательной части использовать target="_blank" для ссылок. Сейчас они отсекаются и приходится при клике зажимать ctrl.

"translations": {
	"ru": {
		"more_desc": "Полная документация доступна на портале <a href='https://support.wirenboard.com/' target='_blank'>поддержки</a>"
	}
}

И основное - это вопрос как можно организовать видимость полей в массиве data на основе выбранного значения в settings?

Попробовал способ из статьи, но успеха не дало.
Хочется чтобы при разном выборе открывался разый набор полей. А главное чтобы всё обратно вычитывалось из конфигурационного файла при открытии.

Пример схемы:

{
	"$schema": "http://json-schema.org/draft-04/schema#",
	"type": "object",
	"title": "Show or hide on enum selection",

	"properties": {
		"settings": {
			"title": "Select option",
			"type": "string",
			"enum": [
				"option1",
				"option2",
				"option3"
			],
			"default": "option1",
			"propertyOrder": 1
		},
		"data": {
			"title": "Data",
			"type": "object",

			"properties": {
				"field1": {
					"type": "string",
					"options": {
						"dependencies": {
							"settings": ["option1"]
						}
					}
				},
				"field2": {"type": "string"},
				"field3": {"type": "string"}
			},
			"options": {
				"wb": {
					"disable_panel": true,
					"disable_title": true
				}
			},
			"propertyOrder": 2
		}
	},
	"options": {
		"disable_collapse": true,
		"wb": {
			"disable_panel": true,
			"disable_title": true
		}
	},

	"configFile": {
		"path": "/etc/wb-sample-file.conf"
	}
}

И пример файла wb-sample-file.conf:

{
    "data": {
        "field1": "how",
        "field2": "to",
        "field3": "hide"
    },
    "settings": "option1"
}

Здравствуйте.

Это делается с помощью поля condition
В качестве примера, можете использовать шаблон WB-LED. он сложный и там много вложений.
config-wb-led.json (487.9 KB)


Хорошая идея. Запишу в книгу пожеланий.

Для шаблонов модбас устройств знаком с этой конструкцией.

Вопрос был про конфигурационные файлы (ntp, hwconf и т.д) - там тоже можно использовать condition?

простите, почему-то подумал, что речь об wb-mqtt-serial…

Сейчас уточню у коллег.

Разобрался с dependenies. Он работает только для объектов одного уровня и не работает при обращении к родительскому объекту. Т.е. работает такой вариант:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "title": "Show or hide on enum selection",
  "properties": {
    "settings": {
      "title": "Select option",
      "type": "string",
      "enum": [
        "option1",
        "option2",
        "option3"
      ],
      "default": "option1",
      "propertyOrder": 1
    },
    "data": {
      "title": "Data",
      "type": "object",
      "properties": {
        "field1": {
          "type": "string"
        },
        "field2": {
          "type": "string"
        },
        "field3": {
          "type": "string"
        }
      },
      "options": {
        "wb": {
          "disable_panel": true,
          "disable_title": true
        },
        "dependencies": {
          "settings": [
            "option1"
          ]
        }
      },
      "propertyOrder": 2
    }
  },
  "options": {
    "disable_collapse": true,
    "wb": {
      "disable_panel": true,
      "disable_title": true
    }
  },
  "configFile": {
    "path": "/etc/wb-sample-file.conf"
  }
}

Если вам нужно изменения в младшей схеме, то попробуйте конcтрукцию “oneOf”
Проверял тут.

Спасибо за разъяснение! Удалось реализовать первоначальную задумку через доп. поле (state), которое связано с полем (settings) в младшей схеме:

{
	"$schema": "http://json-schema.org/draft-04/schema#",
	"type": "object",
	"title": "Show or hide on enum selection",

	"properties": {
		"settings": {
			"title": "Select option",
			"type": "string",
			"enum": [
				"option1",
				"option2",
				"option3"
			],
			"default": "option1",
			"propertyOrder": 1
		},
		"data": {
			"title": "Data",
			"type": "object",
			"properties": {
				"state": {
					"type": "string",
					"watch": {
						"value": "settings"
					},
					"template": "{{value}}",
					"options": {"hidden": true}
				},
				"field1": {
					"type": "string",
					"options": {
						"dependencies": {
							"state": ["option1", "option2"]
						}
					}
				},
				"field2": {"type": "string"},
				"field3": {"type": "string"}
			},
			"options": {
				"wb": {
					"disable_panel": true,
					"disable_title": true
				}
			},
			"propertyOrder": 2
		}
	},
	"options": {
		"disable_collapse": true,
		"wb": {
			"disable_panel": true,
			"disable_title": true
		}
	},

	"configFile": {
		"path": "/etc/wb-sample-file.conf"
	}
}

Хотел бы ещё спросить о наличии пары возможностей:

  1. Можно ли сделать поле string в котором будет возможность и выбирать из списка заготовок так и печатать руками?

Способ с anyOf нашел, но в нём приходится выбирать в каком варианте работать + при ручном вводе ругается если значение совпадает со списком :frowning:


"measurement": {
	"title": "Measurement",
	"oneOf": [
		{
			"title": "предустановленные",
			"type": "string",
			"enum": ["°C", "°F", "%"]
		},
		{
			"title": "свой текст",
			"type": "string"
		}
	],
	"format": "select"
}

Хотелось бы получить поле как при выборе шаблона в wb-mqtt-serial

  1. Можно ли во вкладочном (tabs) отображении в headerTemplate получить номер элемента по списку?

Нашел, можно:

"headerTemplate": "Item index: {{ i1 }}"

Интересное решение! Надо добавить в доку..

Я бы добавил 4й enum “Свой вариант”, например. и добавил объект (поле ввода) с dependencies от этого выбора enum, где можно ввести свой вариант.


Этот вариант тоже рассматривал, но хотелось бы добиться искомого :slight_smile:

Ещё можно вопрос? Пока отвечаете))

Можно ли после сохранения конфигурации через внешнюю обработку (toJSON в configFile) сделать полную перезагрузку страницы?

Задача: после сохранения прочитать программно конфиг вновь через fromJSON.

Сейчас приходится нажимать F5. :frowning:

простите, плохо понимаю для чего читать только что записанный конфиг?

Всё это попытки “обмануть” встроенный редактор.

Хочу использовать вот такую конструкцию с html (пример с <b>), но встроенный санитайзер всё напрочь трёт. :smiling_face_with_tear:

"headerTemplate": "{{ self.name }} (<b>{{self.id}}</b>)"

Поэтому подумал что могу использовать доп. поле чтобы выводить уже готовый html в него:

headerTemplate: "{{ self.name }} ({{ self.html }}"`

А уже при загрузке конфигурации в питон скрипте отдавать в json это поле как "html": <b>01685</b>. Но работает это не очень сейчас, особенно когда страница полностью не перезагружается после сохранение конфига.

Если есть другие варианты отключить санитайзер html-кода в headerTemplate - дайте пожалуйста знать!

На крайний случай подошел бы и markdown - но его тоже нет к сожалению(

@Because не подскажите есть какие-нибудь вариантики?)

Простите, потерял вашу тему. Попросил коллегу помочь..

Вдруг еще есть возможность передавать из кода сообщения с ошибками при загрузке конфиг. файла - радости не было бы предкла😅

Так, а в чем проблема? То есть конфиг загружается тем же, например, wb-rules. В случае ошибки или недопустимой комбинации параметров - скрипты выводят в виртуальное устройство сообщение. Как в “сценариях” сделано.

wb-rules не использую, вирт. устройств нет, да и не практично выходить из страницы конфигуратора и смотреть были ли ошибки.

При сохранении конфига я через скрипт на питоне проверяю интересующие вещи, и хотелось бы туда же выгрузить некое сообщение, чтобы отобразилось после окончания сохранения.

Но проблема первоначально в том, что я не знаю как полностью обновить страницу чтобы случилось полное чтение после успешного сохранения..

Подобное не реализовано, да.
Запишу в пожелания.

Это (перезагрузка у пользователя в браузере) тоже не поддеорживается.