Logtta CO2の挙動につきまして



  • 3分に一度実行されるホステッドアプリで、
    インストールされてObniz BLEを経由して
    Beacon、iBS01T、LogttaCO2にアクセスしております。

    各BLEでperipheralをstartAllWait()を利用して一気に取得後、
    それぞれのperipheralをチェックしつつ目的の値を取得しております。
    BeaconとiBS01Tについては問題なく取得できております。

    LogttaCO2については、以下のようなエラーが発生してアクセスできないことがあります。

    ---- ここから

    ObnizBleHciStateError: Connection Failed to be Established /
    Synchronization Timeout {"peripheralAddress":"f0ab544baf34"}
    at NobleBindings.onDisconnComplete
    (/path/to/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/central/bindings.js:182:27)
    at Hci.emit (/path/to/node_modules/eventemitter3/index.js:203:33)
    at Hci.onHciEventData
    (/path/to/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:868:18)
    at Hci.onSocketData
    (/path/to/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/protocol/hci.js:934:18)
    at Obniz._runUserCreatedFunction
    (/path/to/node_modules/obniz/dist/src/obniz/ObnizConnection.js:286:13)
    at ObnizBLEHci.notified
    (/path/to/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/hci.js:66:24)
    at ObnizBLE.<anonymous>
    (/path/to/node_modules/obniz/dist/src/obniz/libs/embeds/bleHci/ble.js:46:26)
    at ObnizBLE.emit
    (/path/to/node_modules/eventemitter3/index.js:181:35)
    at ObnizBLE.notifyFromObniz
    (/path/to/node_modules/obniz/dist/src/obniz/libs/ComponentAbstact.js:30:22)
    at Obniz.notifyToModule
    (/path/to/node_modules/obniz/dist/src/obniz/ObnizComponents.js:262:37)
    {
    code: 10,
    state: 62
    }
    

    ---- ここまで

    これはperipheralをチェックしたあと、Logttaであった場合に接続しにいくところで発生しているのではないかと考えております。
    該当するコードは下記の箇所です。

    const LOGTTA_CO2 = Obniz.getPartsClass("Logtta_CO2");
    const IBS01T = Obniz.getPartsClass("iBS01T");
    
    if (LOGTTA_CO2.isDevice(peripheral)) {
        // console.log(`${obniz.id} Logtta CO2 is found.`);
        const device = new LOGTTA_CO2(peripheral);
    
        try {
            await device.connectWait();
    
            const co2 = await device.getWait();
            console.log(co2);
    
            await device.disconnectWait();
        } catch (e) {
            console.error(e);
    } else if (IBS01T.isDevice(peripheral)) {
     :
    

    上記エラーの詳細な内容をお知らせ頂ければと思います。
    また、Logtta CO2からの値の取り出し方として、
    短時間で接続/切断を繰り返す方法が向いてないのでしょうか。



  • @JUNICHI-MASUKO さん

    Synchronization Timeout はBLEを接続しに行こうとしたが、デバイス側の応答がないなどでうまく接続が成立せず、一定時間たったときのエラーになります。
    BLEとして定義されているエラーです。

    BLEは無線のため、100%接続ができるわけではなく、接続失敗も多分に発生します。
    Synchronization Timeoutがおきても大丈夫なようにプログラムを書くことをおすすめします
    (try catchで判定してリトライするようにするなど)

    また、接続失敗確率を下げる修正が先週リリースしたobnizjs 3.12.0に入っておりますので、
    アップデートがまだでしたら、そちらも合わせてアップデートいただけると良いかと思います。



  • ご連絡ありがとうございます。

    リトライ処理及びobniz.jsをアップデートしたところ、
    今のところは予定通りの動作をしております。

    obniz.jsのアップデートによりそもそもリトライする頻度が劇的に減っております。


Log in to reply
 

SUGGESTED TOPICS