メインコンテンツへスキップ

characteristic.registerNotifyWait()でエラー繰り返し約5時間受信できず

コメント

6件のコメント

  • obnizサポートチーム

    Bluetoothの通信が何らかおかしくなった状態と思われます。
    obnizを再起動することで正常化することがありますのでそちらをお試しください。

    再起動するためには下記のいずれかを実施ください

    0
  • kubota

    ご回答ありがとうございます。

    obniz.reboot()を実行し再起動することを確認できました。

    【確認】

    ①reboot()後にonconnect()するのかと思ったのですが、来ませんでした。

    reboot後の正しい動作を教えてください(scanでしょうか)

    ②本クラッシュを検知するには、どうしたらよいでしょうか。

    ※registerNotifyWait()はtry~catchしていました。

     

    以上、よろしくお願いいたします。

    0
  • obnizサポートチーム

    reboot後はデバイスが再起動しますので、デバイスがonlineになったタイミングでobniz.onconnectが自動的に呼ばれます。
    onconnectの中身が再度順次実行されますので、そちらに実行したいプログラムを記載ください。

     

    try catchはソースコードを拝見しないとわからない部分が多くなっておりますが、他デバイスから通知がくるcallback時のエラーの場合、try catchハンドリングが不可となっております。
    StackTraceとかはなにか出ているでしょうか。

    0
  • kubota

    ご回答ありがとうございます。

    本件のStackTraceとその他3つのStackTraceがあります。

    (ファイルの添付はできないのでしょうか)

    ご意見を伺いたくお願いいたします。

    ①ObnizTimeoutError: Receive data timeout. Waiting for readAclStream handle:0 cid:4 firstData:19

    ②ObnizBleUnknownDescriptorError: unknown descriptor.  peripheral :XXXXX service

    ③TypeError: Cannot read property 'notifyFromServer' of null

    ④RangeError [ERR_OUT_OF_RANGE]: The value of "offset" is out of range. It must be >= 0 and <= 27. Received 28

    以上、よろしくお願いいたします。

    0
  • obnizサポートチーム

    Cannot read property 'notifyFromServer' of null 

    などもあることを考えると、状態がおかしくなっているようです。

    もしかして、obnizデバイスとBLEデバイスのコネクションが何らかの理由で切断され、その切断後もnotificationを受け取ろうとプログラムを動かしていないでしょうか。

     

    BLEデバイスの切断はperipheral.ondisconnectコールバックにて検知が可能ですので、そちらが呼ばれていないかもご確認いただけないでしょうか。

     

    0
  • kubota

    ご回答ありがとうございます。

    peripheral.ondisconnectを試したところ、次のことが判明しました。

    ①peripheral.ondisconnect後にnotifyをリトライしていた(エラー時は3回リトライ)

    ②notifyのリトライに失敗したら、peripheral.disconnectWait()していた

    上記のエラー時リトライやdisconnectWait()は不要でしたでしょうか。

    また、BLEデバイスの切断検知したときのセントラル側動作はスキャンでしょうか。

     

    以上、よろしくお願いいたします。

     

     

    0

サインインしてコメントを残してください。