Как изменить показания счётчика WB-MAP6S

Добрый день, не могу понять как поменять начальное значение для “Прямая активная энергия для канала 1” для счетчика WB-MAPS6S F2.1 Пробую сделать следующим образом:


Перезагружаю контроллер и значение не меняется. Можно конечно программным способом добавить дельту, но хотелось бы чтобы счетчик сам выдавал значения синхронные со счетчиком квартиры. Т.е. чтобы технический и коммерческий учет был между собой одинаков.

Если делаю что-то не так, подскажите как надо

Добрый день!

Показания счётчика не изменить - это работает точно так же, как у вашего бытового счётчика.
Для решения вашей задачи, можете через движок правил создать виртуальное устройство, привязанное к показаниям счётчика с изменением на нужную дельту.
Другой вариант (идеологически неверный, но, возможно, более удобный) - скопировать шаблон устройства, и в нём в нужном канале добавить параметр offset (там уже есть параметр scale, добавьте аналогично рядом).

Спасибо, пойдем по пути правил

1 лайк

Пропали топики в WUI 2.0 на закладке MQTT Channels, как-то скрипт мог сказаться?


Сделал следующий скрипт

// UserSettings/currentAP1 - текущие показания канала AP1 + delta
// UserSettings/lastMonthAP1 - показания счетчика в прошлый месяц
// UserSettings/summMonthAP1 - расход за месяц
// UserSettings/summDayAP1 - расход за день

defineRule("summAP1", { //правило для добавления текущих значений счетчика WB-MAP6S к значениям счетчика учета энергии
  whenChanged: "2A12-MAP6S/AP energy 1",
  then: function (newValue, devName, cellName) {
    		dev["UserSettings/currentAP1"] = 5000 + parseInt(newValue); // 5000 это показания счетчика на площадке на момент запуска, для синхронизации
        }
});

defineRule("summAP2", { //правило для добавления текущих значений счетчика WB-MAP6S к значениям счетчика учета энергии
  whenChanged: "2A12-MAP6S/AP energy 2",
  then: function (newValue, devName, cellName) {
    		dev["UserSettings/currentAP2"] = parseInt(newValue);
        }
});

var timer = 70*1000; // таймер на 70 секунд
var timer_id = null;

defineRule("chekDay", {
  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()) // если месяцы в датах разные, т.е. наступил новый месяц
        {
            dev["UserSettings/summMonthAP1"] = dev["UserSettings/currentAP1"] - dev["UserSettings/lastMonthAP1"]; // вычесляем расход за месяц = текущее значение - предыдущие показания месяца
	    	dev["UserSettings/lastMonthAP1"] = dev["UserSettings/currentAP1"]; //последнему значению присвоили текущее значение счетчика
            dev["UserSettings/summMonthAP2"] = dev["UserSettings/currentAP2"] - dev["UserSettings/lastMonthAP1"]; // вычесляем расход за месяц = текущее значение - предыдущие показания месяца
	    	dev["UserSettings/lastMonthAP2"] = dev["UserSettings/currentAP2"]; //последнему значению присвоили текущее значение счетчика
          
        }
          timer_id = null;   
       	}, timer);
    
    	dev["UserSettings/summDayAP1"] = dev["UserSettings/currentAP1"] - dev["UserSettings/summDayAP1"]; // вычесляем расход за день = текущее значение - предыдущие показания дня
    	dev["UserSettings/summDayAP2"] = dev["UserSettings/currentAP2"] - dev["UserSettings/summDayAP2"]; // вычесляем расход за день = текущее значение - предыдущие показания дня
  }
});

Ничего не делал, все восстановилось само собой спустя час

подскажите как это завернуть в виртуальное устройство

не понятно что вас интересует, можете точнее сформулировать вопрос