Skip to content

API Guide

kazunokoライブラリのPython APIを使用して、OSECHI検出器と通信する方法を解説します。


APIの構成

kazunokoのAPIは3つのレイヤーで構成されています。

1. 接続層 - デバイスへの接続管理

Connection ドキュメント

  • connect() - 推奨される接続方法
  • PortDevice - シリアルデバイスの実装
  • detect_port() - ポート自動検出

用途: デバイスとのシリアル通信接続を確立

from kazunoko import connect

with connect() as device:
    print("Connected!")

2. コマンド層 - 高レベルなデバイス操作

Command クラス ドキュメント

  • Command - デバイスコマンド実行
  • 14個のメソッド:status, version, threshold, led, など
  • 直感的なAPIですべてのデバイスコマンドをカバー

用途: デバイスコマンドを簡潔に実行

from kazunoko import connect, Command

with connect() as device:
    cmd = Command(device)
    response = cmd.status()
    print(response.version)

3. プロトコル層 - 低レベルな通信

DeviceProtocol ドキュメント

  • DeviceProtocol - 通信インターフェイス定義
  • send_command() - コマンド送信
  • receive_response() - レスポンス受信
  • query() - 送受信の一括操作

用途: カスタムコマンド送信や詳細な制御

with connect() as device:
    response = device.query("CUSTOM_COMMAND")

ユースケース別ガイド

基本的なステータス確認

デバイスの状態を確認する、もっとも一般的な使い方です。

from kazunoko import connect, Command

with connect() as device:
    cmd = Command(device)
    status = cmd.status()
    print(f"Version: {status.version}")
    print(f"Poll Count: {status.poll_count}")

詳細は Command クラス を参照してください。


デバイス設定変更

スレッショルドやポーリング回数、デッドタイム(不感時間)などを設定します。

from kazunoko import connect, Command

with connect() as device:
    cmd = Command(device)

    # 単一チャネルのスレッショルド設定
    cmd.threshold(1, 300)

    # 複数チャネルを一度に設定
    cmd.thresholds({1: 300, 2: 350, 3: 320})

    # 1回あたりのポーリング回数
    cmd.poll_count(100)

検出データの読み込み

デバイスからのイベントの検出データを受け取る場合は、 Command.readを使用します。

from kazunoko import connect, Command

with connect() as device:
    cmd = Command(device)

    # 単一のイベント読み込み
    event = cmd.read()
    print(f"Signal: {event.signal1}")

    # 複数イベントの処理
    for i in range(100):
        event = cmd.read()
        # イベント処理...

低レベルなコマンド送信

カスタムコマンドや特殊な操作が必要な場合は DeviceProtocol.queryを使用します。

from kazunoko import connect

with connect() as device:
    # 直接コマンド送信
    response = device.query("YOUR_CUSTOM_COMMAND")
    print(response.model_dump())

詳細は DeviceProtocol を参照してください。


エラーハンドリング

kazunokoのすべてのエラーは階層化された例外(exception)で処理できます。

from kazunoko import connect, Command
from kazunoko.exceptions import (
    DeviceError,
    ResponseTimeout,
    KazunokoError,
)

try:
    with connect() as device:
        cmd = Command(device)
        response = cmd.status()
except DeviceError as e:
    print(f"Connection failed: {e}")
except ResponseTimeout:
    print("Device did not respond")
except KazunokoError as e:
    print(f"Other kazunoko error: {e}")

詳細は エラーハンドリング を参照してください。


テストとモック

実デバイスなしでテストできます。

from kazunoko import MockDevice, Command

# モックデバイスを作成
mock = MockDevice()

with mock:
    cmd = Command(mock)
    response = cmd.status()
    # 実デバイスと同じように動作

Response オブジェクト

すべてのコマンドは Response オブジェクトを返します。

ドット記法でアクセス

response = cmd.status()
print(response.version)      # "1.10.1"
print(response.poll_count)   # 100
print(response.type)         # "response"

辞書アクセス

data = response.model_dump()
print(data)  # すべてのフィールドを辞書で取得

JSON 変換

import json
json_str = json.dumps(response.model_dump())

API リファレンス

Command クラス メソッド一覧

情報取得:

  • help() - 利用可能なコマンド一覧
  • status() - デバイス状態確認
  • version() - ファームウェアのバージョン
  • uptime() - デバイスの稼働時間
  • mac_address() - デバイスのMACアドレス
  • buffer_stats() - イベントバッファーの統計情報

設定:

  • poll_count(count) - 検出時のポーリング回数
  • deadtime(milliseconds) - 意図的なデッドタイム設定
  • threshold(channel, value) - 単一チャンネルのスレッショルド設定
  • thresholds(dict) - 複数チャネルのスレッショルド設定
  • time(unixtime) - デバイスの時刻設定
  • reset() - デバイスの設定をリセット

制御:

  • led(channel, state) - デバイスのLED制御

データ:

  • read() - 検出イベント読み込み

詳細は Command クラス を参照してください。


接続設定

デフォルト接続

from kazunoko import connect

# ポート自動検出、デフォルト設定
device = connect()

カスタム設定

from kazunoko import PortDevice

# タイムアウトを長くする
device = PortDevice(
    port="/dev/ttyUSB0",
    baudrate=115200,
    timeout=2.0  # 2秒
)

詳細は Connection を参照してください。


次のステップ

  1. まず読むべき: Connection ドキュメント - デバイス接続方法
  2. 次に読むべき: Command クラス - コマンド実行方法
  3. その後: エラーハンドリング - 本番コード向け
  4. 必要に応じて: DeviceProtocol - 低レベル操作

よくある質問

Q: CommandクラスとPortDeviceの違いは?

A: Commandクラスは高レベルなAPIで、通常はこちらをこれします。PortDeviceはより低レベルなAPIで、カスタム操作が必要な場合に使用します。

Q: どのポート設定を使えばいい?

A: デフォルト設定を使い、複数デバイス接続時は明示的にポート指定してください。

Q: タイムアウトエラーが出た場合は?

A: ポート接続を確認し、タイムアウト時間を長くしてみてください(例: timeout=2.0

Q: 複数デバイスを同時に操作できる?

A: はい。複数の connect() で異なるポートに接続できます。

device1 = connect("/dev/ttyUSB0")
device2 = connect("/dev/ttyUSB1")

参考

  • README - プロジェクト概要
  • CLAUDE.md - 開発者向けドキュメント