2016-08-29 5 views
0

私はかなり長い間、ブルートゥースバーコードスキャナとの長期的な接続を得るために、苦労していますInateck using node.js.プロセスはバックグラウンドで実行されています(linux、入力フォーカスなし)。そのため、スキャナをSPPデバイスとして構成しました。node.jsとブルートゥースバーコードスキャナ

スキャナの電源が自動的に切られない限り、接続は基本的に動作しています(約5分後)。

私の最初のアプローチは、bluetooth-serial-portパッケージを使用することでした。それはスキャナを発見し、バーコードを読み取るが、スキャナがオフになったとき、私は再接続する方法を知らない。私は接続をチェックし、isOpen()がfalseを返すと再び接続しようとするインターバルタイマを追加しました(これは一度動作します)。私がスキャナのボタンを押すと、スイッチがオンに戻り、再接続できますが、接続が確立されてもisOpen()はfalseを返します。それ以上の読み取り値は得られません。

var btSerial = new (require('bluetooth-serial-port')).BluetoothSerialPort(); 
var btInterval = null; 

btSerial.on('found', function (address, name) { 

    btSerial.findSerialPortChannel(address, function (channel) { 
     if (address === '00:06:11:68:15:81') { 
      btSerial.connect(address, channel, function() { 
       console.log('connected to ' + address); 

       btInterval = setInterval(function() { 
        if (!btSerial.isOpen()) { 

         btSerial.close(); 
         clearInterval(btInterval); 
         console.log('lost connection - try to reconnect'); 

         btSerial.inquire(); 
        } 

       }, 5000); 

      }, function() { 
       console.log('cannot connect to ' + address); 
      }); 
     } 

    }, function() { 
     console.log('found nothing'); 
    }); 
}); 

btSerial.on('finished', function() { 
    console.log('finished'); 
}); 

btSerial.on('data', function (buffer) { 
    console.log(buffer.toString('utf-8')); 
}); 


btSerial.inquire(); 

出力は次のようになります:

finished 
connected to 00:06:11:68:15:81 
found nothing 
... scanning works ... 
lost connection - try to reconnect 
finished 
connected to 00:06:11:68:15:81 
... scanning works ... 
lost connection - try to reconnect 
finished 
... that's it - no more scans ... 
^C 

他のアイデアは、 'は/ dev/rfcomm0' から直接読み取る)(ノードFSを使用していた。ここに私のコードです。

scanner = fs.createReadStream('/dev/rfcomm0', {bufferSize: 1}); 

scanner.on('open', function() { 
    logger.info('Scanner connected'); 
}); 

scanner.on('end', function() { 
    logger.info('End of data stream'); 
}); 

scanner.on('close', function() { 
    logger.info('Scanner disconnected'); 
}); 

scanner.on('error', function (error) { 
    logger.error('Scanner error'); 
}); 

scanner.on('data', function (chunk) { 
    logger.info(chunk.toString('ascii', 0, 13)); 
     } 
    }); 
}); 

デバイスから読み込んだときに自動的にOSによって接続され、私はon( 'data'、..)でコードを受け取ります。しかし、しばらくしてからスキャナがオフになると同じ問題が発生します。私はon( 'close'、..)イベントを受け取りますが、fs.createReadStream()を使って再接続することはもう動作しません。

多分あなたの誰かがすでにこのような問題を処理していて、これをどのように処理するかをヒントにすることができます。私はすべての提案に感謝します。

おかげで、スキャナが利用可能になったとき、私のノードのアプリを起動するために私が行きたかった道が、bashスクリプトではありません マックス

答えて

0

は、仕事をしていません:

#!/bin/bash 

echo "Press CTRL+C to stop..." 

while : 
do 
    if hcitool scan | grep -q "00:06:11:68:15:81"; then 
    # BT scanner found 
    node . 
    fi 

    sleep 1 
done