Прошу помочь с кодом! WB-MAP6S + 3ая тарификация

Добрый вечер.
Уже долго бьюсь и не могу решить данную проблему. Счетчик электроэнергии WB-MAP6S выдает только суммарный показатель потребленной энергии. Мне же необходимо отслеживать изменения в конкретных временных интервалах, как это делает “Меркурий”. К сожалению подключиться к счетчику в щитовой и брать показания с него нет возможности.

В приложенном файле код.
Energy.doc (20.5 КБ)

Разбивка работает не на 100% точно, но в целом, этого достаточно.
map12

1 лайк

Здравствуйте, @oddentity!
Ознакомился с Вашим скриптом и написал свою версию. Считает…вроде)
Но есть вопрос:
с периодичностью сработки Cron’a то отображаются значения AP energy 1, то сколько нагорело согласно временной зоне.
Не могу понять где ошибка и что это за глюк.

скрипт:
nrgCor.js (1.1 КБ)

Ночью пришел вопрос, на который не могу сообразить ответ.
В Вашем скрипте

defineRule(“UpdateEnergyDayNight”, {
when: cron(“@every 5s”),
then: function () {
if (dev[“energy_tariff”][“tariff”]==1) {
dev[“energy01_day_night”][“ch01_energy_day”] = parseFloat((dev[“energy01”][“ch01_active_energy”] - dev[“energy01_day_night”][“ch01_energy_night”] - Ch1init).toFixed(3));

Почему Ch1init отнимается, а не прибавляется? Ведь счет ведется как раз от Ch1init.

Нужно дождаться смены тарифа, а пока этого не произошло - во втором тарифе показания равны нулю и соотв. ничего не вычитается.

Это константы, которые не нужно учитывать. Некоторое время счетчик тестировался, набежали некоторые показания, а обнулить эти регистры нельзя. Поэтому, используются такие константы - вычитаются из общего показания.

Я имею ввиду данные относительно одной тарифной зоны. То есть Т1 = 3544.5465, в следующую сработку Т1 уже 0.001, в следующую итерацию Т1 = 3544.6875 и так далее.

Я прекрасно понимаю за что отвечает эта переменная, мне не понятно почему ее значение именно отнимается, а не прибавляется. Ведь логика этой строки должна быть:
[израсходовано в тарифе] = [всего израсходовано] - [израсходовано с последнего замера] + [точка отсчета]

Опять же,касательно моей версии:

  • у меня Ch1init это виртуальное устройство, дабы не лезть все время в код я корректирующее показание ввожу через WebUI или приложение на телефоне. Но данные в этой переменной либо вовсе не учитываются,либо учитываются коряво. Ввожу корректировку = 3, а отсчет ведется с 2. Возвращаю корректировку в 0, показания сбиваются на отрицательные…

Допустим, показание сейчас 10 кВт-ч, из них 2 тестовых, которые не нужно учитывать. Ch1init = 2, его и вычитаем из текущего показания. Вроде бы это очевидно же?

Наверно) Моя логика действует по другому. Спасибо.

А что насчет вывода разных данных в результат?