Проверяю. Для этого набросал быстренько следующее:
//02_19_test_01.js
var devtest = 'devtest1'
var celltest = {"order":44,"value":1234.56789,"title":"test","type":"value","description":"","units":"","precision":0.0001,"readonly":false,"error":""}
defineVirtualDevice(devtest, {
title: devtest,
cells: {celltest:celltest},
})
for (var key in celltest) {
if (celltest.hasOwnProperty(key)) {
log.info("Имя: " + key + ", Значение: " + celltest[key]);
}
}
var Precusion1 = 0.0001
var Precusion2 = 0.01
function makeNewVirtualControl(vdName, nameControl, typeControl){
if (getDevice(vdName) === undefined) {
defineVirtualDevice(vdName, {
title: vdName,
cells: {},
})
}
else{
log.debug("Устройство "+vdName+" уже есть.")
}
//Тут проверим есть ли уже контрол и если нет - создадим.
if (!getDevice(vdName).isControlExists(nameControl)) {
log.debug("Контрола "+nameControl+" нет, создаем.")
getDevice(vdName).addControl(nameControl, typeControl);
}
else{
log.debug("Контрол "+nameControl+" уже есть.")
}
}
makeNewVirtualControl("devtest1", "01", {type: "pushbutton", readonly: false})
makeNewVirtualControl("devtest1", "02", {type: "pushbutton", readonly: false})
//Ну и правила
defineRule("test_02_19_01", {
whenChanged: "devtest1/01",
then: function(value) {
var dControl = getControl("devtest1/celltest")
dControl.setPrecision(Precusion1)
log.info("getPrecision()", dControl.getPrecision())
}
})
defineRule("test_02_19_02", {
whenChanged: "devtest1/02",
then: function(value) {
var dControl = getControl("devtest1/celltest")
dControl.setPrecision(Precusion2)
log.info("getPrecision()", dControl.getPrecision())
}
})
Оно отрабатывает без ошибок
Подписываюсь, смотрю:
mosquitto_sub -v -t /devices/devtest1/#
/devices/devtest1/meta {"driver":"wb-rules","title":{"en":"devtest1"}}
/devices/devtest1/meta/name devtest1
/devices/devtest1/meta/driver wb-rules
/devices/devtest1/controls/celltest 1234.5279
/devices/devtest1/controls/celltest/meta {"order":44,"precision":0.01,"readonly":false,"title":{"en":"test"},"type":"value"}
/devices/devtest1/controls/celltest/meta/type value
/devices/devtest1/controls/celltest/meta/order 44
/devices/devtest1/controls/celltest/meta/readonly 0
/devices/devtest1/controls/01/meta {"order":45,"readonly":false,"type":"pushbutton"}
/devices/devtest1/controls/01/meta/type pushbutton
/devices/devtest1/controls/01/meta/order 45
/devices/devtest1/controls/01/meta/readonly 0
/devices/devtest1/controls/02/meta {"order":46,"readonly":false,"type":"pushbutton"}
/devices/devtest1/controls/02/meta/order 46
/devices/devtest1/controls/02/meta/readonly 0
/devices/devtest1/controls/02/meta/type pushbutton
/devices/devtest1/controls/01/on 1
/devices/devtest1/controls/01 1
/devices/devtest1/controls/celltest/meta {"order":44,"precision":0.0001,"readonly":false,"title":{"en":"test"},"type":"value"}
/devices/devtest1/controls/02/on 1
/devices/devtest1/controls/02 1
/devices/devtest1/controls/celltest/meta {"order":44,"precision":0.01,"readonly":false,"title":{"en":"test"},"type":"value"}
Видно, что меняется. Но вот интерфейс почему-то не перечитывает, да.
Пробую опубликовать значение
mosquitto_pub -t /devices/devtest1/controls/celltest/on -m "2345.56789"
И оно публикуется.
Описал разработчикам. Поправим.

