VR-007.3 - просьба о доработке функционала

126 views
Skip to first unread message

Booroondook Zubiler

unread,
Nov 19, 2020, 8:33:02 AM11/19/20
to Электросчетчики Меркурий
1. В устройстве полностью отсутствует протоколирование работы (ведение логов). Из-за этого невозможно провести нормальную диагностику невозможно. Например, в моем конкеетном случае данные собираются примерно раз в 40 минут - 1 час. Есть подозрение, что неудачно расположен IRDA-приемник. Но хотелось бы все же иметь нормальный лог работы, из которого было бы понятно, что конкрентно не так. То же самое и по работе с MQTT и Narodmon - данные не передаются, а по какой причине - неизвестно. Логов нет.
2. По интеграции с MQTT - хотелось бы иметь настраиваемое имя клиента, потому что некоторые MQTT-брокеры требуют это. Как я понимаю, устройство в качестве имени клиента принудительно использует MAC-адрес с разделением сегментов двоеточиями. Некоторые брокеры не любят спецсимволы и знаки препинания в именах клиентов. Встречаются также брокеры, не требующие авторизации - этот момент также нужно учесть в настройках.
3. Очень не нравится, что SMTP-реквизиты для отправки почты (сервер, логин, пароль, адрес отправителя) заданы жёстко в коде и не могут быть изменены. Будем, конечно, надеяться на честность разработчика и на то, что через эти реквизиты не утекает в сеть конфиденциальная информация (серийный номер счетчика, статистика энергопотребления и т.д.). Ведь к примеру по номеру счетчика несложно узнать адрес его установки. По статистике энергопотребления можно узнать, когда хозяева дома, а когда нет. Ну, и так далее - все всё понимают.
Поэтому реквизиты SMTP нужно вынести в настройки для указания их самим пользователем. В качестве "бонуса" можно предложить использовать реквизиты от разработчика, но не навязывать их принудительно.
4. Отсутствует возможность выгрузки информации в виде файлов. Конечно, можно мышкой на экране обводить таблицы, а затем делать "копипаст", но хотелось бы больше совершенства.

Vlad Rusanov

unread,
Nov 20, 2020, 1:27:05 AM11/20/20
to Электросчетчики Меркурий
1) Это не так. Система OpenWrt имеет свой лог Openwrt - Status - System Log  (в этом логе видны все запускаемые скрипты, запуск драйверов и процессов), также есть лог ядра Openwrt - Kernel Log.
Ручной запуск скрипта опроса можно вывести в лог браузера, но в вашем случае лог говорит, что данные не получены и отправлять на внешние серверы физически нечего поэтому до коннектов mqtt дело не доходит.
 Причин может быть несколько. Одна это невозможность получения данных и приемопередатчик стоит как-то не так, проверяется легко шнур спускается из шкафа подключается к ноутбуку и при закрытых дверках пытаемся работать конфигуратором. Ответы должны стабильными. После этого подключаем приемопередатчик в роутер и он тоже должен получать данные.  Если нет, то отключаем VR-007 от своего wiFi, стыкуемся Ethernet кабелем и пытаемся получить данные либо вручном режиме (команду я вам послал), либо ждем данных в вебинтерфейсе. Если проблемы неразрешимы с данным каналом связи, то нужен канал со стабильным получением данных, например RS485.
2) Передача по MQTT  особых проблем ни у кого не вызывает, пожелания учту. Пример передачи был взят с Narodmon.ru
3) Первые два года мы давали возможность настраивать почтовые серверы клиенту, но все до одного сервера mail.ru/Yandex.ru/gmail.com/rambler.ru и прочии через некоторое время забанивают ящик клиента при отправках через smtp, считая что мы рассылаем спам. Попытки списываться с техподдержкой этих серверов ни к чему не привели. Из-за этого пришлось организовать свой домен и свой почтовый сервер. Каждый роутер получает уникальный почтовый адрес и пароль. Отправка писем идет по протоколу smtp и не остается на сервере.
4) Весь этот функционал лежит на Narodmon.ru и оттуда можно выгружать эти таблицы. В новой моделе роутера при опросе профилей будут возможности выгрузки профилей xml, csv.

четверг, 19 ноября 2020 г. в 16:33:02 UTC+3, booro...@gmail.com:

Booroondook Zubiler

unread,
Nov 20, 2020, 3:55:56 AM11/20/20
to Электросчетчики Меркурий
1) Системный лог OpenWRT сообщает лишь о времени запуска cron-задач. Вот выдержка из такого лога:

Fri Nov 20 03:45:00 2020 cron.info crond[1130]: USER root pid 3020 cmd php-cgi /www/pages/write_fn.php &>/dev/null
Fri Nov 20 03:46:00 2020 cron.info crond[1130]: USER root pid 3022 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:47:00 2020 cron.info crond[1130]: USER root pid 3032 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:48:00 2020 cron.info crond[1130]: USER root pid 3034 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:49:00 2020 cron.info crond[1130]: USER root pid 3036 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:50:00 2020 cron.info crond[1130]: USER root pid 3038 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:50:00 2020 cron.info crond[1130]: USER root pid 3039 cmd php-cgi /www/pages/write_fn.php &>/dev/null
Fri Nov 20 03:51:00 2020 cron.info crond[1130]: USER root pid 3041 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:52:00 2020 cron.info crond[1130]: USER root pid 3043 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:53:00 2020 cron.info crond[1130]: USER root pid 3045 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:54:00 2020 cron.info crond[1130]: USER root pid 3047 cmd php-cgi /www/pages/loop.php &>/dev/null
Fri Nov 20 03:55:00 2020 cron.info crond[1130]: USER root pid 3049 cmd php-cgi /www/pages/loop.php &>/dev/null

В логе ядра о работе скриптов ни слова. Там можно узнать, к примеру, как прошло подключение к WiFi, или о том, что подгружен драйвер FTDI и прочая "низкоуровневая" информация.

2) Вот кусок лога от моего MQTT-брокера (192.168.0.70 - это IP-адрес VR-007 в моей сети):
2020-11-20T01:35:11: New connection from 192.168.0.70 on port 1883.
2020-11-20T01:35:11: Socket error on client <unknown>, disconnecting. 
Как видим, брокер отклоняет подключение "неизвестного" клиента
3) Вы можете просто дать клиенту выбор - использовать ли предлагаемые вами реквизиты, или же использовать свои. В моем случае, например, у меня в локальной сети есть свой собственный SMTP-сервер, который как раз и занимается рассылкой писем от сетевого принтера, камер видеонаблюдения и т.д. И я вполне мог бы его задействовать и для рассылки сообщений от VR-007.
4) Надеюсь, что ваши доработки и исправления будут в порядке апгрейда доступны и тем, кто уже приобрел вашу продукцию.

Я тут провел кое-какой анализ работы ваших скриптов и сделал следующие выводы:
Скрипт передает данные во "внешний мир" только при условии, что сеанс мониторинга ser2net-порта прошел удачно. С одной стороны, логика в этом есть, но с другой стороны, надо бы учитывать и то, что в условиях нестабильного ИК-соединения такие сеансы могут часто терпеть неудачу (как и показывает мой опыт). Почему бы не сделать так, чтобы во "внешний мир" (MQTT, Narodmon), во-первых, данные передавались бы через заданные промежутки времени независимо от состояния порта, и во-вторых, передавались бы последние данные, сохраненные в базе данных - естественно, с указанием времени, когда они были получены? Думаю, ничего страшного в том, что MQTT/Narodmon будут в течение какого-то времени получать одни и те же данные, не будет.
пятница, 20 ноября 2020 г. в 09:27:05 UTC+3, vladr...@gmail.com:

Booroondook Zubiler

unread,
Nov 20, 2020, 5:38:21 AM11/20/20
to Электросчетчики Меркурий
И еще одно небоьшое предложение по функционалу. Сделайте возможность хранения данных в базе данных внешнего сервера (например, MySQL). То есть, опять же - если пользователь не хочет, то пусть будет как есть - внутренние файлы sqlite. Но при желании, чтобы можно было прописать внешний сервер и хранить данные там. Тогда отпадет вопрос о выгрузке данных, подключении к MQTT, механизме встраивания в "умный дом" и многое другое. Пользователь получит возможность самостоятельно получать и обрабатывать данные счетчика так, как считает нужным - в том числе, делать вычисления, вести еже(дневную/недельную/месячную) статистику и т.д.

пятница, 20 ноября 2020 г. в 11:55:56 UTC+3, Booroondook Zubiler:

Booroondook Zubiler

unread,
Nov 20, 2020, 8:02:00 AM11/20/20
to Электросчетчики Меркурий
Ну вот - первый положительный результат. Влез в loop.php, нашел там вот этот кусок кода:
$mqtt = new phpMQTT($db->mqtt_server, $db->mqtt_port, $db->MAC);
(т.е., в качестве имени клиента брокеру посылается MAC-адрес роутера)
заменил на
$mqtt = new phpMQTT($db->mqtt_server, $db->mqtt_port, "MERC_XXXXXX");
(вместо XXXXXX - три последних октета MAC-адреса)
и теперь лог MQTT-брокера выдал вот это:
2020-11-20T15:20:06: New connection from 192.168.0.70 on port 1883. 
2020-11-20T15:20:06: New client connected from 192.168.0.70 as MERC_XXXXXX (p1, c1, k10, u'homeassistant'). 
2020-11-20T15:20:06: No will message specified. 2020-11-20T15:20:06: Sending CONNACK to MERC_XXXXXX (0, 0) 
2020-11-20T15:20:06: Received PUBLISH from MERC_XXXXXX (d0, q0, r0, m0, 'VR007/M231/Time', ... (19 bytes)) 
2020-11-20T15:20:06: Sending PUBLISH to 0Kdgy86T2ouj7yhdzgaigG (d0, q0, r0, m0, 'VR007/M231/Time', ... (19 bytes)) 
2020-11-20T15:20:06: Received PUBLISH from MERC_XXXXXX (d0, q0, r0, m0, 'VR007/M231/U1', ... (6 bytes)) 
2020-11-20T15:20:06: Sending PUBLISH to 0Kdgy86T2ouj7yhdzgaigG (d0, q0, r0, m0, 'VR007/M231/U1', ... (6 bytes)) 
2020-11-20T15:20:06: Received PUBLISH from MERC_XXXXXX (d0, q0, r0, m0, 'VR007/M231/U2', ... (6 bytes)) 
.....
2020-11-20T15:20:06: Received PUBLISH from MERC_XXXXXX (d0, q0, r0, m0, 'VR007/M231/E4', ... (5 bytes)) 
2020-11-20T15:20:06: Sending PUBLISH to 0Kdgy86T2ouj7yhdzgaigG (d0, q0, r0, m0, 'VR007/M231/E4', ... (5 bytes)) 
2020-11-20T15:20:06: Received DISCONNECT from MERC_XXXXXX 
2020-11-20T15:20:06: Client MERC_XXXXXX disconnected.

То есть, мое предположение с необходимостью использования "нормального" имени слиента MQTT было верным.
пятница, 20 ноября 2020 г. в 13:38:21 UTC+3, Booroondook Zubiler:
Reply all
Reply to author
Forward
0 new messages