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 を参照してください。