Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Скрипт для счетчика Меркурий 200

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Скрипт для счетчика Меркурий 200

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      andrey99986 last edited by

      Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

      Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?

      1 Reply Last reply Reply Quote 0
      • I
        instalator last edited by

        @andrey99986:

        Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

        Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом? `
        Надо бы драйвер для счетчиков Меркурий написать, но у меня их нет.

        а 230 уже не читается как 200ый?

        1 Reply Last reply Reply Quote 0
        • A
          andrey99986 last edited by

          @instalator:

          @andrey99986:

          Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

          Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом? `
          Надо бы драйвер для счетчиков Меркурий написать, но у меня их нет.

          а 230 уже не читается как 200ый? `
          К сожалению 230 не считывается как 200. При этом у 230 гораздо больше функционала.

          Я конечно могу снова сконвертировать вручную из php в рабочий вариант. Но код будет ужасный. Допилишь до драйвера если доступ к серверу дам?

          1 Reply Last reply Reply Quote 0
          • aurodionov
            aurodionov last edited by

            @andrey99986:

            Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

            Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом? ` А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

            Отправлено с моего Nexus 5 через Tapatalk

            1 Reply Last reply Reply Quote 0
            • A
              andrey99986 last edited by

              @aurodionov:

              @andrey99986:

              Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

              Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом? ` А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

              Отправлено с моего Nexus 5 через Tapatalk `

              Для начала надо сформировать команды запроса по инструкции:

              https://github.com/mrkrasser/MercuryStats

              Затем поправить на свои в cmd1 и в cmd2, изменить на свой порт (вместо '/dev/ttyUSB2').

              Контрольную сумму не проверял, можно дописать если будут ошибки считывания.

              createState("s1",0);
              createState('Uv');
              createState('Ia');
              createState('Ew');
              createState('T1');
              createState('T2');
              var cmd1 = new Buffer ([0x00,0x07,0x74,0xBE,0x63,0x54,0xE7]);
              var cmd2 = new Buffer ([0x00,0x07,0x74,0xBE,0x27,0x54,0xD4]);
              var sendtype = 1;
              var cmd = cmd1;
              var cnt = 0;
              function isEven(value) {
              	if (value%2 === 0)
              		return true;
              	else
              		return false;
              }
              
              schedule("* * * * *", function () {
              cnt = cnt + 1; 
                  if (isEven(cnt) === true ) {
                      sendtype=1;
                      cmd=cmd1;
                      buflen = 14;
                  }
                  else {
                      sendtype = 2;
                      cmd=cmd2;
                      buflen = 23;
                  }
              var SerialPort = require('serialport');
              var port = new SerialPort('/dev/ttyUSB2', {
              parser: SerialPort.parsers.byteLength(buflen),
                baudrate: 9600,
                dataBits: 8,
                parity: 'none'
              }, function (err) {
                if (err) {
                  return console.log('Error: ', err.message);
                }
                port.write(cmd, function(err) {
                  if (err) {
                    return console.log('Error on write: ', err.message);
                  }
                  });
              });
              
              setStateDelayed('s1', false, 10, false, function () {
                  port.on('data', function (data) {
                     if (sendtype == 1) {
                      //   
                      if (Number(data.toString('hex',5,7)/10) < 300) {
                        setState('Uv', Number(data.toString('hex',5,7)/10));
                        var Ia=Number(data.toString('hex',7,9)/100);
                        if (Ia>60)
                          {
                          setState("sayit.0.tts.text",'ru;75;Перегрузка электросети');
              
                          }
              	      setState('Ia', Number(data.toString('hex',7,9)/100));
              	      setState('Ew', Number(data.toString('hex',9,12)/1));
                      }
              	    //
                     }
                     if (sendtype == 2 ) {
                          if (Number(data.toString('hex', 5,  9) / 100) ) {
                            setState('T1', Number(data.toString('hex', 5,  9) / 100));
                            setState('T2', Number(data.toString('hex', 9,  13) / 100));    
                            }
                          }
                    });
                  });
              setStateDelayed('s1', false, 1000, false, function () {
                  port.pause();
                  port.close();
                //  log('Port is closed');
                });
              });
              
              
              1 Reply Last reply Reply Quote 0
              • aurodionov
                aurodionov last edited by

                @andrey99986:

                @aurodionov:

                @andrey99986:

                Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?

                Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом? ` А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

                Отправлено с моего Nexus 5 через Tapatalk `

                Для начала надо сформировать команды запроса по инструкции:

                https://github.com/mrkrasser/MercuryStats

                Затем поправить на свои в cmd1 и в cmd2, изменить на свой порт (вместо '/dev/ttyUSB2').

                Контрольную сумму не проверял, можно дописать если будут ошибки считывания.

                createState("s1",0);
                createState('Uv');
                createState('Ia');
                createState('Ew');
                createState('T1');
                createState('T2');
                var cmd1 = new Buffer ([0x00,0x07,0x74,0xBE,0x63,0x54,0xE7]);
                var cmd2 = new Buffer ([0x00,0x07,0x74,0xBE,0x27,0x54,0xD4]);
                var sendtype = 1;
                var cmd = cmd1;
                var cnt = 0;
                function isEven(value) {
                	if (value%2 === 0)
                		return true;
                	else
                		return false;
                }
                
                schedule("* * * * *", function () {
                cnt = cnt + 1; 
                    if (isEven(cnt) === true ) {
                        sendtype=1;
                        cmd=cmd1;
                        buflen = 14;
                    }
                    else {
                        sendtype = 2;
                        cmd=cmd2;
                        buflen = 23;
                    }
                var SerialPort = require('serialport');
                var port = new SerialPort('/dev/ttyUSB2', {
                parser: SerialPort.parsers.byteLength(buflen),
                  baudrate: 9600,
                  dataBits: 8,
                  parity: 'none'
                }, function (err) {
                  if (err) {
                    return console.log('Error: ', err.message);
                  }
                  port.write(cmd, function(err) {
                    if (err) {
                      return console.log('Error on write: ', err.message);
                    }
                    });
                });
                
                setStateDelayed('s1', false, 10, false, function () {
                    port.on('data', function (data) {
                       if (sendtype == 1) {
                        //   
                        if (Number(data.toString('hex',5,7)/10) < 300) {
                          setState('Uv', Number(data.toString('hex',5,7)/10));
                          var Ia=Number(data.toString('hex',7,9)/100);
                          if (Ia>60)
                            {
                            setState("sayit.0.tts.text",'ru;75;Перегрузка электросети');
                            
                            }
                	      setState('Ia', Number(data.toString('hex',7,9)/100));
                	      setState('Ew', Number(data.toString('hex',9,12)/1));
                        }
                	    //
                       }
                       if (sendtype == 2 ) {
                            if (Number(data.toString('hex', 5,  9) / 100) ) {
                              setState('T1', Number(data.toString('hex', 5,  9) / 100));
                              setState('T2', Number(data.toString('hex', 9,  13) / 100));    
                              }
                            }
                      });
                    });
                setStateDelayed('s1', false, 1000, false, function () {
                    port.pause();
                    port.close();
                  //  log('Port is closed');
                  });
                });
                
                ```` `  Спасибо, притащусь с работы посмотрю
                

                Отправлено с моего Nexus 5 через Tapatalk

                1 Reply Last reply Reply Quote 0
                • aurodionov
                  aurodionov last edited by

                  Наконец дошли руки проверить , сыпится ошибка

                  • javascript.0 2018-01-30 20:37:00.876 error at Object. (script.js.counter:34:28)
                  javascript.0 2018-01-30 20:37:00.875 error Error in callback: TypeError: SerialPort.parsers.byteLength is not a function 
                  

                  может неправильно составил запрос , № счётчика 02844114 08 ,соответственно взял 844114.

                  получилось :

                  var cmd1 = new Buffer ([0x00,0x0C,0xE1,0x52,0x63,0x9F,0xCB]);

                  var cmd2 = new Buffer ([0x00,0x0C,0xE1,0x52,0x27,0x82,0x9B]);

                  В чём ошибка ?

                  1 Reply Last reply Reply Quote 0
                  • Bluefox
                    Bluefox last edited by

                    @aurodionov:

                    Наконец дошли руки проверить , сыпится ошибка

                    • javascript.0 2018-01-30 20:37:00.876 error at Object. (script.js.counter:34:28)
                    javascript.0 2018-01-30 20:37:00.875 error Error in callback: TypeError: SerialPort.parsers.byteLength is not a function 
                    

                    может неправильно составил запрос , № счётчика 0284114 08 ,соответственно взял 84114.

                    получилось :

                    var cmd1 = new Buffer ([0x00,0x0C,0xE1,0x52,0x63,0x9F,0xCB]);

                    var cmd2 = new Buffer ([0x00,0x0C,0xE1,0x52,0x27,0x82,0x9B]);

                    В чём ошибка ? `
                    Согласно https://www.npmjs.com/package/serialpor ... rs--object

                    byteLength => ByteLength

                    1 Reply Last reply Reply Quote 0
                    • aurodionov
                      aurodionov last edited by

                      Не работает, при parser: SerialPort.parsers.ByteLength(buflen),

                      пишет что не является функцией. Я так понимаю это связано с новым апи

                      SerialPort версии 5+.

                      Лог прилогаю

                      • javascript.0 2018-01-31 19:08:00.106 error at Object. (script.js.counter:43:28)
                      javascript.0 2018-01-31 19:08:00.106 error at Object.ByteLengthParser [as ByteLength] (/opt/iobroker/node_modules/iobroker.javascript/node_modules/serialport/lib/parsers/byte-length.js:6:14)
                      
                      javascript.0 2018-01-31 19:08:00.105 error Error in callback: TypeError: Class constructors cannot be invoked without 'new'
                      
                      javascript.0 2018-01-31 19:07:00.207 error at Object. (script.js.counter:43:28)
                      
                      javascript.0 2018-01-31 19:07:00.205 error at Object.ByteLengthParser [as ByteLength] (/opt/iobroker/node_modules/iobroker.javascript/node_modules/serialport/lib/parsers/byte-length.js:6:14)
                      
                      javascript.0 2018-01-31 19:07:00.203 error Error in callback: TypeError: Class constructors cannot be invoked without 'new'
                      
                      javascript.0 2018-01-31 19:06:58.109 info script.js.counter: registered 0 subscriptions and 3 schedules
                      
                      javascript.0 2018-01-31 19:06:57.908 info Start javascript script.js.counter
                      1 Reply Last reply Reply Quote 0
                      • A
                        andrey99986 last edited by

                        @aurodionov:

                        Не работает, при parser: SerialPort.parsers.ByteLength(buflen),

                        пишет что не является функцией. Я так понимаю это связано с новым апи

                        SerialPort версии 5+. `

                        К сожалению я уже вывел из эксплуатации Меркурий 200. Сейчас у меня Меркурий 230, а в нём уже актуализированная версия SerialPort.

                        Попробуйте использовать синтаксис SerialPort из скрипта для Меркурия 230 в соседней теме и разработать новый для Меркурия 200.

                        1 Reply Last reply Reply Quote 0
                        • S
                          sscorpio last edited by

                          Камрады, а скрипт рабочий не появился ?

                          Или втут скрипт функциональный ?

                          viewtopic.php?f=26&t=8227&hilit=%D0%BC% … 0%B8%D0%B9

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          1.2k
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          5
                          11
                          3545
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo