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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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

                        790
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        5
                        11
                        3578
                        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