Страница 1 из 4
Сбор показаний электросчетчика Меркурий 200
Добавлено: 30 апр 2016, 13:48
nyasha
Всем привет!
Давно я не была на этом форуме, но сегодня я решила очень важную задачу и решила об этом отписаться.
Я не смогла организовать сбор показаний с м200 два года назад и забила на это. Но сегодня мне "приспичило" и проблема была решена.
Что имеем
1) Сервер на Debian 7
2) Меркурий 200 + Меркурий 221 (CAN2USB преобразователь)
3) Подключаем м221 к серверу, он его видит (о чем сообщает /var/log/messages)
4) При отправке echo "123" > /dev/ttyUSB0 м221 моргает светодиодом
5) Устанавливаем dio для php
6) Не забываем проверить права на dev/ttyUSB0 чтобы www-data мог туда писать и читать оттуда
7) И всё. С помощью dio ничего сделать не удалось. Были перепробованы все параметры dio_open, dio_fcntl, но безрезультатно. Данные отправляются, но при dio_read скрипт висит и ничего не выводит.
8) Зато проблема была решена с помощью решения пользователя этого форума
ТНК, а вернее доработанного решения
Sergey Krasnov (mrkrasser) взятого тут
https://github.com/mrkrasser/MercuryStats/ за что этим товарищам ОГРОМНЕЙШЕЕ человеческое спасибо
Его скрипт успешно работает и с помощью него (наконец-то) удалось получить данные с Меркурия 200.
Надеюсь эта информация поможет тем, у кого Меркурий 200
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 03 май 2016, 09:52
lion_sm
Добрый день.
Данный скрипт также работает и с М206
Впрочем, с dio М206 тоже был запущен, ради спортивного интереса
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 03 май 2016, 10:55
THK
Кто то допилил скрипт... Даже Readme.txt не поменяли.
viewtopic.php?p=460#p460
PS Это не претензия, наоборот приятно, что наработка не пропала даром. Дал ссылку, т.к. там есть инфа по теме.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 04 май 2016, 07:28
nyasha
THK писал(а):Кто то допилил скрипт... Даже Readme.txt не поменяли.
viewtopic.php?p=460#p460
PS Это не претензия, наоборот приятно, что наработка не пропала даром. Дал ссылку, т.к. там есть инфа по теме.
А, так вот почему, мне это всё так знакомо показалось
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 16 май 2016, 16:08
kpp
Есть вариант работы со счетчиком через чистый SHELL(BASH, SH).
Просьба проверить для Меркурий 200.
https://hi.dp.ua/svn/electo_counters/trunk/ user:tat pass:123
в electro_counter.conf указать нужные: DEVICE, COUNTER_SN, PASS_READ, COUNTER_TYPE="merc200.sh"
запускать: sh electro_counter.sh <КОМАНДА>
где <КОМАНДА> для Меркурий 200:
Код: Выделить всё
kwatthour Опрос накопленной энергии
amper Сила тока A (А)
power Мощность P (кВт)
volt Напряжение U (В)
batvolt Напряжение батареи
serialnum Серийный номер счетчика
version Дата версии ПО
datetime Дата время по счетчику
datemake Дата изготовления
last_on Время последнего включения
last_off Время последнего выключения
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 17 май 2016, 21:45
nyasha
Натыкалась я на этот вариант. Но мне нужно было именно PHP, поэтому смотреть не стала
kpp писал(а):Есть вариант работы со счетчиком через чистый SHELL(BASH, SH).
Просьба проверить для Меркурий 200.
https://hi.dp.ua/svn/electo_counters/trunk/ user:tat pass:123
в electro_counter.conf указать нужные: DEVICE, COUNTER_SN, PASS_READ, COUNTER_TYPE="merc200.sh"
запускать: sh electro_counter.sh <КОМАНДА>
где <КОМАНДА> для Меркурий 200:
Код: Выделить всё
kwatthour Опрос накопленной энергии
amper Сила тока A (А)
power Мощность P (кВт)
volt Напряжение U (В)
batvolt Напряжение батареи
serialnum Серийный номер счетчика
version Дата версии ПО
datetime Дата время по счетчику
datemake Дата изготовления
last_on Время последнего включения
last_off Время последнего выключения
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 19 май 2016, 11:29
kpp
Если бы это был "чистый PHP" - вопросов не было.
В существующем варианте через PHP есть вызов команды шелла
// Parameters for port
exec('/bin/stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts');
С таким же успехом вместо всего этого скрипта PHP можно делать:
exec('/bin/bash <path>electro_counter.sh <КОМАНДА>' , $output, $return_var);
Плюсы: не нужно устанавливать dio (не всегда есть возможность его установить), можно использовать любую версию ПХП, как и любой другой язык программирования или вообще обойтись без других языков
А на самом деле есть просьба проверить скрипт со счетчиком меркурий 200
У меня такого счетчика нет, есть только Меркурий 230.
Заранее спасибо.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 23 май 2016, 07:07
nyasha
kpp писал(а):Если бы это был "чистый PHP" - вопросов не было.
В существующем варианте через PHP есть вызов команды шелла
// Parameters for port
exec('/bin/stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts');
С таким же успехом вместо всего этого скрипта PHP можно делать:
exec('/bin/bash <path>electro_counter.sh <КОМАНДА>' , $output, $return_var);
Плюсы: не нужно устанавливать dio (не всегда есть возможность его установить), можно использовать любую версию ПХП, как и любой другой язык программирования или вообще обойтись без других языков
А на самом деле есть просьба проверить скрипт со счетчиком меркурий 200
У меня такого счетчика нет, есть только Меркурий 230.
Заранее спасибо.
dio я тоже не использую. Оно не работает.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 14:17
Булат
Подскажите,пожалуйста,как считать с счетчика "МЕРКУРИЙ 200.2" значение "Накопленная Энергия от сброса".
Напряжение,ток,мощность,это все видит,и корректно отображает.
Делаю так:
$i=0;
$cmd = array(0x00,0x0E,0xAB,0x56,0x27,0x28,0xB2); // Команда "Накопленная Энергия"(адрес,посылка моего счетчика)
$c="";
for($i=0; $i < count($cmd); $i++){$c .= chr($cmd[$i]);} // Сформировать строку символов для посылки в COM-порт
fwrite($f,$c,strlen($c));
$result=fread($f,30);
$T1 = ((ord($result[13])>>4)*1000)+((ord($result[13])&0x0f)*100)+((ord($result[14])>>4)*10)+(ord($result[14])&0x0f)+((ord($result[15])>>4)/10)+((ord($result[15])&0x0f)/100);
$T2 = ((ord($result[17])>>4)*1000)+((ord($result[17])&0x0f)*100)+((ord($result[18])>>4)*10)+(ord($result[18])&0x0f)+((ord($result[19])>>4)/10)+((ord($result[19])&0x0f)/100);
Ответ Т1: 0 Т2: 0
СпасиБо.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 14:31
Andrey2509
В моём скрипте :
$cmd = '00'."0774BE"."27";
$cmd .= bin2hex(crc16_modbus(hex2bin($cmd)));
fwrite($fp, hex2bin($cmd));
$result = myread_port();
$T1 = ((ord($result[5])>>4)*100000)+((ord($result[5])&0x0f)*10000)+(ord($result[6])>>4)*1000+((ord($result[6])&0x0f)*100)+((ord($result[7])>>4)*10)+(ord($result[7])&0x0f)+((ord($result[8])>>4)/10)+((ord($result[8])&0x0f)/100);
$T2 = ((ord($result[9])>>4)*100000)+((ord($result[9])&0x0f)*10000)+(ord($result[10])>>4)*1000+((ord($result[10])&0x0f)*100)+((ord($result[11])>>4)*10)+(ord($result[11])&0x0f)+((ord($result[12])>>4)/10)+((ord($result[12])&0x0f)/100);
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 14:41
Булат
Andrey2509,большое спасибо,все отображается как надо. Почему я раньше не спросил.Перепробовал с $result[?], по разному.То запятая не там,то цифры не те.
А по месяцам,как ?
СпасиБо.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 14:58
Andrey2509
А разве меркурий 200 хранит данные на 1 число каждого месяца? не знал
Я для этих целей как обычно пишу в базу показания каждые 15 мин, а затем sql+php для вывода показаний на 1 число.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 15:22
Aquarius
Andrey2509, можно посмотреть на функцию "crc16_modbus"?
В протоколе счётчиков СЭТ указывается, что контрольная сумма считается с помощью CRC с полиномом MODBUS. Там в результате два байта получается. У Вас тоже на выходе два байта?
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 15:27
Булат
Andrey2509,переделал скрипт,как у Вас(почти),все заработало.
"А разве меркурий 200 хранит данные на 1 число каждого месяца?" -проверял программой "КОНФИГУРАТОР" , там есть таблица по месяцам.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 07 июн 2016, 15:36
Andrey2509
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 11 июн 2016, 15:01
Булат
Мужики,а кто-нибудь пробовал запустить этот скрипт "Чтение данных из счетчиков электроэнергии Merciry 200 2016-05-15 version 1 kohan pavel"(
viewtopic.php?f=1&t=1180#p21834) с "Меркурий 200"?
У меня: " sh ./electro_counter.sh amper
Error! Not answer "/dev/ttyS0"! "
Какой пароль нужен для # пароль записи
PASS_WRITE=?
СпасиБо.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 21 июн 2016, 11:08
kpp
Булат писал(а):Мужики,а кто-нибудь пробовал запустить этот скрипт "Чтение данных из счетчиков электроэнергии Merciry 200 2016-05-15 version 1 kohan pavel"(
viewtopic.php?f=1&t=1180#p21834) с "Меркурий 200"?
У меня: " sh ./electro_counter.sh amper
Error! Not answer "/dev/ttyS0"! "
Какой пароль нужен для # пароль записи
PASS_WRITE=?
СпасиБо.
Меркурия 200 в наличии нет, чтобы проверить. Только через эмулятор.
Давайте вместе проверим.
Для чтения данных из счетчика PASS_WRITE не нужен.
Для вычитки данных из Меркурия 200 в файле electro_counter.conf нужно указать:
Код: Выделить всё
# файл протокола обмена со счетчиком
COUNTER_TYPE="merc200.sh"
# устройство-порт, к которому подключен счетчик
DEVICE="/dev/ваш_девайс"
# серийный номер счетчика
COUNTER_SN=номер_вашего_счетчика (8 цифр)
# AUTO, FREEBSD, LINUX
OS=ваша_ОС
указать параметры COM-порта:
для FreeBSD
DEV_FLAGS=" ixany ignbrk opost cread cs8 -ixon -ixoff -parenb -parodd -hupcl -clocal -cstopb raw"
для Linux Raspberry
DEV_FLAGS_LINUX=" speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke"
для Linux Debian
DEV_FLAGS_LINUX=" cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -ech
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 21 июн 2016, 12:33
Булат
Попробовал дописать две цифры серийного номера,строки PASS_ ,закомментировал.
Результат : Error! Not answer "/dev/ttyS0"! "
Запрос к счетчику идет,на MOXe вспыхивает светодиод.
ответа нет.
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 21 июн 2016, 12:43
kpp
Булат писал(а):Попробовал дописать две цифры серийного номера,строки PASS_ ,закомментировал.
Результат : Error! Not answer "/dev/ttyS0"! "
Запрос к счетчику идет,на MOXe вспыхивает светодиод.
ответа нет.
Какая ОС?
COUNTER_TYPE="merc200.sh" прописали?
Проверьте правильность написания серийного номера счетчика.
Установите DEBUG=1 для того чтобы видеть какие команды идут на счетчик.
Какие параметры порта используете?
Re: Сбор показаний электросчетчика Меркурий 200
Добавлено: 21 июн 2016, 12:53
Булат
OS :LINUX DEBIAN 8
COUNTER_TYPE="merc200.sh" прописал.
серийного номера счетчика 13961366
Ошибка одна: Error! Not answer "/dev/ttyS0"! "