Sibprompost.ru

Стройка и ремонт
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Интеграция счётчика Меркурий-231 в Home Assistant через VR-007

Интеграция счётчика «Меркурий-231» в Home Assistant через VR-007.3

Электросчетчики «Меркурий-23x», если кто-то не знал, отличаются умом и сообразительностью возможностью дистанционного считывания показаний. Насколько я понимаю, эта возможность предназначена в первую очередь не для конечных пользователей, а для специалистов предприятий энергосбыта. Но тем не менее, есть возможность считывания показаний и простыми обывателями. При этом никакие правила и законы не нарушаются — ведь мы не изменяем работу счётчика, а лишь читаем его показания.

Я не буду тут останавливаться на способах подключения к счётчику (инвазивных и неинвазивных), протоколах передачи данных и т.д., и т.п. Всю эту информацию вы можете прочитать здесь — на сайте не то самого производителя счётчиков, не то кого-то, очень близкого к нему.

Для автоматизированного учета показаний счётчика предлагается приобрести роутер VR-007.3, описание которого вы можете в подробностях прочитать здесь, а также считыватель показаний, который нужно выбрать в зависимости от ссособа подключения к счетчику — RS485, IrDA или оптопорт.

Вкратце лишь скажу, что роутер VR-007.3 представляет собой обычный китайский WiFi-роутер модели Youku YK1 с прошивкой OpenWRT и кое-какими дополнениями. Благодаря этим дополнениям, веб-интерфейс роутера содержит панель управления счетчиком.

Всё бы хорошо, но только вот эта «система контроля» получается «замкнутой на саму себя». Автор разработки предлагает нам любоваться красивой веб-страницей, но не даёт практически никакх возможностей по передаче полученных данных куда-либо «вовне». Все данные сохраняются в базе данных SQLite, расположенной в файловой системе роутера.

Тем не менее, автор всё же предлагает нам несколько не совсем удобных вариантов экспорта данных во внешний мир. Это:

  1. Ежедневная (вернее, еженощная) рассылка по e-mail кратенькой текстовой строки, содержащей текущие показания счетчика с учетом раздельной тарификации по времени суток (если такая есть).
  2. Передача показаний на «narodmon.ru» (для этого, соответственно, требуется иметь там аккаунт).
  3. Передача показаний на MQTT-брокер.
Читайте так же:
Обязанность по установке электросчетчика

Лирическое отступление: когда я спросил автора разработки, почему он не сделал хотя бы экспорт таблицы показаний в CSV, он ответил мне, что это можно сделать на narodmon.ru. В-общем, поезд «Москва-Тверь» идет через Владивосток :-).

Рассмотрим нюансы перечисленных способов экспорта данных подробнее.

Способ 1 (email-рассылка). Раз в сутки (в 01:00) вы (или тот, кого вы укажете в качестве адресата) будет получать на электронную почту сообщение с таким текстом:

То есть, заводской номер счётчика и текущие показатели кВтч по четырем тарифам (в моем примере используется два тарифа — дневной и ночной — поэтому в остальных тарифах нули).

На этом все. Больше никаких данных и никакой статистики. Якобы, именно в таком формате можно передавать показания электрокомпании в той местности, где уважаемый автор имеет честь проживать (если мне память не изменяет, это Нижегородская область). Большое спасибо, конечно — но страна у нас большая, и далеко не всее электрокомпании принимают показания счётчиков имено в таком формате.

К числу «странностей» этого способа следует также отнести и то, что для каждого проданного VR-007.3 заводится свой персональный аккаунт электронной почты, который является «автором» сообщений, а для рассылки принудительно (т.е., без возможности выбора или назначения в настройках) используется SMTP-сервер, предоставленный автором.

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

Способ 2 (narodmon.ru). Ну что тут сказать? Если кому-то хочется, чтобы показания его счётчика видели все желающие, а злоумышленники при этом еще и могли видеть географические координаты расположения счетчика, а также вычислять по величине энергопотребления периоды, когда хозяев нет дома, то пользуйтесь на здоровье — это ваше право. Если же «народный мониторинг» нужен вам лишь как промежуточное звено для возможности экспорта данных, то. не знаю.

Читайте так же:
Почему электросчетчик сам крутиться

(Тут мне подсказывают, что на «народмоне» можно ограничить видимость и сделать так, чтобы счетчик был виден только вам. Хорошо — но тогда зачем эти данные вообще публиковать на стороннем сервере? Вопрос философский, в-общем).

Способ 3 (MQTT). Собственно, на этот способ я и возлагал самые большие надежды, поскольку рассчитывал через MQTT получать показания в Home Assistant. Но первое, с чем я сразу столкнулся — это «непроходимость» данных. Не знаю, кто какой брокер использует, а я использую Mosquitto. И мой «москит» выдал мне в логах, что не смог авторизовать клиента из-за некорректного ClientID. Усердное копание в логах ошибок показало, что VR-007.3 в качестве ClientID сообщает брокеру свой MAC-адрес в формате «XX:XX:XX:XX:XX:XX» — то есть, с двоеточиями. А Mosquitto не принимает двоеточия и отвергает такой ClientID.

С этого момента я перестал рассматривать VR-007.3 как «чёрный ящик» и перешёл в активную фазу работы. Первое, что я сделал — это перестал переписываться с автором, ибо его вечные «не в этой жизни», «мы подумаем» и «может быть когда-нибудь реализуем» мне порядком надоели.

В-общем, пользуясь открытостью платформы OpenWRT, я залез в файловую систему роутера и начал копаться в файлах. Выяснил, что данные для передачи формируются в файле /www/pages/loop.php, и участок, ответственный за формирование MQTT-payload’а выглядит так (строка 1190 или около того):

Как и говорилось выше, автор решил в качестве ClientID подставить MAC-адрес роутера, сохраненный в базе данных с настройками. А адрес этот содержит двоеточия, которых не должно быть в ClientID.

Здесь можно пойти сложным путём — например прописать функцию, убирающую двоеточия из строки. Или создать дополнительный элемент настроек для задания ClientID. Но можно поступить просто — прописать ClientID открытым текстом. Вот так:

Читайте так же:
Электронная схема электросчетчика меркурий 201

Проблему с «инвалидным» ClientID мы решили. Теперь перейдем к анализу формата данных, передаваемых роутером на MQTT-брокер. Вот, что мы имеем изначально:

То есть, роутер пишет в топик «/VR007/xxx» (где xxx — тип счетчика, сохранённый в базе данных настроек) 23 параметра в простом текстовом формате. Чтобы прочитать эти данные из Home Assistant’а, нам придется создать (ручками) 23 (. ) сенсора, логически друг с другом не связанных. Но если мы изменим формат публикации на JSON, то тогда сможем получить 1 (всего!) сенсор с 23-мя атрибутами — то есть, что-то, более-менее похожее на целостный объект. Первым делом подкорректируем выдачу даты-времени (переменная $melbdate3). По умолчанию формат выдачи выглядит так: 2021-03-17 16:10:07

Я не знаю, почему, но Home Assistant’у больше по душе вот такая выдача: 2021-03-17T16:10:07

Проблема решается просто: перед блоком команд типа $mqtt->publish... вставляем строчку:

То есть, создаем переменную, которая примет значение даты-времени в «исправленном» формате.

После этой строки добавим еще парочку — здесь мы зададим значения переменным, определяющим топик и payload.

И в заверщение напишем команду отправки данных брокеру. Должно получиться примерно так (название топика можно придумать любое):

Старый блок команд $mqtt->publish. по желанию можно удалить, можно закомментировать, а можно и оставить — ничего страшного от того, что информация будет писаться сразу в два топика, не будет.

Теперь наша выдача в MQTT-брокере будет выглядеть так:

Как говорилось в одном старом анекдоте, «Ну, во-первых, это красиво. «

Теперь идем в Home Assistant и создаем один-единственный сенсор:

В интерфейсе Home Assistant’а идём в раздел «Панель разработчика» и на закладке «Состояния» в поле «Объект» вводим или выбираем из списка: sensor.m231_sensors_common. И получаем:

Читайте так же:
Как защитить электросчетчик от молнии

Собственно говоря, на этом всё. Теперь мы можем поступать с полученными данными, как захотим.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector