Опрос электросчетчика Меркурий 230

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Andrey_B
Администратор
Сообщения: 3611
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 08 июн 2013, 09:38

Евгений Викторович, так я же написал, что поправил ваш mercury-test.php
Теперь вот так:

Код: Выделить всё

root@debian-evg:/var/www/scripts# php mercury-test.php
Total: 7283.904
Total T1: 4017.333
Total T2: 3266.571
Total T3: 0
Pv: 57.78 - 57.78 - 0
Сверьте с показаниями на дисплее. К 3-фазе наверное ничего не подключено, а вот почему 1 и 2 фаза одинаковые значения пока не знаю.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 08 июн 2013, 13:17

С показанием на экране совпадает по первой фазе. К другим фазам ничего не было подключено. Сейчас подал небольшую нагрузку на две остальные фазы, что бы можно было видеть не пустые значения (см картинку - http://asency.com/debian_c2000_mercury230_1.jpg). Сейчас на одной фазе - компьютер, а на двух других по лампочке.

После подключения лампочек показания следующие:

Код: Выделить всё

root@debian-evg:~# php /var/www/scripts/mercury-test.php
Total: 7284.123
Total T1: 4017.552
Total T2: 3266.571
Total T3: 0
Pv: 93.65 - 57.19 - 17.7
Подключены две лампочки 20 ватт на вторую и третюю фазы. Если пощелкать на счетчике, то моментальные значения мощности на первой фазе 57, на второй 17, на третей 18. Сумма 93.

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

Andrey_B
Администратор
Сообщения: 3611
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 09 июн 2013, 09:17

Евгений Викторович, с мгновенным потреблением все понятно. В отличие от моего, ваш счетчик передает Общее потребление, Фаза 1, Фаза 2, Фаза 3.
Поправил ваш mercury-test.php. Попробуйте.

Что касается тарифов. Может быть, это можно сделать из родного конфигуратора? Попробуйте еще пароль 222222. Насколько я помню, там два уровня доступа с разными возможностями.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 09 июн 2013, 13:33

Да, увидел изменения. Спасибо. Странно, что одинаковые счетчики по разному передают данные.

По поводу построения графиков хотел спросить, почему предпочитаете использовать mysql, а не RRD? В вашем механизме используется не обобщение, а пропуск значений для построения графиков определенного диапазона.

Andrey_B
Администратор
Сообщения: 3611
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 09 июн 2013, 22:14

СУБД в моем понимании - это основной, главный, центральный элемент программного обеспечения Умного Дома.
Посредством СУБД различные компоненты системы обмениваются информацией, используют общие данные.
СУБД необходим не только и не столько для построения графиков, сколько в качестве единого хранилища данных.
Данных в СУБД Умного Дома много и разных и только некоторые данные являются циклическими.
Для всех этих целей нужна полноценная СУБД, которой RRD не является.
Сглаживание и прочая аппроксимация - это дело графических библиотек и прикладных программ.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 02 июл 2013, 16:40

Для просмотра информации о потребленной энергии я сделал такую страничку - http://asency.com/files/1.php Крупные цифры позволяют открывать страницу в мобильном устройстве и без масштабирования все нормально видно.

Только информация о потреблении. Что пришло в голову, то и сделал. У кого есть соображения, чего не хватает или что лишнее?

зы
Страница будет доступна не постоянно. Может месяц-другой повисит, а потом я ее уберу. Еще раз хочу сказать спасибо Andrey_B за помощь в считывании данных со счетчика.

dimonix
Сообщения: 365
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Опрос электросчетчика Меркурий 230

Сообщение dimonix » 02 июл 2013, 22:41

Евгений Викторович писал(а):Для просмотра информации о потребленной энергии я сделал такую страничку - http://asency.com/files/1.php
...
Красиво! Поделитесь исходниками, пожалуйста :)

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 03 июл 2013, 10:27

Да без проблем, хотя там особо делиться нечем. Файл, который опрашивает счетчик предоставил Andrey_B. Есть только файл записи в базу и чтения. Графики строятся на библиотеке http://www.rgraph.net/. Куда отправить?

dimonix
Сообщения: 365
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Опрос электросчетчика Меркурий 230

Сообщение dimonix » 03 июл 2013, 11:20

Евгений Викторович писал(а):Да без проблем, хотя там особо делиться нечем. Файл, который опрашивает счетчик предоставил Andrey_B. Есть только файл записи в базу и чтения. Графики строятся на библиотеке http://www.rgraph.net/. Куда отправить?
Ну интересует в первую очередь красивый интерфейс. Остальное дело техники :) Ответил в ЛС.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 03 июл 2013, 11:46

Рад, что понравился дизайн, хотя это минимализм. Интерфейс можно сграбить и просмотром исходников самой страницы. Только не пинать ногами в живот на тему кода. Не все красиво ;)
Отправил.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 03 июл 2013, 12:27

Забыл сделать небольшое пояснение. Потребление за день (который столбик) по мере накопления данных за несколько лет будет показывать за текущий день этого года, прошлого и т.д. Всего 4 столбика. Аналогично и для графиков по годам - по мере накопления информации будет отображаться 4 линии графика. Наведение мышкой на точку графика показывает цифру в виде всплывающей подсказки. Это что бы таблицу с цифрами не рисовать, но иметь возможность сравнить с данными в квитанциях, которые выставляют за оплату электроэнергии.

aonmaster
Сообщения: 9
Зарегистрирован: 04 июл 2013, 06:17

Re: Опрос электросчетчика Меркурий 230

Сообщение aonmaster » 04 июл 2013, 06:33

Andrey_B, я подключил 6 счётчиков в своём многоквартирном доме на RS-485, и использую Ваш скрипт из demo комплекта.
Пока пытаюсь мониторить напряжение мгновенное (параметр 08h 16h 11h) . 3 счётчика Меркури-230 ART 01 прямого включения (лифты), а 3 Меркури-230 ART-03 - через Трансформаторы Тока. Столкнулся с тем, что разные счётчики на запрос выдают по-разному данные:

Код: Выделить всё

php /var/www/1v.php 23
PHP Notice:  Undefined offset: 4 in /var/www/1v.php on line 159
Phase1:15819.52 Phase2:228.11 Phase3:226.41 229.61 
root@raspberrypi:/var/www#
Последнее значение - это

Код: Выделить всё

echo "Phase1:$Uv[0] Phase2:$Uv[1] Phase3:$Uv[2] $Uv[3] $Uv[4]";
пятый элемент в массиве вывода, которого счетчик не выдаёт. Но другой счётчик (такой же) выдаёт сразу с 0-го параметра все напряжения:

Код: Выделить всё

php /var/www/1v.php 14
PHP Notice:  Undefined offset: 3 in /var/www/1v.php on line 159
PHP Notice:  Undefined offset: 4 in /var/www/1v.php on line 159
Phase1:232.83 Phase2:231 Phase3:221.92  root@raspberrypi:/var/www#
То есть уже 2 элемента пустых, 3-й и 4-й.
Как это понять, ведь счётчики одинаковы и дата выпуска декабрь 2012г. Получается, для каких-то счётчиков я должен выводить не Uv[0] для фазы 1, а Uv[1] и так далее?

К тому же, иногда лезет откровенная лажа:

Код: Выделить всё

 php /var/www/1v.php 23
PHP Notice:  Undefined offset: 4 in /var/www/1v.php on line 159
Phase1:26214.75 Phase2:110101.37 Phase3:24904.56 59666.81 
root@raspberrypi:/var/www#
Сразу еще раз даешь запрос - уже более-менее, т.к. около 220В. Скрипт во вложении. Помогите, пожалуйста. Пробовал разные задержки $sleep_time = 500000; - но всё точно так же.
Если надо, могу дать Вам ssh вход на сервер.

Кто подскажет, я хотел бы строить разные графики для разных параметров (использую сейчас Cacti и RRD). Так вот, каждые N минут cacti запускает кучу этих скриптов, которые ломятся через один и тот же адаптер (USB порт). Естественно, возникает конфликт и (подозреваю, поэтому) в памяти остаются эти процессы php 1v.php - множатся и забивают RAM. Как в скрипте сделать, чтобы если php_dio занят, то ждать, скажем, 3 секунды, пытаться снова и если опять занят, то выходить по таймауту? а то сейчас если неверную команду счетчику дашь (CRC не совпало) - то скрипт висит и висит...
Вложения
1v.rar
php крипт в rar архиве, просто php файл не хочет прикрепляться
(1.68 КБ) 624 скачивания
Последний раз редактировалось aonmaster 04 июл 2013, 13:04, всего редактировалось 1 раз.

xace
Сообщения: 56
Зарегистрирован: 12 май 2011, 18:07

Re: Опрос электросчетчика Меркурий 230

Сообщение xace » 04 июл 2013, 12:55

А где можно этот скрипт скачать?

Andrey_B
Администратор
Сообщения: 3611
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 08 июл 2013, 12:19

Между инициализацией и командой попробуйте добавить задержку (хотя бы секунду). У вас ее нет.
4-го элемента массива быть не может ни при каких условиях. Все счетчики должны выдавать значения напряжения с 0 по 2.
Правильно сделать один скрипт, который по очереди опрашивает счетчики и складывает все в БД. Из нее уже и рисовать графики.
Но если делать как вы, то надо, чтобы скрипты создавали файловые флаги (типа адаптер занят). При окончании работы с адаптером, флаг удаляется. Это (отсутствие флага) является сигналом для другого скрипта для начала работы. Если функция php_dio подвисла, то ничего внутри скрипта вы не сделаете. Убить скрипт можно только внешними средствами. Никакого таймаута в этих функциях не предусмотрено.

aonmaster
Сообщения: 9
Зарегистрирован: 04 июл 2013, 06:17

Re: Опрос электросчетчика Меркурий 230

Сообщение aonmaster » 09 июл 2013, 05:43

Andrey_B, Спасибо огромное! Вроде заработало, поставил $sleep_time между каждым запросом.
Про базу уже думал, видимо, к этому и приду. Вот что значит гуру умного дома! 8-) :D

aonmaster
Сообщения: 9
Зарегистрирован: 04 июл 2013, 06:17

Re: Опрос электросчетчика Меркурий 230

Сообщение aonmaster » 09 июл 2013, 17:44

Andrey_B писал(а):Убить скрипт можно только внешними средствами. Никакого таймаута в этих функциях не предусмотрено.
Где-то на этом форуме вычитал, что php_dio устаревшая функция, и сейчас модно fwrite(). Будет ли с нею работать Ваш скрипт, и будет ли это практичнее?

Andrey_B
Администратор
Сообщения: 3611
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 09 июл 2013, 19:11

php_dio давно уже не является частью стандартного PHP.
fopen(), fwrite(), fread() работать будут, но:
а) также нет никаких таймаутов
б) нет никаких функций для настройки Serial-порта, как dio_tcsetattr(). То есть настройку в частности скорости порта в этом случае следует производить сторонними программами.
Другими словами - односвинственно.

morozov-ch
Сообщения: 1
Зарегистрирован: 10 мар 2014, 12:12

Re: Опрос электросчетчика Меркурий 230

Сообщение morozov-ch » 10 мар 2014, 12:52

Уважаемые господа.
Вопрос по опросу счетчика Меркурий 230-АТ01 PRQSIN
Делаю как в примерах, но на строчке $result = dio_read($fd, 15); зависает.
В чем может быть проблема?
Заводской номер заканчивается на 332
Интерфейс RS-485
код программы для теста
<?
$fd = dio_open('/dev/ttyNSC0', O_RDWR);
echo "1";
dio_write($fd, "\x32\x01\x01\x01\x01\x01\x01\x01\x01\x3A\xE0", 11);
echo "2";
$result = dio_read($fd, 15);
echo "3";
dio_close($fd);
echo "4";
?>

baikaltech
Сообщения: 20
Зарегистрирован: 16 окт 2013, 18:13
Откуда: Иркутск

Счётчик меркурий 230

Сообщение baikaltech » 28 авг 2014, 14:43

Добрый день, использую счётчик меркурий 230 ART02CN, купил Преобразователь USB в RS485 http://carduino.ru/product_info.php?products_id=1975 и воткнул в MR-3020 OpenWRT. Возможности поставить php dio нет. Для этого на bash накидал скриптик

Код: Выделить всё

#!/bin/sh -ax

echo "Content-type: text/html"
echo ""

port="ttyUSB0"
cmd=`echo ${QUERY_STRING} | sed "s/x/-x/g"`
cmd=${cmd//-/\\}
cat /dev/ttyUSB0 & echo -en ${cmd} > /dev/ttyUSB0 ; sleep 2; kill $!
Работает через раз, не могу найти косяк

baikaltech
Сообщения: 20
Зарегистрирован: 16 окт 2013, 18:13
Откуда: Иркутск

Re: Опрос электросчетчика Меркурий 230

Сообщение baikaltech » 29 авг 2014, 05:45

Модифицировал скрипт до такого - проблемы пропали

Код: Выделить всё

#!/bin/sh -ax

echo "Content-type: text/html"
echo ""

cmd=`echo ${QUERY_STRING} | sed "s/x/-x/g"`
port="ttyUSB0"
ans="/tmp/1"
anw=""
com=${cmd//-/\\}
echo -en "$com" > /dev/$port &
( dd if=/dev/$port of=$ans count=128 ) & `seq 5000`; kill $!
anw="`hexdump -ve '1/1 "%.2x"' $ans`"
com=${com//\\x/}
echo "$anw"
получил значение счётчика, вольтаж, ампераж с Cosf и ваттами проблема
Посылаю запрос на счётчик "x00x08x16x00x8Fx86" в ответ приходит "0040b234401531401900408403ff60" судя по "мануалу" нужны символы 00[40b234][401531][401900][408403]ff60 преобразую в "h40b234" потом hexdec("h40b234") получаю не то что надо, что я делаю не так?

Ответить