Navigation

    obniz Developer's Community Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    1. Home
    2. JUNICHI MASUKO
    J
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    JUNICHI MASUKO

    @JUNICHI MASUKO

    0
    Reputation
    7
    Posts
    2
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    JUNICHI MASUKO Follow

    Best posts made by JUNICHI MASUKO

    This user hasn't posted anything yet.

    Latest posts made by JUNICHI MASUKO

    • RE: iBS01Tの挙動につきまして

      @kido said in iBS01Tの挙動につきまして:

      周辺BLEの環境や、タイミング等によって受信できない場合があります。

      obnizデバイスはwifiとBLEのアンテナが共有となり、wifiを使っている間は受信できない
      BLEのアドは3chあるため、1/3の確率でしか受信できない
      などの要素があります。

      こちらの内容がわからないのですが、
      何が具体的な例はございますでしょうか。

      Obnizにこちらのアプリがアクセスしている段階で既にWiFiを利用していると思うのですが、
      それでもデータ受信はできております。
      さらにいうと、

      startWait(null, { duplicate: true, duration: null })
      

      にて基本的にはずっとつなぎっぱなしな状態です。

      ここでいうWiFiとBLEの切り替わりはどのタイミングで発生するのでしょうか。

      また、BLEが3chある為受信する確率が1/3とのことですが、

      • センサーは3ch持ち、そのうちどれか1つを利用してデータを送出する(ch指定はできない)
      • Obnizはセンサーの3chのうちどれか特定のchからしかデータを受信しない(ch指定はできない)
      • Obnizが受信するセンサーのchは変化しない(使うchはセンサー毎で固定?)

      という認識でよろしいでしょうか。
      ObnizというよりはBLEの仕様なのでしょうか。

      posted in Technical Support
      J
      JUNICHI MASUKO
    • RE: iBS01Tの挙動につきまして

      データの受信数にばらつきがあるというのは、
      1分間隔で送出する様に設定しておりますが、例えば1時間での取得数は下記の様になっております。

           22 address=edf5e8b67264
           34 address=f049a3f01596
           28 address=f37b3e64c037
      

      本来であれば60回受信できることが期待されますが、
      実際は半分から半分以下の状態です。

      取得コードは以下の様になっております。Obnizゲートウェイは1台です。

      export const obnizObserve = (device: any) => {
        const logger = new Logger(Logger.DEBUG, "logs/ibs01t.log")
      
        let obniz: Obniz | undefined = undefined
        try {
          obniz = new Obniz(device.id)
        } catch (error) {
          throw new Error(error)
        }
      
        obniz.onconnect = async () => {
      
          if (!obniz || !obniz.ble) {
            throw new Error("obniz or obniz.ble is not defined.")
          }
      
          const LOGTTA_CO2 = Obniz.getPartsClass("Logtta_CO2")
          const IBS01T = Obniz.getPartsClass("iBS01T")
          const iBS02PIR = Obniz.getPartsClass("iBS02PIR")
          const iBS02IR = Obniz.getPartsClass("iBS02IR")
      
          await obniz.ble.initWait()
      
          obniz.ble.scan.onfind = (peripheral) => {
            if (LOGTTA_CO2.isAdvDevice(peripheral)) {
              // Logtta CO2 Beacon mode.
              try {
                const data = LOGTTA_CO2.getData(peripheral)
      
                if (data) {
                  logger.info(
                    `obniz=${device.id} Logtta_CO2 address=${peripheral.address} co2=${data.co2} battery=${data.battery} rssi=${peripheral.rssi}`
                  )
                } else {
                  logger.info(`obniz=${device.id} iBS01T address=${peripheral.address} co2=0 battery=0`)
                }
              } catch (error) {
                logger.error(`obniz=${device.id} Logtta_CO2 address=${peripheral.address} co2=0`)
              }
            } else if (IBS01T.isDevice(peripheral)) {
              try {
                const data = IBS01T.getData(peripheral)
      
                if (data) {
                  logger.info(
                    `obniz=${device.id} iBS01T address=${peripheral.address} temperature=${data.temperature} humidity=${data.humidity} battery=${data.battery} rssi=${peripheral.rssi}`
                  )
                } else {
                  logger.info(
                    `obniz=${device.id} iBS01T address=${peripheral.address} temperature=0 humidity=0 battery=0 rssi=${peripheral.rssi}`
                  )
                }
              } catch (error) {
                logger.error(error)
              }
            } else if (iBS02PIR.isDevice(peripheral)) {
              try {
                const data = iBS02PIR.getData(peripheral)
      
                if (data) {
                  logger.info(
                    `obniz=${device.id} iBS02PIR address=${peripheral.address} event=${data.event} battery=${data.battery} rssi=${peripheral.rssi}`
                  )
                } else {
                  logger.info(
                    `obniz=${device.id} iBS02PIR address=${peripheral.address} event=0 battery=0 rssi=${peripheral.rssi}`
                  )
                }
              } catch (error) {
                logger.error(error)
              }
            } else if (iBS02IR.isDevice(peripheral)) {
              try {
                const data = iBS02IR.getData(peripheral)
      
                if (data) {
                  logger.info(
                    `obniz=${device.id} iBS02IR address=${peripheral.address} event=${data.event} battery=${data.battery} rssi=${peripheral.rssi}`
                  )
                } else {
                  logger.info(
                    `obniz=${device.id} iBS02IR address=${peripheral.address} event=0 battery=0 rssi=${peripheral.rssi}`
                  )
                }
              } catch (error) {
                logger.error(error)
              }
            } else {
              // console.log(`${now} obniz=${device.id} address=${peripheral.address} Other`)
            }
          }
      
          obniz.ble.scan.onfinish = async (peripherals, error) => {
            logger.debug(`scan timeout: ${device.id}`)
      
            if (error) {
              logger.debug(`scan onfinish: ${device.id}`)
              logger.error(error)
            }
      
            if (!obniz || !obniz.ble) {
              logger.error("obniz or obniz.ble is not defined.")
              throw new Error("obniz or obniz.ble is not defined.")
            }
      
            await obniz.ble.scan.startWait(null, { duplicate: true, duration: null })
            logger.debug(`Reconnect startWait: ${device.id}`)
          }
      
          await obniz.ble.scan.startWait(null, { duplicate: true, duration: null })
      
          logger.debug(`First startWait: ${device.id}`)
        }
      
        obniz.onclose = async () => {
          logger.debug(`onclose: ${device.id}`)
        }
      }
      
      posted in Technical Support
      J
      JUNICHI MASUKO
    • iBS01Tの挙動につきまして

      長い期間iBS01Tのデータを受信して気になる点が幾つかございましたので、
      確認させてください。
      お客様よりクレームが入っており、早急な解決が必要です。

      ・丸め誤差
       温度で以下のような値がとれます。
       8.040000000000001
       4.76
       端末同じものではもタイミングによって桁数が多いデータがくることがあります。
       こちら仕様でしょうか。設定で桁数を固定できますでしょうか。 
      ・複数受信
       同じデバイスから同時刻・同タイミングに同じデータが3-6個送られてくることが
       ありました。こちら仕様でしょうか。設定で回避できますでしょうか。
      ・バッテリー値
       外部給電のバッテリー値についてはどのような表記で送られてきますか。
       おおよそ3.xxの値です。
       LogttaCO2の場合は固定表記になりますが、iBS01Tの場合は固定にならないでしょうか。
      ・データ受信数に差がある
       1分単位でデータ送出しておりますが、データの受信にばらつきが発生しております。
       この原因について考えられることはございますでしょうか。

      posted in Technical Support
      J
      JUNICHI MASUKO
    • RE: Logtta CO2に接続できない原因

      ご連絡遅くなりました。
      こちらですが、デバイスの名称を変更してしまうと、isAdvDevice(peripheral)がTrueを返してくれないことが原因でした。
      また、設定変更アプリが動きっぱなしの状態だと、コネクションモードでもつながらないことを確認しております。

      posted in Technical Support
      J
      JUNICHI MASUKO
    • Obnizデバイスの情報をAWS IoTに流す方法につきまして

      現在はスクリプトベースでObnizBLEGatewayに接続してから
      LogttaCO2やiBS01TやBeaconからperipheralを取得してますが、
      それらの値(CO2濃度や温度湿度など)をAWS IoTに送ることは可能でしょうか。
      AWS IoTではHTTP、MQTTなどのプロトコルに対応しているようですが、
      具体的にはスクリプト内でデータを作成して送り出すと言うことになるのでしょうか。

      既に成功している方はどのような手法で行っていますか?

      posted in Technical Support
      J
      JUNICHI MASUKO
    • RE: Logtta CO2の挙動につきまして

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

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

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

      posted in Technical Support
      J
      JUNICHI MASUKO
    • 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からの値の取り出し方として、
      短時間で接続/切断を繰り返す方法が向いてないのでしょうか。

      posted in Technical Support
      J
      JUNICHI MASUKO