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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Скрипт для счетчика Меркурий 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.
  • 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

                      813

                      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