Коллеги ничего не понимаю. но у меня не работает простой скрипт по инкрементированию значения виртуального устройства по появлению
Version: 2.6.0
defineVirtualDevice("WaterCount", {
title: "WaterCount",
cells: {
"HW99": {//ГВС кв99
type: "value",
value: 15,
forceDefault: true,
},
"CW99": {//ХВС кв99
type: "value",
value: 55,
forceDefault: true,
},
"HW100": {//ГВС кв100
type: "value",
value: 34580,
forceDefault: true,
},
"CW100": {//ХВС кв100
type: "value",
value: 32000,
forceDefault: true,
}
}
});
function WaterCount(name, control, virt, count) {
defineRule(name, {
whenChanged: control, //при новом импульсе
then: function (newValue, devName, cellName) { //выполняй следующие действия
// прибавляем к текущему значению +1
if (newValue) {
var test = dev[virt][count] + 1;
dev[virt][count] = test;
log.info("rules = " + name + " count = " + dev[virt][count]);
}
}
});
}
WaterCount("CW99Count", "wb-gpio/EXT2_IN6","WaterCount", "СW99");
WaterCount("HW99Count", "wb-gpio/EXT2_IN7", "WaterCount","HW99");
WaterCount("CW100Count","wb-gpio/EXT2_IN8","WaterCount","СW100");
WaterCount("HW100Count","wb-gpio/EXT2_IN9","WaterCount","HW100");
при работе скрипта вывод ниже, что бы я не делал как бы я не обращался к виртуальному устройству
dev["WaterCount/СW99"]
dev["WaterCount"]["СW99"]
Результат работы скрипта:
2021-03-26 12:33:42rules = CW99Count count = null
При этом в соседнем файле скрипта нормально работают правила с другим виртуальным устройством определенном в другом скрипте.
например
defineVirtualDevice("Termostat", {
title: "Termostat",
cells: {
// =============== Прихожая теплый пол
"R01-TS16-1-mode": {//режим 0-ручной 1-по расписанию
type: "switch",
value: false,
},
"R01-TS16-1-setpoint": {//уставка
type: "range",
value: 25,
max: 30,
readonly: false
},
"R01-TS16-1-lock": {//блокировка в визуализации 0-снята 1-заблокирована
type: "switch",
value: false,
},.......
var hysteresis = 0.5;
function Termostat(name, temp, setpoint, TS, TS_onoff) {
defineRule(name, {
whenChanged: temp, //при изменении состояния датчика
then: function (newValue, devName, cellName) { //выполняй следующие действия
if (dev[TS_onoff]) {
if ( newValue < dev[setpoint] - hysteresis) { //если температура датчика меньше уставки - гистерезис
dev[TS] = true;
}
if ( newValue > dev[setpoint] + hysteresis) { //если температура датчика больше виртуальной уставки + гистерезис
dev[TS] = false;
}
}
else dev[TS] = false;
}
});
}
Termostat("R01-TS16-1", "A60-M1W3/External Sensor 1", "Termostat/R01-TS16-1-setpoint", "wb-gpio/EXT4_R3A1", "Termostat/R01-TS16-1-onoff"); // Прихожая теплый пол