0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

obnizでTypeScriptでオムロン環境センサのデータを取得してみる

Last updated at Posted at 2022-02-14

はじめに

ちょっと最近何年ぶりかにobnizに触れる機会があった。気づいてみればOSバージョンは3.xになっていて発売当初に買ったデバイスはアップデートしないとほぼ役に立たない感じになっていた。ただアップデートしてみるとnode.jsで動くわTypeScriptをサポートしてるわで使いやすい環境になっている

無線デバイスも多くサポートされているのでBLE系デバイスを実験するのも悪くなさげ。ということでリハビリがてら2JCIE-BUからデータを取ってみることにした。当然TypeScriptで!

やってみた

まず2JCIE-BUに電源が入っていてデータが飛んでいることが前提。obnizはWiFiにつないでObniz ID表示状態にしておく

以下で開発環境を整えてエディタを開く

mkdir omron_2jcie && cd $_
yarn init
yarn add obniz
yarn add -D typescript ts-node @types/node
yarn run tsc --init
mkdir src
vi src/index.ts

コードは以下。[OBNIZ ID]はobnizに表示されているIDに読み替える

index.ts
import Obniz from "obniz";

const OBNIZ_ID = '[OBNIZ ID]';

const obniz = new Obniz(OBNIZ_ID);
obniz.onconnect = async () => {
  if (!obniz.ble) return false;
  const Device = Obniz.getPartsClass('2JCIE');
  await obniz.ble.initWait();
  obniz.ble.scan.onfind = (p) => {
    if (Device.isDevice(p)) {
      const data = Device.getData(p);
      if (data) {
        if (typeof data === 'object') {
          const envs = [];
          for (const key in data) envs.push(`${key}: ${data[key]}`);
          const ret = envs.join("\n");
          console.log(ret);
          obniz.display?.clear();
          obniz.display?.print(envs[0]);
        }
      }
    }
  };
  await obniz.ble.scan.startWait();
};

データはJSONで返ってくるので適当にパースしてconsole.log()で表示した。obniz側では多すぎて見切れるので一番最初の温度のみ表示した

実行する

yarn run ts-node src/index.ts

yarn run v1.22.17
$ /Users/user/work/omron_2jcie/node_modules/.bin/ts-node src/index.ts
temperature: 20.48
relative_humidity: 38.54
light: 230
barometric_pressure: 1013.6
sound_noise: 44.62
etvoc: 843
eco2: 2060

PXL_20220214_021929105.jpg

環境データとれた。obniz端末のほうも温度が表示された。

パーツの型まわりが微妙だった件

コード書いてて気になったことが一点。Obniz.getPartsClass()で取得した2JCIEクラスインスタンスの型付がどうしてもうまくいかなかかった

index.ts
const Device = Obniz.getPartsClass('2JCIE');

Deviceはanyとなるので以降のコード補完がなくて不便。パーツのソースコードを見る限りOMRON_2JCIEでいいのかもと

index.ts
const Device: OMRON_2JCIE = Obniz.getPartsClass('2JCIE');

としてみたがダメだった。定義されてないか。どうやるのが正しいんだろ?わかるひといらっしゃったら教えてください

どうやったらいいんだろとちょっと探してgetPartsClass()の中身を見てみたら固定でanyを返すようになっていた。これはパーツの型を返すようにしてほしいなあ

おわりに

発売当初はサイロ感が強くてあまりいい印象を持てなかったobnizだけどなんか自由感が増して楽しくなった感があります。TSまわりもだんだん強化されていくことを期待してちょいちょい使ってみたいと思いました^^

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?