Skip to content

Command クラス

Commandクラスは、OSECHI検出器に制御コマンドを送信するための簡潔なインターフェイスです。

概要

デバイスに接続した後、Commandを使ってコマンドを実行します。

from kazunoko import connect, Command

with connect() as device:
    cmd = Command(device)
    response = cmd.status()
    print(response.status)  # "ok"

よく使うコマンド

status() - デバイス状態確認

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

version() - デバイスバージョン取得

response = cmd.version()
print(response.version)

help() - コマンド一覧を取得

response = cmd.help()

time(unixtime) - デバイス時刻を設定

import time
unixtime = int(time.time())
cmd.time(unixtime)

read() - 検出イベントを読み取る

# 単一のイベントを読み取る
event = cmd.read()
print(event.signal1)
print(event.adc)
```python

```python
# 複数イベントを受け取る
for i in range(10):
    event = cmd.read()
    print(f"Event {i}: {event}")

threshold(channel, value) - スレッショルド値を設定

# チャネル1のスレッショルドを300に設定
response = cmd.threshold(1, 300)

thresholds(dict) - 複数チャネルを一度に設定

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

Responseオブジェクト

コマンドの実行結果はResponseオブジェクトで返されます。

ドット記法でアクセス

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

辞書アクセス

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

# JSON形式に変換
import json
json_str = json.dumps(data)

複数コマンドの実行

デバイスのセットアップを例として、 複数のコマンドを順序立てて実行してみます。

import time

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

    # 1. ステータス確認
    status = cmd.status()
    print(f"Version: {status.version}")

    # 2. スレッショルド設定
    cmd.threshold(1, 300)
    time.sleep(0.5)  # デバイス処理を待つ

    cmd.threshold(2, 360)
    time.sleep(0.5)

    # 3. 設定確認
    final = cmd.status()
    print("Setup complete")

コマンド間隔

デバイスが複数コマンドを処理するために、コマンド間に短い遅延(0.1~0.5秒)を挟むことをオススメします。


エラーハンドリング

from kazunoko import ResponseTimeout, CommandTimeout

try:
    response = cmd.status()
except ResponseTimeout:
    print("No response from device")
except CommandTimeout:
    print("Failed to send command")

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


テスト用:MockDevice

実デバイスなしでコードをテストできます:

from kazunoko import MockDevice, Command

# MockDevice を使用
mock = MockDevice()

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

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


低レベルアクセス

Commandを使わずに直接コマンドを送信することもできます:

with connect() as device:
    # 直接コマンド文字列を送信
    response = device.query("STATUS")

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