STEP 1407 — benchtop-mcp v0.8.0-alpha Akizuki wire-up 3 layer mock spike
目的
STEP 1406 で 明示された benchtop-mcp v0.7 の 5+ layer gap のうち、 「環境 (温湿度気圧) / 慣性 (IMU) / 距離 (ToF)」 の 3 layer を 秋月 で 即 入手可能な 定番 I2C module (BME280 / BNO055 / VL53L1X) を 想定 SKU として mock 実装で 追加する。 藤本さん directive 「1 から 5 を 順番に お願い致します」 の (1)+(2)+(3) を benchtop-mcp v0.8.0-alpha 1 版として 一括実装 (STEP 1396 olfact/biosensor v0.7 の pattern を そのまま 継承)。
実装内容
① Environment layer (BME280 mock)
- probe_id:
bme280-env-a1 - Part: Bosch Sensortec BME280 (I2C、 Akizuki 通販コード
109421、 ¥1,180) - Measures: temperature_c (-40〜85°C) / humidity_pct (0〜100%) / pressure_hpa (300〜1100 hPa)
- Tool:
measure_environment(probe_id, condition_tag) - Return: t/h/p 3 値 +
in_range_all+verdict_d8(TRUE/NEITHER)
② Inertial layer (BNO055 mock)
- probe_id:
bno055-imu-b1 - Part: Bosch Sensortec BNO055 9軸 fusion (I2C、 Akizuki 通販コード
116996、 ¥3,850) - Measures: quaternion (unit-norm 保証) / euler_deg / linear_acc_m_s2 / magnetic_uT / calibration_status
- Tool:
measure_orientation(probe_id, motion_tag) - Return: quaternion + euler ZYX + linear_acc + magnetic +
is_unit_quat
③ Distance layer (VL53L1X mock)
- probe_id:
vl53l1x-tof-c1 - Part: STMicroelectronics VL53L1X ToF (I2C、 Akizuki 通販コード
114249、 ¥1,780) - Measures: distance_mm (30〜4000mm 有効) / range_status (VALID/TOO_CLOSE/TOO_FAR)
- Tool:
measure_distance(probe_id, target_tag, timing_budget_ms=100.0) - Return: distance_mm + range_status +
verdict_d8(TRUE/NEITHER)
Tool 一覧 (v0.8.0-alpha 追加 4 tool)
| Tool | Layer | 返値 主要 field | Verdict source |
|---|---|---|---|
list_akizuki_probes() | — | probes (3 件、 akizuki_code + price_jpy + interface + range) | — |
measure_environment(probe_id, condition_tag) | environment | temperature_c / humidity_pct / pressure_hpa | STEP 1350 (2 値 subset) |
measure_orientation(probe_id, motion_tag) | inertial | quaternion + euler_deg + linear_acc + magnetic + calibration | quaternion norm ≈ 1.0 で 代替 verify |
measure_distance(probe_id, target_tag, timing_budget_ms) | distance | distance_mm + range_status | STEP 1350 (2 値 subset) |
Verify 結果
selftest 全 PASS
- Module 単体:
python benchtop_akizuki_wireup.py→ 9/9 PASS (list + env in-range + env determinism + IMU unit quaternion + IMU determinism + ToF range + timing_budget rejection + cross-layer misuse rejection + unknown probe rejection) - MCP tool wire:
python benchtop_mcp.py --selftest[22a-22f] → 6/6 PASS (list + env + env determinism + IMU + ToF + invalid input rejection 5 種) - 既 selftest [1-21] regression: clean (v0.5/v0.6/v0.7 全 動作維持)
使用例 (MCP tool 呼び出し)
# list_akizuki_probes
{ ok: True, probes: [{probe_id: 'bme280-env-a1', akizuki_code: '109421', ...}, ...],
probe_count: 3, hardware_available: False, is_mock: True }
# measure_environment('bme280-env-a1', 'room-default')
{ ok: True, probe_id: 'bme280-env-a1', probe_layer: 'environment', part_number: 'BME280',
temperature_c: 17.85, humidity_pct: 64.87, pressure_hpa: 822.0,
in_range_all: True, verdict_d8: 'TRUE', is_mock: True, hardware_available: False }
# measure_orientation('bno055-imu-b1', 'static-level')
{ ok: True, quaternion: {w: ..., x: ..., y: ..., z: ...} (unit-norm),
euler_deg: {roll: -50.31, pitch: 79.25, yaw: 75.89},
linear_acc_m_s2: {x: ..., y: ..., z: ...}, magnetic_uT: {...},
calibration_status: {sys: 3, gyro: 3, acc: 3, mag: 2}, is_unit_quat: True }
# measure_distance('vl53l1x-tof-c1', 'wall-2m', timing_budget_ms=100.0)
{ ok: True, distance_mm: 1114.5, timing_budget_ms: 100.0,
range_status: 'VALID', verdict_d8: 'TRUE', is_mock: True }
Honest scope (spike の 限界)
本 STEP 1407 の 限界
- 全 hardware 未取得 = 全 tool
hardware_available: False、 実 sensor physics (Bosch calibration curve / on-chip Madgwick-Mahony fusion / 940nm SPAD photon counting) は 模倣していない = interface skeleton のみ - deterministic mock = probe_id + tag の
hashlib.md5seed 由来、 cross-process 再現可能。 md5 は cryptographic 用途ではない (単純 seed 用途、 collision resistance 要求せず) - Verdict = 2 値 subset のみ = STEP 1350 8 値のうち TRUE (in-range) / NEITHER (out-of-range) のみ使用、 残 6 値 (FALSE/BOTH/SELF/∞/○/〜) 未使用
- SafetyGate 統合 未実装 = STEP 1406 で 「本 3 layer は SafetyGate 対象外 (3.3V < 5 mA)」 判定済、 v0.9+ で 通信 layer 追加時 に SafetyGate rule 拡張予定 (TELEC 認証 module 選択 discipline 等)
- 1 SKU / layer のみ = STEP 1406 で 抽出した 25 SKU のうち 3 pilot のみ実装、 SHT31/40I/DHT20 (環境) や LSM6DSV16X (IMU) や VL53L0X/GP2Y0E03 (距離) は v0.9+ 拡張 candidate
- 実 wire-up barrier 4 段 未着手 = hardware 発注 + host MCU (STM32/ESP32) + I2C driver + benchtop tool 定義。 本 STEP は 最下段 (tool 定義) の skeleton のみ、 上 3 段 は 別 STEP + 藤本さん judgment 待ち
次段候補 (defer、 藤本さん judgment 待ち)
- STEP 1408 (4) — 秋月 追加 recon で gas/CO2/VOC (CCS811/SCD40/BME680) enumeration → v0.9-alpha 化学 layer 候補
- STEP 1409 (5) — rei-scout 25 SKU を
import-as-mcpcategory に decision 記録 - v0.9-alpha 拡張 = 追加 SKU (SHT31/LSM6DSV16X/VL53L0X 等)、 SafetyGate rule 拡張 (通信 layer TELEC 認証)
- 実 hardware wire-up = BME280 実 module 発注 + ESP32 host + I2C driver + benchtop tool 実測データ差替 (別 arc、 藤本さん physical hardware 判断待ち)
関連
- STEP 1406 — Akizuki 25 SKU wire-up 候補 list (本 STEP の 起点)
- STEP 1404 — 秋月 全カテゴリ × 七機械 mapping (index)
- STEP 1396 — benchtop-mcp v0.7 olfact/biosensor mock (structural sibling pattern)
- STEP 1348 — benchtop-mcp v0.6 physics-limits
- STEP 1345 — benchtop-mcp v0.5 (機器層/記録層 + SafetyGate)
- STEP 1350 — d8_verdict_from_measurement (verdict field 原典)
- Source: benchtop-mcp commit 0adaaa6 (v0.8.0-alpha)