Виртуальные устройства и графики

Создаем виртуальное устройство Virt и записываем в него через правило, например, округленное показание 1W датчика. Но если мы будет смотреть историю по устройству Virt, то там будут не округленные значения. Как это побороть?

Сейчас никак. В истории показания усредняются.

Расскажите, какая у вас задача - подумаем, что можно сделать.

Понятно. В данном случае не критично, эстетики ради хотелось. Думал, что есть для этого правильные методы.

Я создал виртуальное устройство для выставления порогового значения температуры и ещё хотелось бы в реальном времени видеть текущее значение температуры. В моем примере это значение не меняется, а сохранилось то, что было на момент создания устройства. Что не так?

defineVirtualDevice("Cellar_Temperature", {
title: "Cellar temperature",
cells: {
  volume : {
      type : "range",
      value : 17,
      min : 5,
      max : 20,
  },
  temperature: {
    type: "text",
    value: dev["wb-w1/28-000006aad7ae"],
  }  
}

});

У вас значение записывается только при инициализации правил. Вот так нужно обновлять:

defineRule('update_temp', {
    whenChanged: [
      'wb-w1/28-000006aad7ae'
    ],
    then: function (newValue, devName, cellName) {
        dev.Cellar_Temperature['temperature'] = newValue;
    }
});
2 лайка

Спасибо :wink:

Нашел список поддерживаемых типов для контролов https://github.com/contactless/homeui/blob/master/conventions.md
Но в нем нет типа контроля для “поле ввода”.
Как кроме “range” можно задавать значение уставок, времени и т.п.?

Пока никак, но очень скоро можно будет.

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

Я вас правильно понял, что рекомендуется создать свой “кастомный” подраздел с визуализацией в разделе “Configs”, под него написать “кастомный” файл конфигурации и из него в визуализатор подтягивать параметры, которые необходимо регулировать? Затем эти регулирующие параметры передаются в MQTT?

Да, так. Чтобы это сделать, вам нужно сделать сам конфиг в формате json и написать т.н. схему. Примеры схем лежат в /usr/share/wb-mqtt-confed/schemas/ , формальное описание ищется по словам “JSON Schema” и “JSON Schema Editor”.

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

Сделана схема для уставки температуры:

{
  "type": "object",
  "title": "Set Points for Temperature",
  "description": "Tresholds to adjust temperature",
  "configFile": {
    "path": "/etc/wb-mqtt-setpoints.conf",
    "service": "wb-mqtt-setpoints"
  },
  "properties": {
	  "name": {
		"type": "string",
		"title": "SetPoint name",
		"default": "Temperature SetPoint",
		"propertyOrder": 1
	  },
	  "id": {
	  "type": "string",
	  "title": "MQTT id of the device",
	  "description": "Used as part of the topic",
	  "minLength": 1,
	  "propertyOrder": 2
	  },
	  "temperature": {
		"type": "integer",
		"title": "Temperature (C)",
		"default": 30,
		"propertyOrder": 3
	  }
  },
  "required": ["name"]
}

Появился раздел в “Configs”:
Действительно очень удобно!

Однако в Settings этот девайс не появился.
Поправьте пожауйста как с помощью этого простого примера заводить свои параметры через “Configs”?
Чего-то не хватает, а чего не могу понять!

я, честно, не очень понял, что вы ожидали получить.

Ожидалось получить новый MQTT-канал, чтобы его можно было читать в wb-rules.

Возможно я вас не правильно понял?
wb-mqtt-xxxxx.conf нужен чтобы в правила его загружать через loadConfig()?

Да, всё верно. Схемой вы формируете json конфиг, и потом парсите его в правилах.

Тогда по какому событию предлагается инициализировать загрузку json?

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

По loadConfig() не удалось обнаружить никакой информации о способе применения.
Нашел одно упоминание readConfig(), но как использовать ни Git, ни форум, ни Документация, ни Google не дают ответа или примеров.
Тупик!

var config = readConfig(“путь к файлу”);

и дальше работает с config как с объектом

Прочиталось:

var adjust_conf = readConfig("/etc/wb-mqtt-setpoints.conf");
log(adjust_conf.device_name);

Однако, где такую информацию брать, кроме как на форуме?