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を返してくれないことが原因でした。
    また、設定変更アプリが動きっぱなしの状態だと、コネクションモードでもつながらないことを確認しております。


Log in to reply
 

SUGGESTED TOPICS

  • 3
  • 2
  • 5
  • 2
  • 3
  • 2
  • 5
  • 5