5.11 での QtKNX のアップデート

この記事は The Qt BlogQtKNX updates for 5.11 を翻訳したものです。
執筆: Andrew O'Doherty, 2018年05月18日

以前 KNX の対応 についてお知らせをして以降しばらく間が空いてしまいましたが、5.11 のリリースに合わせてアップデートを行う QtKNX の内容を簡単に紹介したいと思います。

API の改善

今回のアップデートの焦点の一つは Qt KNX のオブジェクトの走査と構築をより直感的に改善することでした。KNXnet/IP フレームで必要となる数多くの仕様に対応するために、プロキシパターンを導入しました。例えば、KNXnet/IP の接続要求のフレームで実行される情報は QKnxNetIpConnectRequestProxy クラスを利用して得ることができます。

以下のサンプルコードでは、KNXnet/IP のサーバー側が接続要求のフレームを受信する際にこのクラスを使っています。

QKnxNetIpFrame frame = //...;
QKnxNetIpConnectRequestProxy request(frame);
if (!request.isValid())
return;

auto ctrlEndpoint = request.controlEndpoint();
auto dataEndpoint = request.dataEndpoint();
auto cri = request.requestInformation();

このフレームはいくつものフィールドを持つ構造のため、コンストラクタに渡すパラメーターの順序を正確に覚える必要がある設計では使いづらくなります。これを簡単にするために、ビルダーパターンを採用しました。これによりオブジェクトの生成がカプセル化され、柔軟に使えるようになりました。

QKnxNetIpConnectRequestProxy のコンストラクタの代わりに QKnxNetIpConnectRequestProxy::builder() を利用することで以下のようにコードがすっきりとします。

auto frame = QKnxNetIpConnectRequestProxy::builder()
.setControlEndpoint(hpai)
.setDataEndpoint(hpai)
.create();

このプロキシとビルダーパターンはほぼすべての QtKNX のクラスで採用されています。

ETS KNX プロジェクトファイルのパース

もう一つの新機能は ETS KNX プロジェクトファイルのサポートです。特に、グループアドレスと関連のデータポイントタイプ(DPT)に対応しました。KNX の世界に馴染みのない方もいるかと思いますが、ETS は Engineering Tool Software の頭文字をとったもので、KNX のインストールのデザインとコミッショニングのためのツールになります。

以下のコードは、ETS KNX プロジェクトファイルをパースする機能を使うサンプルです。

QKnxGroupAddressInfos infos(projFilePath);
infos.parse();

次に、パースに問題がなかったことを確認します。

if (infos.status() != QKnxGroupAddressInfos::Status::NoError)
return;

最後に、パースした情報を展開します。

for (const auto &projId: infos.projectIds()) {
auto installations = infos.installations(projId);
// ...
for (const QString &installation: installations) {
for (const QKnxGroupAddressInfo &addInfo: groupAddresses) {
if (!addInfo.isValid())
return;
//...
}
}
}

その他の主要なアップデート

  • KNXnet/IP フレームと構造体の構築と走査のためのデザインパターンを導入
  • DPT-30 までの新しいデータポイントタイプ(DPT)と、100以下のサブナンバーを追加
  • DPT へのアクセスの簡易化やカスタムタイプの登録を可能にするファクトリ(QKnxDatapointTypeFactory)を導入
  • KNXnet/IP デバイス管理およびトンネル接続用の Network Address Translation(NAT) を有効化
  • Transport Layer Protocol Data Units(TPDUs) の構築のための実験的な API の追加

この他にも、ドキュメンテーションの大幅な改善やその他の更新もしました。QtKNX 5.11 のリリースをお楽しみに。フィードバックもお待ちしています!


Blog Topics:

Comments