私はかなり長い間、ブルートゥースバーコードスキャナとの長期的な接続を得るために、苦労しています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スクリプトではありません マックス