ioBroker Forum


Nutzungsbedingungen |Datenschutzrichtlinie
Cloud |Dokumentation
Aktuelle Zeit: 22.02.2018, 12:08

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 19.09.2017, 17:09 
Offline
professional

Registriert: 24.08.2016, 11:12
Beiträge: 193
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?


Zuletzt geändert von andrey99986 am 27.09.2017, 12:10, insgesamt 1-mal geändert.

Nach oben
   
BeitragVerfasst: 19.09.2017, 19:38 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
andrey99986 hat geschrieben:
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?

Надо бы драйвер для счетчиков Меркурий написать, но у меня их нет.
а 230 уже не читается как 200ый?

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


Nach oben
   
BeitragVerfasst: 20.09.2017, 07:04 
Offline
professional

Registriert: 24.08.2016, 11:12
Beiträge: 193
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
instalator hat geschrieben:
andrey99986 hat geschrieben:
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?

Надо бы драйвер для счетчиков Меркурий написать, но у меня их нет.
а 230 уже не читается как 200ый?

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


Nach oben
   
BeitragVerfasst: 20.09.2017, 08:36 
Offline
professional
Benutzeravatar

Registriert: 14.07.2014, 16:39
Beiträge: 380
Wohnort: Россия, Тюмень
Hat sich bedankt: 5 Mal
andrey99986 hat geschrieben:
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?
А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

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

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


Nach oben
   
BeitragVerfasst: 20.09.2017, 09:40 
Offline
professional

Registriert: 24.08.2016, 11:12
Beiträge: 193
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
aurodionov hat geschrieben:
andrey99986 hat geschrieben:
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?
А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

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


Для начала надо сформировать команды запроса по инструкции:
https://github.com/mrkrasser/MercuryStats
Затем поправить на свои в cmd1 и в cmd2, изменить на свой порт (вместо '/dev/ttyUSB2').
Контрольную сумму не проверял, можно дописать если будут ошибки считывания.
Code:
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');
  });
});



Nach oben
   
BeitragVerfasst: 20.09.2017, 12:27 
Offline
professional
Benutzeravatar

Registriert: 14.07.2014, 16:39
Beiträge: 380
Wohnort: Россия, Тюмень
Hat sich bedankt: 5 Mal
andrey99986 hat geschrieben:
aurodionov hat geschrieben:
andrey99986 hat geschrieben:
Кто нибудь считывает по CAN/RS485 данные с эл. счётчика Меркурий 230 ?
Скрипт для Меркурий-200 у меня есть, переписал с php, но вот поменял эл. счётчик на Меркурий 230, может кто поделится готовым js-скриптом?
А можно срипт под 200й, у меня такой стоит дома, так пока ума и не дал

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


Для начала надо сформировать команды запроса по инструкции:
https://github.com/mrkrasser/MercuryStats
Затем поправить на свои в cmd1 и в cmd2, изменить на свой порт (вместо '/dev/ttyUSB2').
Контрольную сумму не проверял, можно дописать если будут ошибки считывания.
Code:
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

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


Nach oben
   
BeitragVerfasst: 30.01.2018, 16:41 
Offline
professional
Benutzeravatar

Registriert: 14.07.2014, 16:39
Beiträge: 380
Wohnort: Россия, Тюмень
Hat sich bedankt: 5 Mal
Наконец дошли руки проверить , сыпится ошибка
    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]);
В чём ошибка ?

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


Zuletzt geändert von aurodionov am 31.01.2018, 04:46, insgesamt 1-mal geändert.

Nach oben
   
BeitragVerfasst: 30.01.2018, 16:51 
Offline
Site Admin
Benutzeravatar

Registriert: 13.07.2014, 14:42
Beiträge: 7712
Hat sich bedankt: 290 Mal
Danksagung erhalten: 829 Mal
aurodionov hat geschrieben:
Наконец дошли руки проверить , сыпится ошибка
    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


Nach oben
   
BeitragVerfasst: 31.01.2018, 06:48 
Offline
professional
Benutzeravatar

Registriert: 14.07.2014, 16:39
Beiträge: 380
Wohnort: Россия, Тюмень
Hat sich bedankt: 5 Mal
Не работает, при 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

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


Nach oben
   
BeitragVerfasst: 14.02.2018, 08:20 
Offline
professional

Registriert: 24.08.2016, 11:12
Beiträge: 193
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
aurodionov hat geschrieben:
Не работает, при parser: SerialPort.parsers.ByteLength(buflen),
пишет что не является функцией. Я так понимаю это связано с новым апи
SerialPort версии 5+.


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


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu Forum:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de