obnizのフォーラムは新しいシステムに移行しております。
新しいフォーラムはこちらになりますLogtta CO2に接続できない原因
-
BLE Wi-Fi Gatewayを経由してLogtta_CO2に接続しようとしております。
以下の環境を利用しております。❯ npm -v
6.14.10❯ tsc -v
Version 4.1.3"obniz": "^3.13.0",
"obniz-cloud-sdk": "^0.1.0"処理の流れと致しましては、下記のようになります。
obniz.ble.scan.startWait()については、duration: nullとしております。
行数が長くなるので、try catchはだいぶ省いております。const obniz = new Obniz(device.id) obniz.onconnect = async () => { console.log("onconnect:") const LOGTTA_CO2 = Obniz.getPartsClass("Logtta_CO2") await obniz.ble.initWait() obniz.ble.scan.onfind = async (peripheral) => { if (LOGTTA_CO2.isDevice(peripheral)) { const logtta = new LOGTTA_CO2(peripheral) logtta.ondisconnect = async (reason: any) => { console.log("Logtta_CO2 ondisconnect") console.log(reason) } console.log("connectWait") await logtta.connectWait() console.log("connected") console.log("getWait") const co2 = await logtta.getWait() console.log(`co2=${co2}`) } await obniz.ble.scan.startWait(null, { duration: null }) console.log("First startWait") }
この結果、Logtta_CO2にconnectWait()した段階でobniz.ble.scan.onfinishが呼ばれているようです。
onconnect First startWait connectWait onfinish Reconnect startWait connectWait Exception: ObnizBleHciStateError: Connection Failed to be Established / Synchronization Timeout {"peripheralAddress":"f0ab544cf058"} at NobleBindings.onDisconnComplete (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/bindings.js:186:27) at Hci.emit (/path/to/app/node_modules/eventemitter3/index.js:203:33) at Hci.onHciEventData (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:860:18) at Hci.onSocketData (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:926:18) at ObnizBLEHci.notified (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/hci.js:68:22) at ObnizBLE.notifyFromObniz (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/ble.js:120:22) at Obniz.notifyToModule (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizComponents.js:262:37) at Obniz.notifyToModule (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizDevice.js:149:15) at Obniz.wsOnMessage (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizConnection.js:406:26) at WebSocket.emit (events.js:315:20) { code: 10, state: 62 }
この原因は何が考えられるでしょうか。
-
連投すいません。
別のトピックでリトライをかけると良いとのことでしたので、5回ほどリトライするも全て失敗しました。
同じエラーの中に以下のエラーが出る時もあります。(node:16765) UnhandledPromiseRejectionWarning: ObnizBleScanStartError: startScanning enable=true was failed. Maybe Connection to a device is under going. state=12(Command Disallowed ) at Gap.setScanEnabledWait (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/gap.js:243:19) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async Gap.startScanningWait (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/gap.js:66:9) at async NobleBindings.startScanningWait /path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/bindings.js:69:9) at async BleScan.startWait (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/bleScan.js:113:9) (Use `node --trace-warnings ...` to show where the warning was created) (node:16765) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:16765) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. connectWait Exception: ObnizBleHciStateError: Connection Failed to be Established / Synchronization Timeout {"peripheralAddress":"f0ab544cf013"} at NobleBindings.onDisconnComplete (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/bindings.js:186:27) at Hci.emit (/path/to/app/node_modules/eventemitter3/index.js:203:33) at Hci.onHciEventData (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:860:18) at Hci.onSocketData (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:926:18) at ObnizBLEHci.notified (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/hci.js:68:22) at ObnizBLE.notifyFromObniz (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/ble.js:120:22) at Obniz.notifyToModule (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizComponents.js:262:37) at Obniz.notifyToModule (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizDevice.js:149:15) at Obniz.wsOnMessage (/path/to/app/node_modules/obniz/dist/src/obniz/ObnizConnection.js:406:26) at WebSocket.emit (events.js:315:20) { code: 10, state: 62 }
元のトピックと上記が混ざって出てくるのですが、しばらくすると下記のエラーが連続します。
ObnizTimeoutError: Receive data timeout. Waiting for readAclStream handle:0 cid:4 firstData:2 at Timeout.onTimeout [as _onTimeout] (/path/to/app/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/hci.js:162:28) at listOnTimeout (internal/timers.js:554:17) at processTimers (internal/timers.js:497:7) { code: 2, waitingFor: 'readAclStream handle:0 cid:4 firstData:2' }
以上です。併せてご確認よろしくお願い致します。
-
@センスウェイ前田建設 さん
bleモジュールの仕様として、コネクションを張るのとscanを行うのが同時にできないため、connectWaitを行うときにはscanが自動で停止されるようになっております。
connectWait終了後(接続完了後 or 不成立で切断後)には再度scanをすることができますので、接続後に再度scanを再開いただけるようにお願いいたします。
-
ご連絡ありがとうございます。
1つめのエラーは単純にLogttaとの接続不良で、2つめのエラーはscan接続に起因するものですね。
これはconnectWaitの結果を待ってから再接続する必要があると。
3つめは上記2つのエラーに対して正しく対処してない為Gatewayから切断されたということでよろしいでしょうか。
-
Connection Failed to be Established / Synchronization Timeout
接続ができなかったエラーになります。タイムアウトですので、具体的な原因は不明です(電波強度か、距離のことが多いですが、近くても発生することがあります)
UnhandledPromiseRejectionWarning: ObnizBleScanStartError: startScanning enable=true was failed.
connectWait中にscan.startをすると発生するエラーです。
Receive data timeout. Waiting for readAclStream handle:0 cid:4 firstData:2
デバイスと通信をしている途中で、データ読み取り要求を送ったものの応答がなく、タイムアウトになりました。1番目のエラーとおなじく、タイムアウトですので、具体的な原因は不明です。電波強度か、距離の事が多いです。
-
なお、最後の
Receive data timeout. Waiting for readAclStream handle:0 cid:4 firstData:2
の段階では、デバイスとの接続はまだ切断されていませんが、タイムアウト=通信がうまくできてない状態ですので、ほとんどの場合は直後に切断連絡が来ると思います。
-
ご連絡ありがとうございます。
やはりconnectWaitの後onfinishが呼ばれることになりますが、この時Logttaとのやりとり中の場合の振る舞いを返る必要がありそうですね。
それとLogttaCO2にはビーコンモードというのがあるようなのですが、これを利用するとiBS01Tのようにonfindの引数(peripheral)から値(co2)が取れるという認識でよろしいでしょうか。
iBS01Tの場合は温度や湿度が取れます。
Logttaへの接続処理が不要になるイメージですか?
-
ビーコンモードであればconnectしないので、scanをずっと続けられます。
これを利用するとiBS01Tのようにonfindの引数(peripheral)から値(co2)が取れるという認識でよろしいでしょうか。
こちらの認識であっています。
-
ビーコンモードにしない場合は、必ず接続処理を行う必要があるということですね。
本日ビーコンモードと通常モード(?)両方を試しておりますが、
最初のうちはペリフェラルを受信できていたのですが、
ある時から全然受信できなくなってしまいました。
ゲートウェイとLogttaは並べて置いてあり、距離が遠いからということはなさそうです。この原因と回避方法はありますでしょうか。
-
突然見えなくなったということはなにか変化があったようです。
たとえば、iPhoneアプリのLightBlueなど、BLEのアドを見れる他の手段でもLogttaのアドは見えるでしょうか。Logttaがアドを出さなくなったのを疑っております。
-
ご連絡遅くなりました。
こちらですが、デバイスの名称を変更してしまうと、isAdvDevice(peripheral)がTrueを返してくれないことが原因でした。
また、設定変更アプリが動きっぱなしの状態だと、コネクションモードでもつながらないことを確認しております。