環境センサ ブリッジ v0.3（非公式・有志アプリ）
================================================

■ これは何？
生産終了したオムロン環境センサ 2JCIE-BU01（USB型）のための、
非公式の Android アプリです。公式アプリ「ENV Monitor」は
Android 版が配信終了しているため、その代替として作りました。
オムロン公式とは一切関係ありません。

センサと Bluetooth（BLE）で接続し、以下の値を表示します。
気温 / 湿度 / 照度 / 気圧 / 騒音 / eTVOC / eCO2 / 不快指数 / WBGT
振動情報 / SI値 / PGA / 震度相当 / 3軸加速度（X・Y・Z）

もう一つの機能として、HTTP の小さな窓口を持っています。
  http://<端末のIP>:8766/latest.json … 最新の値を JSON で取得
  http://<端末のIP>:8766/read        … その場で読み取って取得
  http://<端末のIP>:8766/status      … 状態確認
  http://<端末のIP>:8766/memory_info … 蓄積データの概要（件数など）
  http://<端末のIP>:8766/memory      … 蓄積データの読み出し（下記）
  POST http://<端末のIP>:8766/control … 窓口の開閉・モード切替
     {"action":"open"} / {"action":"close"}
     {"action":"set_mode","mode":"ondemand"}
     {"action":"set_mode","mode":"polling","interval_sec":300}
AI アシスタント（Muse など）から値を取りに行く使い方を想定しています。

■ /latest.json の出力形式
{"received_at":"2026-11-11T17:42:49.11652+09:00","read_at":"2026-11-11T17:42:49.11652+09:00","seq":34,"temperature":10.46,"humidity":70.45,"light":0,"pressure":997.729,"noise":68.6,"eTVOC":76,"eCO2":905,"thi":51.99,"wbgt":12.8,"vibration":0,"si":0.0,"pga":0.0,"seismic_intensity":0.0,"acc_x":12.3,"acc_y":-45.0,"acc_z":980.1}

・received_at / read_at … ISO 8601（タイムゾーン付き）。読み取り時刻
・seq … センサ内部の連番（0〜255で循環）
・temperature … 気温（℃）    ・humidity … 湿度（%）
・light … 照度（lx、整数）   ・pressure … 気圧（hPa）
・noise … 騒音（dB）         ・eTVOC …（ppb）  ・eCO2 …（ppm）
・thi … 不快指数             ・wbgt … 熱中症警戒度（℃）
・vibration … 振動情報（0=なし、1=振動中、2=地震中）
・si … SI値（kine）          ・pga … PGA（gal）
・seismic_intensity … 震度相当
・acc_x / acc_y / acc_z … 3軸加速度（gal）

■ 蓄積データ（Memory data）の読み出し ※v0.3 新機能
センサ本体の内蔵メモリ（FLASH）に蓄積された過去の記録を、
BLE 経由で読み出せます。センサ側で「時刻設定」を書き込み、
保存間隔を設定して記録させていることが前提です
（蓄積は最大 60,000 件、超えると古い記録から上書きされます）。

・GET /memory_info
  蓄積の概要を返します。
  memory_index_latest … 最新の記録の番号
  memory_index_last   … 残っている最古の記録の番号
  stored_count        … 蓄積件数
  storage_interval_sec … 保存間隔（秒）
  latest_recorded_at / last_recorded_at … 最新/最古の記録時刻

・GET /memory?start=<番号>&count=<件数>
  記録をまとめて取得します。start を省略すると新しい方から
  count 件を返します。count の上限は 1 回 1,000 件です
  （それ以上は複数回に分けてください）。
  応答：{"start":…,"count":…,"count_returned":…,"records":[…]}
  records の各要素は /latest.json と同じキー・単位に加えて、
  memory_index（記録番号）、recorded_at（記録時刻）、
  time_counter（センサの時刻カウンタ生値）、flash_error を持ちます。
  転送が途中で失敗した場合は 502 で、取得できた分だけ返します。

蓄積データの注意点：
・記録時刻（recorded_at）は、センサの時刻カウンタを UNIX time
  として解釈したものです。センサの時刻設定を UNIX time ベースで
  行った場合のみ、実際の時刻と一致します。
・蓄積している途中でセンサの時刻設定を変更すると、それ以降の
  記録時刻がずれて検出できません（センサ側の仕様です）。
・蓄積データには加速度（acc_x など）は含まれません（常に null）。
  加速度はリアルタイム読み取り（/read）でのみ取得できます。

■ 動作環境
・Android 8.0 以上、Bluetooth LE 対応端末
・検証機：ALLDOCUBE iPlay 80 mini Ultra
・対象センサ：オムロン 2JCIE-BU01（F1 含む）

■ インストール
APK ファイルを開いてインストールしてください。
（「提供元不明のアプリ」の許可を求められたら許可してください）
※ファイル名の末尾が .apk になっていないとインストーラーが
　開きません。その場合はファイル名を変更してください。

■ 使い方
1. アプリ「環境センサ ブリッジ」を開く
2. 「サービス開始」を押す（Bluetooth・通知の許可を求められたら許可）
3. 「電池の最適化を除外する」から除外を許可
   （端末が眠っても窓口が応答するために必要です）
4. センサに給電する（USB 充電器で OK）
5. 「今すぐ読む」で値が表示されます
   蓄積データは、画面下部の「蓄積データ」欄か HTTP 窓口からどうぞ

■ 既知の制限（v0.3）
・端末を再起動したあとは、アプリを開いて「サービス開始」の
　押し直しが必要です（自動起動は未実装）
・窓口に認証はありません。信頼できるネットワーク内での利用を
　想定しています（Tailscale 経由がおすすめです）
・センサの仕様上、BLE 接続は約30秒で切れますが、読み取りの
　たびに自動でつなぎ直すので問題ありません
　（蓄積データの大量読み出しでは、途中で切れて部分的な結果に
　なる場合があります。その場合は件数を分けて再試行してください）

■ 検証用ハッシュ（SHA-256）
EnvSensorBridge-v0.3.apk
480a77df2bd6b80e9127949f0b0be538a7b0d20a224da6a0ff8927bc983c5dbf

■ 免責
有志の個人製作アプリです。動作の保証はありません。
自己責任でご利用ください。
