Столкнулся с проблемой: не могу разобраться как работает функция defineVirtualDevice при попытке создать устройство с таким же ID.
Допустим, есть в файле код (файл хранится в папке для правил):
Спойлер
/------------------------------------------------------------------------
// Основное виртуальное устройство с контролами управления электропитанием
------------------------------------------------------------------------/
defineVirtualDevice(“PowerControls”, {
title:“Управление электропитанием”,
cells: {
“InputEnable”: {
title: “Выключатель ввода”,
type:“switch”,
value: 1
},
“EmergencyOffPower”: {
title: “Аварийное отключение”,
type:“switch”,
value: 0
},
“VideoSystemEnable”: {
title: “Видеосистема”,
type:“switch”,
value: 0
},
“AllDisable”: {
title: “Полное отключение”,
type:“switch”,
value: 0
},
“MainEnable”: {
title: “Сеть и освещение в доме”,
type:“switch”,
value: 0
},
“BanyaEnable”: {
title: “Сеть и освещение в бане”,
type:“switch”,
value: 0
},
“AllowOffAction”: {
title: “Разрешить отключение АВ инвертора”,
type:“switch”,
value: 0
},
“AllLightOff”: {
title: “Выключить всё освещение”,
type:“pushbutton”,
value: 0
},
“ExtLightOff”: {
title: “Выключить внешнее освещение”,
type:“pushbutton”,
value: 0
},
“Ring”: {
title: “Звонок”,
type:“pushbutton”,
value: 0
},
“Reset”: {
title: “Сброс неисправностей”,
type:“pushbutton”,
value: 0
},
“Battery48VOFF”: {
title: “Аварийное отключение АКБ 48 В”,
type:“pushbutton”,
value: 0
},
“PV120VOFF”: {
title: “Аварийное отключение СБ 120 В”,
type:“pushbutton”,
value: 0
},
“AlarmInputNoPower”: {
title: “Ввод отключен/не в норме”,
type:“alarm”,
value: false
},
“AlarmInputQF”: {
title: “Авария вводных выключателей”,
type:“alarm”,
value: false
},
“AlarmOutputQF”: {
title: “Авария выключателей потребителей”,
type:“alarm”,
value: false
},
“AlarmSysError1”: {
title: “Общая ошибка”,
type:“alarm”,
value: false
},
“NumAlarms1”: {
title: “Неисправностей”,
type:“value”,
value: 0
},
“FanSetPoint”: {
title: “Уставка охлаждения ЩВУ”,
type:“value”,
value: 0,
units: “°C”
},
}
});
Сколько бы раз я не перезапускал движок правил после внесения правок в файл - всё норм работает. Даже после перезагрузки. (я так понимаю там сам движок перезапускается при сохранении файла).
Аналогично есть несколько файлов, где так же создаются виртуальные устройства и всё норм.
А вот при попытке создать виртуальное устройство из функции модуля (расположен в папке модулей пользователя):
Спойлер
exports.Init = function(ID, ControllerDirection, timeframe, ICounter, Kp, Ki, MinOutput, MaxOutput) {
// Создаем виртуальное устройство
log("Инициализация ПИД");
if (!dev[ID + "Control/Output"])
defineVirtualDevice(ID + "Control", {
title: ID + "PID",
cells: {
"Kp" : {
type: "range",
value: Kp,
min: 1,
max: 100,
},
"Ki" : {
type: "range",
value: Ki,
min: 0,
max: 100,
},
"MinOutput" : {
type: "range",
value: MinOutput,
min: 0,
max: 100,
},
"MaxOutput" : {
type: "range",
value: MaxOutput,
min: 0,
max: 100,
},
"Output" : {
type: "value",
value: 0
}
},
});
var OBJ = new PID(ID, ControllerDirection, ICounter);
OBJ.setSampleTime(timeframe);
return OBJ;
};
столкнулся с тремя проблемами:
- При попытке просто создать устройство - ругается, что такое уже существует. Ок, можно списать на то, что при перезапуске правил он сверяет ВУ и переподключает их, а при динамическом управлении - нет.
- При попытке вызвать getDeviceId(ID + “Control”), getId(ID + “Control”) получаю ошибку скрипта ECMAScript error: ReferenceError: identifier ‘getDeviceId’ undefined, ECMAScript error: ReferenceError: identifier ‘getId’ undefined.
Отсюда и такая своеобразная форма выяснить есть ли ВУ -
if (!dev[ID + “Control/Output”]) (Output обычно 0 не бывает, во всяком случае тогда точно не был) - Всё бы ничего и оно даже более менее работало, если бы не одно но: где-то через сутки работы значения с указанных контролов перестали передаваться в канал MQTT. Т.е. я кручу ползунок range, он меняется, а на странице - настройки - каналы … в канале с нужным ID как было вчерашнее значение контрола - так и осталось (и log(dev[‘…’]) так же выдавал старое).Само ВУ доступно на странице устройств в админке.
Я пока принудительно этими панипуляциями пересоздал ВУ и пока проблем нет, но посмотрим, когда ползунки отвалятся снова.
Не скажу, что ПОКА проблема для меня критична, ибо я перемещу потом настройки в конфиг. Но чувство, что работает оно явно не так, как задумано, или я что-то не так понял с функциями получения ID (а раз не знаю ид, то не могу и проверить существование контролов через api).
PS: на форуме нужны подписи и я кажется знаю, что туда напишу: версия 2404 stable.