Страница 2 из 6

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

Добавлено: 08 июн 2013, 09:38
Andrey_B
Евгений Викторович, так я же написал, что поправил ваш 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 фаза одинаковые значения пока не знаю.

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 дает нулевое значение потому, что этот счетчик не настроен на работу с тремя тарифами, а только с двумя. Я сам не знаю как можно изменить. Если знаете, то подскажите как это сделать. Дело в том, что с этим счетчиком я могу делать все что хочу и я, по схожей с вами схеме, поставлю просто второй счетчик на вводе в квартиру и не буду трогать внешний. Если вы говорите, что разница в показаниях внешнего и внутреннего счетчиков минимальна, то это очень хорошо.

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

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

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

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

Добавлено: 09 июн 2013, 13:33
Евгений Викторович
Да, увидел изменения. Спасибо. Странно, что одинаковые счетчики по разному передают данные.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 04 июл 2013, 06:33
aonmaster
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 не совпало) - то скрипт висит и висит...

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

Добавлено: 04 июл 2013, 12:55
xace
А где можно этот скрипт скачать?

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

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

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

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

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

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

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

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

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

Добавлено: 10 мар 2014, 12:52
morozov-ch
Уважаемые господа.
Вопрос по опросу счетчика Меркурий 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";
?>

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

Добавлено: 28 авг 2014, 14:43
baikaltech
Добрый день, использую счётчик меркурий 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 $!
Работает через раз, не могу найти косяк

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

Добавлено: 29 авг 2014, 05:45
baikaltech
Модифицировал скрипт до такого - проблемы пропали

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

#!/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") получаю не то что надо, что я делаю не так?