Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт для счетчика Меркурий 200

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.6k

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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
11 Beiträge 5 Kommentatoren 3.9k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    andrey99986
    schrieb am zuletzt editiert von
    #1

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

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

    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #2

      @andrey99986:

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

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

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

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • A Offline
        A Offline
        andrey99986
        schrieb am zuletzt editiert von
        #3

        @instalator:

        @andrey99986:

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

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

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

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

        1 Antwort Letzte Antwort
        0
        • aurodionovA Offline
          aurodionovA Offline
          aurodionov
          schrieb am zuletzt editiert von
          #4

          @andrey99986:

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

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

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

          Пишу с пульта….

          1 Antwort Letzte Antwort
          0
          • A Offline
            A Offline
            andrey99986
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0
            • aurodionovA Offline
              aurodionovA Offline
              aurodionov
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • aurodionovA Offline
                aurodionovA Offline
                aurodionov
                schrieb am zuletzt editiert von
                #7

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

                • 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 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  • aurodionovA Offline
                    aurodionovA Offline
                    aurodionov
                    schrieb am zuletzt editiert von
                    #9

                    Не работает, при 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 Antwort Letzte Antwort
                    0
                    • A Offline
                      A Offline
                      andrey99986
                      schrieb am zuletzt editiert von
                      #10

                      @aurodionov:

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

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

                      SerialPort версии 5+. `

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

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

                      1 Antwort Letzte Antwort
                      0
                      • S Offline
                        S Offline
                        sscorpio
                        schrieb am zuletzt editiert von
                        #11

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

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

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

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        764

                        Online

                        32.5k

                        Benutzer

                        81.6k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe