Ohara Lab

ese774 Frame Quick Start

開発ガイドへ戻る

このページでは、通信方式に依存しない DeviceClass を実装し、ese774 Frame でデバイスサーバーとして公開し、別プロセスのクライアントから呼び出すまでを示す。以下は HTTP / FastAPI による最小構成であり、gRPC Frame の起動方法ではない。

1. インストール

Python 環境に ese774 Frame を導入する。

pip install ese774-frame

DeviceClass を単体で利用するだけなら、サーバーやクライアントを起動する必要はない。

2. DeviceClass とサーバーを実装する

次を server.py として保存する。

from ese774_frame.api_server import FastApiServer


class SimpleCtrl:
    def __init__(self, name: str = "simple", logger=None):
        self._name = name
        self._logger = logger

    def echo(self, value: str) -> str:
        return value

    @property
    def name(self) -> str:
        return self._name


if __name__ == "__main__":
    server = FastApiServer(
        device_cls=SimpleCtrl,
        router_cls=None,
        config=None,
        api_spec=None,
        device_kwargs={"name": "simple"},
        object_name="simple",
    )
    server.run(host="127.0.0.1", port=8000)

SimpleCtrl は HTTP、FastAPI、gRPC、クライアントを知らない通常の Python クラスである。FastApiServer が起動時に device_cls(**device_kwargs, logger=self.logger) で生成するため、コンストラクタは logger を受け取る。object_name="simple" はサーバー側の公開名であり、クライアント側と一致させる。

この例は api_spec=None と router_cls=None を指定し、標準 DeviceRouter による動的公開を利用する。専用 Router や明示的 API が必要な場合は動的ディスパッチと明示的 APIを参照する。

3. サーバーを起動する

ターミナルで次を実行する。

python server.py

サーバーは 127.0.0.1:8000 で待ち受ける。このアドレスはローカル接続用であり、外部ネットワークへの公開を意図していない。

4. 別プロセスから呼び出す

次を client.py として保存し、サーバーを起動したまま別のターミナルで実行する。

from ese774_frame.clients.sync_device_client import SyncDeviceClient


client = SyncDeviceClient(
    server_ip="127.0.0.1",
    server_port=8000,
    object_name="simple",
)
try:
    print(client.echo("hello"))  # hello
    print(client.name)           # simple
finally:
    client.close()

SyncDeviceClient は api_spec を省略すると自動ディスパッチを使用する。ここで呼び出す echo() と読み出す name は DeviceClass が公開するメソッドとプロパティである。client.close() は HTTP クライアントのリソースを解放する。

この例では DeviceProxy の登録は不要である。専用クライアントの登録と Factory の使用はDeviceProxy と Factory の利用で別途説明する。

5. 実機に適用する際の確認事項

実際の機器では、DeviceClass の初期化・切断、排他制御、通信断、装置固有のエラー処理を設計する。ネットワーク境界での要求・応答やエラーの転送は Frame 側の責務であり、DeviceClass に HTTP 固有の処理を追加しない。外部ホストへの公開には待受アドレスに加えて、アクセス制御と運用ネットワークの設計が必要になる。

ese774 Frame のソースコードと README

旧版(参考資料)

旧 Quick Start は現行仕様ではなく、履歴資料として保存している。

DeviceClass・Router・クライアントの継承を含む実装例