Не могу понять, подскажите что не так с моим скриптом или как правильно сделать скрипт для решения задачи учета воды.
В целом все работает, но стоит только перезапустить правило или контроллер, то контролам присваимваются какие-то непонятно откуда взятые значения.
defineVirtualDevice("WaterCount", {
title: "WaterCount",
cells: {
"HW99": {//ГВС кв99
type: "value",
value: 4700,
format: "u32",
readonly: false,
forceDefault: false,
},
"CW99": {//ХВС кв99
type: "value",
value: 3110,
format: "u32",
readonly: false,
forceDefault: false,
},
"HW100": {//ГВС кв100
type: "value",
value: 220,
format: "u32",
readonly: false,
forceDefault: false,
},
"CW100": {//ХВС кв100
type: "value",
value: 660,
format: "u8",
readonly: false,
forceDefault: false,
},
"HW99start": {//ГВС кв99 начало месяца
type: "value",
value: 4700,
format: "u32",
readonly: false,
forceDefault: false,
},
"CW99start": {//ХВС кв99 начало месяца
type: "value",
value: 3110,
format: "u32",
readonly: false,
forceDefault: false,
},
"HW100start": {//ГВС кв100 начало месяца
type: "value",
value: 220,
format: "u32",
readonly: false,
forceDefault: false,
},
"CW100start": {//ХВС кв100 начало месяца
type: "value",
value: 660,
format: "u32",
readonly: false,
forceDefault: false,
}
}
});
function WaterCount(name, control, virt, count) {
defineRule(name, {
whenChanged: control, //при новом импульсе
then: function (newValue, devName, cellName) { //выполняй следующие действия
if (newValue) {
dev[virt][count] += 10; // прибавляем +10 т.к. импульс это десятки, а не единица у счетчика
log.info("WaterCount.js : " + name + " count = " + dev[virt][count]);
}
}
});
}
WaterCount("CW99Count", "wb-gpio/EXT2_IN6","WaterCount", "CW99");
WaterCount("HW99Count", "wb-gpio/EXT2_IN7", "WaterCount","HW99");
WaterCount("CW100Count","wb-gpio/EXT2_IN9","WaterCount","CW100");
WaterCount("HW100Count","wb-gpio/EXT2_IN8","WaterCount","HW100");
// проверка смены месяца и фиксация показаний на начало месяца
function resetStartMonth(name) {
var timer = 70*1000; // таймер на 70 секунд
var timer_id = null;
defineRule(name, {
when: cron ("0 59 23 * *"), //запускаем таймер в 23-59, время согласно date формат 0 ММ ЧЧ * *
then: function (){
var date1 = new Date ();
if (timer_id) {
clearTimeout(timer_id); //сброс таймера
}
timer_id = setTimeout(function () { //запускаем таймер на 70 секунд чтобы посмотреть дату позже
var date2 = new Date ();
if (date1.getMonth() != date2.getMonth()) // если месяцы в датах разные, т.е. наступил новый месяц
{
log.info("WaterCount.js : Установка начало отсчета месяца, текущие значения HW99start = " + dev["WaterCount/HW99"] + " CW99start = " + dev["WaterCount/CW99"] + " HW100start = " + dev["WaterCount/HW100"] + " CW100start = " + dev["WaterCount/CW100"]);
dev["WaterCount/HW99start"] = dev["WaterCount/HW99"]; // значение счетчика на начало месяца
dev["WaterCount/CW99start"] = dev["WaterCount/CW99"]; // значение счетчика на начало месяца
dev["WaterCount/HW100start"] = dev["WaterCount/HW100"]; // значение счетчика на начало месяца
dev["WaterCount/CW100start"] = dev["WaterCount/CW100"]; // значение счетчика на начало месяца
}
timer_id = null;
}, timer);
}
});
}