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. Не работает поток в node-red

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    891

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Не работает поток в node-red

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
9 Beiträge 2 Kommentatoren 3.4k 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

    Создал поток в node-red, согласно документации https://github.com/mrkrasser/MercurySta … adme.ru.md

    сам поток в файле https://github.com/mrkrasser/MercurySta ... Stats.json

    Есть статус "connected" в свойствах порта (зелёный кружочек).

    Ошибок в логах нет, но так как поток разорван - работает только первая часть (включил лог в функции "BinaryRequest" - лог пишется).

    Вставил логирование в функции "Parser" в первой строке кода - оно не срабатывает.

    Из чего делаю вывод что вторая часть потока вообще не запускается.

    В чём может быть проблема?

    Задача простая - передать строку в com-порт , а затем считать ответ с таймаутом 500 мсек.

    При попытке работать в javascript с портом напрямую:

    var SerialPort = require('serialport');
    var port = new SerialPort('/dev/ttyUSB1', {
        parser: SerialPort.parsers.byteLength(4)
    });
    var sendcmd = new Buffer("000774BE63", "hex"); 
    port.on('open', function() {
      port.write(sendcmd, function(err) {
        if (err) {
          return console.log('Error on write: ', err.message);
        }
        log('message written');
      });
    });
    
    port.on('data', function (data) {
      log('Data: ' + data);
    });
    
    

    периодически выходит ошибка:

    Error: 2016-09-16 13:43:58.055 error Error Resource temporarily unavailable Cannot lock port

    uncaught 2016-09-16 13:43:58.054 error exception: Error Resource temporarily unavailable Cannot lock port

    Ответа (данных от порта) нет, возможно из-за отсутствия таймаута на считывание с порта, не знаю как правильно поставить.

    Скрипт на php с этим портом работает стабильно.

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

      Не работает функция port.close() - порт остаётся открытым :

      lsof | grep /dev/ttyUSB1

      io.javasc 29819              root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      nodejs    29819 29820        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      V8        29819 29821        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      V8        29819 29822        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      V8        29819 29823        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      V8        29819 29824        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      nodejs    29819 29825        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      nodejs    29819 29826        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      nodejs    29819 29827        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      nodejs    29819 29828        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
      
      

      Помогает только рестарт драйвера javascript…

      Задержку считывания сделал:

      setStateDelayed('s1', false, 500, false, function () {
          port.on('data', function (data) {
          log('Data after 500 ms: ' + data);
          });
      });
      

      Но ответа нет…

      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

        @andrey99986:

        Не работает функция port.close() - порт остаётся открытым :

        lsof | grep /dev/ttyUSB1

        io.javasc 29819              root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        nodejs    29819 29820        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        V8        29819 29821        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        V8        29819 29822        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        V8        29819 29823        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        V8        29819 29824        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        nodejs    29819 29825        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        nodejs    29819 29826        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        nodejs    29819 29827        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        nodejs    29819 29828        root   14uW     CHR              188,1       0t0      11147 /dev/ttyUSB1
        
        

        Помогает только рестарт драйвера javascript…

        Задержку считывания сделал:

        setStateDelayed('s1', false, 500, false, function () {
            port.on('data', function (data) {
            log('Data after 500 ms: ' + data);
            });
        });
        

        Но ответа нет… `
        А где код, который делает port.close ?

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

          > А где код, который делает port.close ?
          В такой комбинации порт начал закрываться:

          port.pause();
          port.close();
          
          

          Смог подключиться своим скриптом к GSM- розетке,имеющей вход RS232 (через другой USB порт), получаю нормальный ответ.

          Осталось разобраться с Меркурием.

          Возможно не верно формируется строка запроса.

          на php:

          hex2bin ('000774BE6354e7');

          на js -?

          1 Antwort Letzte Antwort
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #5

            ` > hex2bin ('000774BE6354e7');

            на js -? `

            var sendcmd = new Buffer("000774BE6354e7", "hex"); 
            
            1 Antwort Letzte Antwort
            0
            • A Offline
              A Offline
              andrey99986
              schrieb am zuletzt editiert von
              #6

              На js заработало, код:

              createState('s1');
              
              schedule("*/10 * * * *", function () {
              var cmd1 = new Buffer ([0x00,0x07,0x74,0xBE,0x63,0x54,0xE7]);
              
              var SerialPort = require('serialport');
              var port = new SerialPort('/dev/ttyUSB1', {
              
              parser: SerialPort.parsers.byteLength(14),
                baudrate: 9600,
                dataBits: 8,
                parity: 'none'
              }, function (err) {
                if (err) {
                  return console.log('Error: ', err.message);
                }
                port.write(cmd1, function(err) {
                  if (err) {
                    return console.log('Error on write: ', err.message);
                  }
                  //console.log('message written');
                });
              });
              
              setStateDelayed('s1', false, 10, false, function () {
                  port.on('data', function (data) {
              	setState('Uv', Number(data.toString('hex',5,7)/10));
              	setState('Ia', Number(data.toString('hex',7,9)/100));
              	setState('Ew', Number(data.toString('hex',9,12)/1));
                    });
              
                  });
              setStateDelayed('s1', false, 1000, false, function () {
                  port.pause();
                  port.close();
                  log('Port is closed');
                   });
              });
              
              
              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                А так работает?

                var cmd1 = new Buffer ([0x00,0x07,0x74,0xBE,0x63,0x54,0xE7]);
                var SerialPort = require('serialport');
                
                schedule("*/10 * * * *", function () {
                	var port = new SerialPort('/dev/ttyUSB1', 
                		{
                			parser:   SerialPort.parsers.byteLength(14),
                			baudrate: 9600,
                			dataBits: 8,
                			parity:   'none'
                		}, 
                		function (err) {
                			if (err) return console.log('Error: ', err.message);
                
                			port.on('data', function (data) {
                				setState('Uv', Number(data.toString('hex', 5,  7) / 10));
                				setState('Ia', Number(data.toString('hex', 7,  9) / 100));
                				setState('Ew', Number(data.toString('hex', 9, 12) / 1));
                
                				setTimeout(function () {
                					port.pause();
                					port.close(function (err) {
                						if (err) console.error(err);
                						//port is really closed
                						console.log('Port is closed)
                						port = null; // speed up garbage collector
                					});
                				}, 100);
                			});
                
                			port.write(cmd1, function(err) {
                				if (err) {
                					port.pause();
                					port.close();
                					return console.log('Error on write: ', err.message);
                				}
                				//console.log('message written');
                			});
                		});
                });
                
                1 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  andrey99986
                  schrieb am zuletzt editiert von
                  #8

                  Работает.

                  Правильнее сначала слушатель запустить с таймаутом 100 мс и только потом отправить комманду в порт?

                  1 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #9

                    @andrey99986:

                    Работает.

                    Правильнее сначала слушатель запустить с таймаутом 100 мс и только потом отправить комманду в порт? `
                    Да.

                    Вот только "слушатель" запускается не с таймаутом, а просто перед тем, как послать команду. И после ответа порт по таймауту закрывается.

                    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

                    707

                    Online

                    32.6k

                    Benutzer

                    82.1k

                    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