Сбор показаний электросчетчика Меркурий 200

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
nyasha
Сообщения: 97
Зарегистрирован: 24 апр 2014, 14:53
Откуда: Тюмень

Сбор показаний электросчетчика Меркурий 200

Сообщение nyasha » 30 апр 2016, 13:48

Всем привет!

Давно я не была на этом форуме, но сегодня я решила очень важную задачу и решила об этом отписаться.

Я не смогла организовать сбор показаний с м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
Последний раз редактировалось nyasha 04 май 2016, 07:29, всего редактировалось 1 раз.

lion_sm
Сообщения: 49
Зарегистрирован: 19 ноя 2013, 19:07

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение lion_sm » 03 май 2016, 09:52

Добрый день.
Данный скрипт также работает и с М206

Впрочем, с dio М206 тоже был запущен, ради спортивного интереса

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение THK » 03 май 2016, 10:55

Кто то допилил скрипт... Даже Readme.txt не поменяли. :)
viewtopic.php?p=460#p460
PS Это не претензия, наоборот приятно, что наработка не пропала даром. Дал ссылку, т.к. там есть инфа по теме.

nyasha
Сообщения: 97
Зарегистрирован: 24 апр 2014, 14:53
Откуда: Тюмень

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение nyasha » 04 май 2016, 07:28

THK писал(а):Кто то допилил скрипт... Даже Readme.txt не поменяли. :)
viewtopic.php?p=460#p460
PS Это не претензия, наоборот приятно, что наработка не пропала даром. Дал ссылку, т.к. там есть инфа по теме.
А, так вот почему, мне это всё так знакомо показалось :D

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение kpp » 16 май 2016, 16:08

Есть вариант работы со счетчиком через чистый 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         Время последнего выключения
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

nyasha
Сообщения: 97
Зарегистрирован: 24 апр 2014, 14:53
Откуда: Тюмень

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение nyasha » 17 май 2016, 21:45

Натыкалась я на этот вариант. Но мне нужно было именно 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         Время последнего выключения

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение kpp » 19 май 2016, 11:29

Если бы это был "чистый 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.
Заранее спасибо.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

nyasha
Сообщения: 97
Зарегистрирован: 24 апр 2014, 14:53
Откуда: Тюмень

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение nyasha » 23 май 2016, 07:07

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 я тоже не использую. Оно не работает.

Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

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


СпасиБо.

Andrey2509
Сообщения: 141
Зарегистрирован: 22 июн 2015, 13:24

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Andrey2509 » 07 июн 2016, 14:31

В моём скрипте :
$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);

Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Булат » 07 июн 2016, 14:41

Andrey2509,большое спасибо,все отображается как надо. Почему я раньше не спросил.Перепробовал с $result[?], по разному.То запятая не там,то цифры не те.
А по месяцам,как ?

СпасиБо.

Andrey2509
Сообщения: 141
Зарегистрирован: 22 июн 2015, 13:24

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Andrey2509 » 07 июн 2016, 14:58

А разве меркурий 200 хранит данные на 1 число каждого месяца? не знал :)
Я для этих целей как обычно пишу в базу показания каждые 15 мин, а затем sql+php для вывода показаний на 1 число.

Aquarius
Сообщения: 362
Зарегистрирован: 19 дек 2011, 17:17
Откуда: Дзержинск

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Aquarius » 07 июн 2016, 15:22

Andrey2509, можно посмотреть на функцию "crc16_modbus"?
В протоколе счётчиков СЭТ указывается, что контрольная сумма считается с помощью CRC с полиномом MODBUS. Там в результате два байта получается. У Вас тоже на выходе два байта?

Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Булат » 07 июн 2016, 15:27

Andrey2509,переделал скрипт,как у Вас(почти),все заработало.
"А разве меркурий 200 хранит данные на 1 число каждого месяца?" -проверял программой "КОНФИГУРАТОР" , там есть таблица по месяцам.


Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

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=?

СпасиБо.

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение kpp » 21 июн 2016, 11:08

Булат писал(а):Мужики,а кто-нибудь пробовал запустить этот скрипт "Чтение данных из счетчиков электроэнергии 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



"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Булат » 21 июн 2016, 12:33

Попробовал дописать две цифры серийного номера,строки PASS_ ,закомментировал.
Результат : Error! Not answer "/dev/ttyS0"! "

Запрос к счетчику идет,на MOXe вспыхивает светодиод.
ответа нет.

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение kpp » 21 июн 2016, 12:43

Булат писал(а):Попробовал дописать две цифры серийного номера,строки PASS_ ,закомментировал.
Результат : Error! Not answer "/dev/ttyS0"! "

Запрос к счетчику идет,на MOXe вспыхивает светодиод.
ответа нет.
Какая ОС?
COUNTER_TYPE="merc200.sh" прописали?
Проверьте правильность написания серийного номера счетчика.
Установите DEBUG=1 для того чтобы видеть какие команды идут на счетчик.

Какие параметры порта используете?
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

Булат
Сообщения: 23
Зарегистрирован: 22 май 2011, 10:32

Re: Сбор показаний электросчетчика Меркурий 200

Сообщение Булат » 21 июн 2016, 12:53

OS :LINUX DEBIAN 8
COUNTER_TYPE="merc200.sh" прописал.
серийного номера счетчика 13961366

Ошибка одна: Error! Not answer "/dev/ttyS0"! "

Ответить