Обработка импульсов счетчика электро энергии на wb-mcm8

Добрый вечер. Реализую проект учета электро энергии, есть некоторое количество счетчиков с импульсным выходом, успешно подключены к wb-mcm8. С помощью нейронки написано виртуальное устройство в rules.js, для синхронизации данных на счетчике и отображении в панели устройств, отображение мощности, и корректировка показаний на случай разбежки. Суть проблемы , не понятен правильный механизм сохранения данных показаний , которые копятся нарастающим итогом после перезагрузки контроллера или правил. Сам модуль сохраняет данные импульсов, а вот рассчитанные по формуле кВт должны сохраняться средствами контроллера. В противном случае теряется весь смысл такого учета, если при отключении придётся заново бежать к счетчику. Подскажите пожалуйста как реализуется данный механизм. Пытался в коде указать отдельный файл для автоматического и ручного сохранения данных, но он почему то не создается, как будто нет доступа , в логах ошибка. Может есть какой то вариант?

Добрый день.

Подскажите какую директорию использовали?
Какой путь указывали?
Попробуйте записывать в /var/lib/wirenboard/user/
если директории /user нет её необходимо будет создать.
Но я посоветовал бы рассмотреть варианты внешнего мониторинга и хранения подписавшись на топик виртуального устройства через тот же Zabbix Agent например

1 лайк

Добрый день
Пытался так, но похоже нет доступа и файл не создаётся

Сейчас так, но результат тот же
],
storageFile: “/tmp/energy_state.json”,
settings: {
powerResetTimeout: 30000,
saveInterval: “*/1 * * * ",
powerUpdateInterval: "
/3 * * * * *”
}

Может кадать в топик mqtt и забирать из него при запуске ?

Уточнил у коллег ECMAScript не работает с файлами напрямую, поэтому всё же что то стороннее, с подпиской на топик.

Здравствуйте.
Если остались вопросы к технической поддержке, пишите, с удовольствием отвечу.

Добрый день, так и не получилось подгружать данные после перезагрузки, не через файл не через топик mqtt. Я так полагаю через примонтированный внешний диск тоже не получится, может тут у кого то были подобные проекты, ведь это очень важно для работы с электрическим счетчиком. у меня их 40 штук и потом оббежать все и переписать показания не такая простая задача.

Можно про этот ваиант поподробней я не очень большой специалист )))

Добрый день!
В нашем движке правил есть подходящий механизм для решения вашей задачи – Persistent Storage (постоянное хранилище). О нем есть раздел в документации к движку правил.

Данные в этом хранилище записываются на диск и сохраняются между перезагрузками.
Нейронка, видимо, этот момент проморгала)

Вам в правиле надо создать такое хранилище:

var ps = new PersistentStorage("energy_counters", { global: true });

Если хранилища с таким именем ещё нет – оно будет создано, а если есть, то просто подхватится.
Считайте, что “energy_counters” – это файлик на диске, в котором хранятся все переменные хранилища.

В вашем случае можно даже не хранить пересчитанные значения, а просто вычислять при каждом обновлении. Зная, например, что на 1 кВт*ч приходится 1000 импульсов, и учитывая, что в момент времени, когда на счетчике показывалось 2345.6 кВт*ч, счетчик входа 1 WB-MCM8 насчитал к этому моменту 33333 импульса, текущее потребление по счётчику импульсов WB-MCM8 можно пересчитать так:

Eтекущее = 2345.6 + (Nтекущее - 33333) / 1000 (кВт*ч)

Вот это смещение, 2345.6, и соотвтетсвующее ему количество импульсов, 33333, имеет смысл хранить в постоянном хранилище:

ps["e_offset1"] = 2345.6;
ps["n_offset1"] = 33333;
...

ps["e_offset8"] = 1234.5;
ps["n_offset8"] = 22222;

Эти значения можно задать однократно: создайте правило: оно выполнится, значения запишутся в хранилище, а затем удалите правило или закомментируйте присваивания.
Либо, для удобства, создать отдельное виртуальное устройство, куда можно заносить смещения для каждого канала, одним правилом сохранять эти значения в постоянном хранилище, а другим правилом уже обрабатывать изменения показаний WB-MCM8 и в виртуальном счётчике отображать пересчитанные значения потреблённой энергии.

спасибо, буду пробовать

Все получилось, спасибо большое!

Еще один маленький вопрос, а для того чтобы реализовать хранение и обработку данных лучше использовать внешнюю БД и Grafana ?? Или можно как то проще, просто стандартный график данных хранит показания не более трех дней.

Успехов вам!
Для встроенной базе данных wb-mqtt-db в настройках можно задать количество сохраненных отсчетов, гораздо больше, чем три дня. Подробнее тут. Количество отсчетов определить из частоты сохранения и требуемой глубины. Для показателя создать отдельную группу.
Экспортировать данные для обработки можно с помощью wb-mqtt-db-cli.
Но если привычна Grafana, то можно в нее экспортировать. На самом контроллере движок какой-нибудь mysql я бы не стал запускать.

спасибо

1 лайк