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

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

Добавлено: 18 мар 2016, 16:18
marconi
kpp, Большое Вам человеческое спасибо за скрипт!
Перепробовал массу способов включая другие которые тут встречаются на форуме и только ваш скрипт заработал.

Для работы скрипта в Линуксе надо внести совсем не большие правки в скрипт и установить пакет jot

Чуть позже приведу в порядок код и выложу тут на форуме ссылку.

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

Добавлено: 19 апр 2016, 00:54
kpp
Ввиду повышения интереса к работе со счетчиком через чистый SHELL, я решил еще раз проработать скрипт.
Реализовал возможность работы не только через dd, но и через cat.
Теперь скрипт работает не только в 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
запускать: sh electro_counter.sh <КОМАНДА>
где <КОМАНДА> для Меркурий 230:

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

test              Тестирование связи
openread          Открытие соединения на чтение
openwrite         Открытие соединения на запись
close             Завершение сеанса
kwatthour         Опрос накопленной энергии (по умолчанию, если никакая команда явно не указана)
amper             Сила тока A (А) по фазам
coefw             Коэффициент мощности (С) по фазам
freq              Частота Гц
coin              Угол между фазами
power             Мощность P (Вт) по фазам
volt              Напряжение U (В)
null              Произвольная команда (возможно описать любую команду)
serialnum         Серийный номер счетчика и даты выпуска
version           Версия ПО
datetime          Дата время по счетчику
kwatthour_phaza   Накопленная энергия по указанной фазе
power_phaza       Мощность P (Вт) по указанной фазе
где <КОМАНДА> для Меркурий 200:

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

kwatthour        Опрос накопленной энергии
amper            Сила тока A (А)
power            Мощность P (кВт)
volt             Напряжение U (В)
batvolt          Напряжение батареи
serialnum        Серийный номер счетчика
version          Дата версии ПО
datetime         Дата время по счетчику
datemake         Дата изготовления
last_on          Время последнего включения
last_off         Время последнего выключения

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

Добавлено: 19 апр 2016, 09:41
Jager
kpp писал(а):Ввиду повышения интереса к работе со счетчиком через чистый SHELL BASH, я решил еще раз проработать скрипт.
[/code]
Под винду бы....

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

Добавлено: 19 апр 2016, 10:25
ink
А эта ссылка никому не попадалась?
http://incotex-counter.blogspot.ru/2015 ... .html#more

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

Добавлено: 19 апр 2016, 11:21
kpp
Jager писал(а):
kpp писал(а):Ввиду повышения интереса к работе со счетчиком через чистый SHELL BASH, я решил еще раз проработать скрипт.
[/code]
Под винду бы....
Сейчас в любой квартире можно найти линукс: wifi-роутеры, распберри, НАСы и т.д. и т.п.

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

Добавлено: 08 июн 2016, 18:05
Itron
kpp писал(а):Ввиду повышения интереса к работе со счетчиком через чистый SHELL, я решил еще раз проработать скрипт.
Реализовал возможность работы не только через dd, но и через cat.
Теперь скрипт работает не только в 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
запускать: sh electro_counter.sh <КОМАНДА>
где <КОМАНДА> для Меркурий 230:

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

test              Тестирование связи
openread          Открытие соединения на чтение
openwrite         Открытие соединения на запись
close             Завершение сеанса
kwatthour         Опрос накопленной энергии (по умолчанию, если никакая команда явно не указана)
amper             Сила тока A (А) по фазам
coefw             Коэффициент мощности (С) по фазам
freq              Частота Гц
coin              Угол между фазами
power             Мощность P (Вт) по фазам
volt              Напряжение U (В)
null              Произвольная команда (возможно описать любую команду)
serialnum         Серийный номер счетчика и даты выпуска
version           Версия ПО
datetime          Дата время по счетчику
kwatthour_phaza   Накопленная энергия по указанной фазе
power_phaza       Мощность P (Вт) по указанной фазе
где <КОМАНДА> для Меркурий 200:

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

kwatthour        Опрос накопленной энергии
amper            Сила тока A (А)
power            Мощность P (кВт)
volt             Напряжение U (В)
batvolt          Напряжение батареи
serialnum        Серийный номер счетчика
version          Дата версии ПО
datetime         Дата время по счетчику
datemake         Дата изготовления
last_on          Время последнего включения
last_off         Время последнего выключения
Доброго дня! Я тут случайно наткнулся на эту тему. Пишу свое приложение, стоит задача получить архивы, на сколько понимаю, в приведенном материале опрос ведется только текущих параметров? Кто-нибудь сталкивался с чтением архивов? Может есть какие-то скрипты? Подскажите, пожалуйста!

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

Добавлено: 21 июн 2016, 11:04
kpp
Itron писал(а):Доброго дня! Я тут случайно наткнулся на эту тему. Пишу свое приложение, стоит задача получить архивы, на сколько понимаю, в приведенном материале опрос ведется только текущих параметров? Кто-нибудь сталкивался с чтением архивов? Может есть какие-то скрипты? Подскажите, пожалуйста!
Какие архивы имеются в виду?
Кол-во энергии за год, указанный месяц?

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

Добавлено: 12 июл 2016, 10:03
empenoso
Кстати не в качестве рекламы - наткнулся на такую вещь: http://ttronics.ru/?menu=teleportm230 устройства для просмотра показаний со счетчика Меркурий 230 в локальной сети :) делают в Перми, стоит около 4,5 тр я понял.

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

Добавлено: 26 дек 2016, 21:17
empenoso
Выбираю себе трехфазный счетчик и понимаю, что если хочу видеть данные в openhab, то надо брать Меркурий 230 АRT :)
Вот только не могу разобраться. Во многих магазинах он маркируется "Меркурий 230 АRT-00/01/02/03 С(R)N 4 450 руб."

А расшфировка букв на сайте производителя http://www.incotexcom.ru/m230art.htm:
МЕРКУРИЙ 230ART-XX PQCRILGSDN

МЕРКУРИЙ – торговая марка счётчика
230 - серия счётчика
A - измерение активной энергии
R - измерение реактивной энергии
T - наличие внутреннего тарификатора

XX – модификации, подразделяемые по току, напряжению и классу точности.
P - наличие профиля, журнала событий
Q - наличие журнала показателей качества электроэнергии
CRILG - интерфейсы, а именно:
C - интерфейс CAN
R - интерфейс RS485

I - Инфракрасный порт
L - модем PLC
G - модем GSM
S - внутренне питание интерфейса и модема GSM
D - возможность подключения внешнего резервного питания счётчика
N - электронная пломба
Отсутствие символа в наименовании счётчика свидетельствует об отсутствии соответствующей функции.
То есть фактически мне нужен МЕРКУРИЙ 230ART-01 с интерфейсом RS485, поскольку RS485 уже куплен: http://www.ebay.com/itm/182185210669

Вот только везде идет маркировка С(R), но мне то получается только с RS485 подойдет :?:

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

Добавлено: 27 дек 2016, 09:46
Andrey2509
empenoso писал(а):
То есть фактически мне нужен МЕРКУРИЙ 230ART-01 с интерфейсом RS485, поскольку RS485 уже куплен: http://www.ebay.com/itm/182185210669
Такие как вас у меня уже 2 штуки сгорели,
сейчас такой работает (вроде как с защитой):
https://www.aliexpress.com/item/USB-2-0 ... 0.0.RafCUK

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

Добавлено: 29 дек 2016, 12:10
Evgeny_nd
empenoso, а как вы планируете данные в Openhab отображать?

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

Добавлено: 29 дек 2016, 17:50
empenoso
Понимаю что можно получить результат опроса в командную строку через скрипт http://ab-log.ru/forum/viewtopic.php?f= ... =60#p21644 ну а дальше через exec биндинг опенхаб эти значения можно увидеть в самом опехаб.

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

Добавлено: 18 мар 2017, 20:51
yuoras
Хочу на Synology читать показания с Меркурий 230 ART-01RN.

Он у меня тарифный (день, ночь и пик).

Программа считывает только суммарную энергию А+,А-,R+,R-.
Так все хорошо читается.

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

Добавлено: 23 апр 2017, 02:45
didim
Попытался немного изменить скрипт из демо умного дома, чтобы можно с нескольких счетчиков по одной шине данные получать. Общуее потребление нормально получаю, а мощность по фазам никак - нет в ответах от счетчика ничего... голову сломал, что не так делаю. В скрипте переменная $nsc - последние 3 цифры серийного номера, функция контрольной суммы (crc) табличная, для наглядности вывожу в шестнадцатеричном виде те команды что в линию уходят...

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

<?php

// BUS Type: RS485 or CAN
define('BUS', 'RS485');

$fd = dio_open('/dev/ttyUSB0', O_RDWR);

dio_tcsetattr($fd, array(
  'baud' => 9600,
  'bits' => 8,
  'stop'  => 1,
  'parity' => 0
));


##############

function merc_gd($cmd, $factor = 1, $total = 0)
{
        global $fd;
        global $sleep_time;

        usleep(60000);
        flush();
        dio_write($fd, $cmd, 6);
        usleep($sleep_time);
        $result = dio_read($fd, 64);

        $ret = array();

        if ( BUS == "CAN" )
        $start_byte = 7;
        else
        $start_byte = 1;

        if ( $total != 1 )
        {
                for ( $i = 0; $i < 4; $i++ )
                {
                        if ( dechex(ord($result[$start_byte + $i * 3])) >= 40 )
                        $result[$start_byte + $i * 3] = chr(dechex(ord($result[$start_byte + $i * 3])) - 40);
                        if ( strlen($result) > $start_byte + 2 + $i * 3 )
                        $ret[$i] = hexdec(dd($result[$start_byte + $i * 3]).dd($result[$start_byte + $i * 3 + 2]).dd($result[$start_byte + $i * 3 + 1]))*$factor;
                }
        }
        else
        $ret[0] = hexdec(dd($result[$start_byte+1]).dd($result[$start_byte]).dd($result[$start_byte+3]).dd($result[$start_byte+2]))*$factor;

        return $ret;
}

$sleep_time = 100000;

function dd($data = "")
{
        $result = "";
        $data2 = "";
        for ( $j = 0; $j < count($data); $j++ )
        {
                $data2 = dechex(ord($data[0]));
                if ( strlen($data2) == 1  )
                $result = "0".$data2;
                else
                $result .= $data2;

        }
        return $result;
}

$nsc = "000";

# Инициализация соединения, передача пароля
$com = "0101010101010101";

dio_write($fd, go_cmd($nsc, $com),(strlen($com)/2+3));
//dio_write($fd,"\x00\x01\x01\x01\x01\x01\x01\x01\x01\x77\x81" ,11);

usleep($sleep_time);
$result = dio_read($fd, 15);

// Общее потребление
$com = "050000";

$Tot = merc_gd(go_cmd($nsc,$com), 0.001, 1);
//$Tot = merc_gd("\x00\x05\x00\x00\x10\x25", 0.001, 1);
echo "Total: $Tot[0]\n";

# Мощность по фазам
# =====================================================
$com = "081600";

$Pv = merc_gd(go_cmd($nsc,$com), 0.01);
//$Pv = merc_gd("\x00\x08\x16\x00\x8F\x86", 0.01);
echo "Pv: $Pv[0] - $Pv[1] - $Pv[2] \r\n";

# Завершение соединения
$com = "02";

//echo go_cmd($nsc,$com);
dio_write($fd, go_cmd($nsc,$com), 4);
usleep($sleep_time);
$result = dio_read($fd, 8);
dio_close($fd);

function go_cmd($num_sc, $cmd){
$com_str = chr(hexdec(num_sc($num_sc)));
$comtxt = num_sc($num_sc);
$crc = crc(num_sc($num_sc).$cmd);
$cmd = str_split($cmd,2);
for ($i=0; $i< count($cmd); $i++){
    $com_str .= chr($cmd[$i]);
    $comtxt .= $cmd[$i];
    }
$com_str .= chr(hexdec(substr($crc,0,2))).chr(hexdec(substr($crc,2,2)));
$comtxt .= substr($crc,0,2).substr($crc,2,2);
echo $comtxt."\n";
return $com_str;

}

function num_sc($num_sc){
if ($num_sc > 247)
    $num_sc = substr($num_sc,1,2);
$dn = dechex($num_sc);

if ($dn < 10)
    $dn = "0".$dn;

return $dn;
}

function crc($modbus_msg){

    $crctab16 = [0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
            0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
            0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
            0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
            0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40,
            0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41,
            0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641,
            0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040,
            0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240,
            0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441,
            0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41,
            0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840,
            0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41,
            0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40,
            0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640,
            0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041,
            0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240,
            0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441,
            0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41,
            0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840,
            0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41,
            0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40,
            0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640,
            0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041,
            0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241,
            0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440,
            0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40,
            0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841,
            0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
            0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
            0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
            0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040];

        $hexdata = pack('H*',$modbus_msg);
        $nLength = strlen($hexdata);
        $fcs = 0xFFFF;
        $pos = 0;
        while($nLength > 0)
        {
            $fcs = ($fcs >> 8) ^ $crctab16[($fcs ^ ord($hexdata[$pos])) & 0xFF];
            $nLength--;
            $pos++;
        }
        $crc_semi_inverted = sprintf('%04X', $fcs);//modbus crc invert the hight and low bit so we need to put the last two letter in the begining
        $crc_modbus = substr($crc_semi_inverted,2,2).substr($crc_semi_inverted,0,2);
    return $crc_modbus;
}
?>

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

Добавлено: 26 апр 2017, 15:53
kpp
Обновил скрипт для работы со счетчиком через чистый SHELL.
С учетом найденных вопросов.

Работы по улучшению скрипта продолжаются.
Принимаются предложения \ пожелания.

https://hi.dp.ua/svn/electo_counters/trunk/ user:tat pass:123
в electro_counter.conf указать нужные: DEVICE, COUNTER_SN, PASS_READ, COUNTER_TYPE.

Поддерживаются Меркурий 230, Меркурий 200.

Более подробно viewtopic.php?p=28000#p21644

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

Добавлено: 28 апр 2017, 12:41
janzoom
Прошу помочь с проблемой вывода общей потребляемой мощности.
Исключительно при высоких значениях мощности (более 6 кватт) в 80% случаев искажается вывод:

корректный вывод:
DIO Write: 0 : 00 08 16 00 8f 86 [......]
DIO Read: 0 : 00 0b 03 1f 03 49 b0 03 31 d5 03 89 99 ab b1 [.....I..1......]
Pv: 7288.35 - 2417.37 - 2511.85 - 2359.13 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 7288.35 - OK

сбойный вывод:
DIO Write: 0 : 00 08 16 00 8f 86 [......]
DIO Read: 0 : 00 4a 19 ff 43 00 83 03 3c cc 03 dd af 44 d2 [.J..C...<....D.]
Pv: 49149.69 - 2301.44 - 2488.92 - 2416.29 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 49149.69 - KO

предполагаю что проблема появляется при "4" во втором байте: 00 4а ........
и есть вроде условие в функции для отработки, но не отрабатывает :

if ( dechex(ord($result[$start_byte + $i * 3])) >= 40 ) {
$result[$start_byte + $i * 3] = chr(dechex(ord($result[$start_byte + $i * 3])) - 40);
}

спасибо
(счетчик трехфазный, 236)

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

Добавлено: 11 ноя 2017, 18:07
andrusha7778
Добрый день, подскажите в чем может быть дело?
Подключил в 230-ARTCN к raspberyy PI через кан
устройство /dev/ttyUSB0 появилось
Раскомментировал строчку в конфиге DEV_FLAGS_LINUX для дебиана а для линукса закомментил (иначе ругалось что не может параметры порта установить)
в общем вот что выдает:

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

./electro_counter.sh
OS: LINUX; DEVICE: /dev/ttyUSB0; COUNTER_SN: 05994103(03); COUNTER_TYPE: merc230.sh; ECHOCOMMAND: NO; TEST_COMMUNITY: YES; DEV_EMULATOR: NO; METHOD_COMMUNITY: CAT; FUZZY_MATCHING_CRC: NO
COMMAND: kwatthour; PARAMS: "kwatthour"> mode=0, zona=00, month=0; SIZE: 19; OUTPARSER: ; DESCRIBE: Опрос накопленной энергии params: mode[]:zona[]
TEST_SEND: _0x03_0x00_0x01_0x40 4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
TEST_ANSWER(1)  0
TEST_ANSWER(2)  0
TEST_ANSWER(3)  0
TEST_ANSWER(4)  0
TEST_ANSWER(5)  0
Set params device "/dev/ttyUSB0"...
Set params device "/dev/ttyUSB0" - 0.
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
METHOD_COMMUNITY=CAT len=4
TEST_ANSWER(1)  0
TEST_ANSWER(2)  0
TEST_ANSWER(3)  0
TEST_ANSWER(4)  0
TEST_ANSWER(5)  0
Error! Not answer "/dev/ttyUSB0"!
root@majordomo:/home/pi/mercury# 
Под виндой работает чудесно с этим переходником и конфигуратором :-(

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

Добавлено: 16 ноя 2017, 16:22
bnx
Подскажите а CAN/rs485 есть разница по моделям?
Или у всех 230 он есть? Как понял есть модель только с CAN.

Хочу подключать в Распберри хочу подрубать по rs485.

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

Добавлено: 16 ноя 2017, 18:28
MSapogov
Я на своем 230 с CAN интерфейсом... подключал к обычному китайскомк переходнику RS-485 только A и B местами менял. И питание 5В на счетчик подавал.

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

Добавлено: 16 ноя 2017, 22:52
bnx
MSapogov писал(а):Я на своем 230 с CAN интерфейсом
Это какая маркировка у вас на счетчике(модель)?