シリアルストリーミングコネクタ - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は、2023 年 6 月 30 日に延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付を過ぎる AWS IoT Greengrass V1 と、 は機能、機能強化、バグ修正、セキュリティパッチを提供する更新プログラムをリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行する AWS IoT Greengrass Version 2ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

シリアルストリーミングコネクタ

警告

このコネクタは延長ライフサイクルフェーズに移行しており、AWS IoT Greengrass では、機能、既存機能の拡張、セキュリティパッチ、バグ修正を提供するアップデートはリリースされません。詳細については、「AWS IoT Greengrass Version 1 メンテナンスポリシー」を参照してください。

シリアルストリーミングコネクタにより、AWS IoT Greengrass コアデバイスのシリアルポートに読み書きを行えます。

このコネクタは 2 つのオペレーションモードをサポートしています。

  • オンデマンド読み取り MQTT トピックに対する読み取りおよび書き込みリクエストを受け取り、読み取りオペレーションのレスポンスまたは書き込みオペレーションのステータスを発行します。

  • ポーリング読み取り 定期的にシリアルポートから読み取ります。このモードではオンデマンド読み取りリクエストもサポートされます。

注記

読み取りリクエストの最大読み取り長は 63,994 バイトに制限されています。書き込みリクエストの最大データ長は 128,000 バイトに制限されています。

このコネクタには、次のバージョンがあります。

バージョン

ARN

3

arn:aws:greengrass:region::/connectors/SerialStream/versions/3

2

arn:aws:greengrass:region::/connectors/SerialStream/versions/2

1

arn:aws:greengrass:region::/connectors/SerialStream/versions/1

バージョンの変更については、「Changelog」を参照してください。

要件

このコネクタには以下の要件があります。

Version 3
  • AWS IoT Greengrass Core ソフトウェア v1.9.3 以降。

  • Python バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

    注記

    Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    これにより、AWS IoT Greengrass の Python 要件を満たすようにデバイスが設定されます。

  • ターゲットシリアルポートを参照する Greengrass グループのローカルデバイスリソース

    注記

    このコネクタをデプロイする前に、シリアルポートを設定し、このシリアルポートに対して読み書きできることを確認してください。

Versions 1 - 2
  • AWS IoT Greengrass Core ソフトウェア v1.7 以降。

  • Python バージョン 2.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

  • ターゲットシリアルポートを参照する Greengrass グループのローカルデバイスリソース

    注記

    このコネクタをデプロイする前に、シリアルポートを設定し、このシリアルポートに対して読み書きできることを確認してください。

コネクタパラメータ

このコネクタには、以下のパラメータが用意されています。

BaudRate

シリアル接続のボーレート。

AWS IoT コンソールでの表示名: [Baud rate] (ボーレート)

必須: true

タイプ: string

有効な値: 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200, 230400

有効なパターン: ^110$|^300$|^600$|^1200$|^2400$|^4800$|^9600$|^14400$|^19200$|^28800$|^38400$|^56000$|^57600$|^115200$|^230400$

Timeout

読み取りオペレーションのタイムアウト (秒単位)。

AWS IoT コンソールでの表示名: [Timeout] (タイムアウト)

必須: true

タイプ: string

有効な値: 1 - 59

有効なパターン: ^([1-9]|[1-5][0-9])$

SerialPort

デバイス上の物理シリアルポートへの絶対パス。これは、ローカルデバイスリソースに指定されているソースパスです。

AWS IoT コンソールでの表示名: [Serial port] (シリアルポート)

必須: true

タイプ: string

有効なパターン: [/a-zA-Z0-9_-]+

SerialPort-ResourceId

物理シリアルポートを表すローカルデバイスリソースの ID。

注記

このコネクタには、リソースへの読み取りと書き込みアクセスが付与されています。

AWS IoT コンソールでの表示名: [Serial port resource] (シリアルポートリソース)

必須: true

タイプ: string

有効なパターン: [a-zA-Z0-9_-]+

PollingRead

読み取りモードとしてポーリング読み取りまたはオンデマンド読み取りを設定します。

  • ポーリング読み取りモードの場合は、true を指定します。このモードでは、PollingIntervalPollingReadType、および PollingReadLength プロパティは必須です。

  • オンデマンド読み取りモードの場合は、false を指定します。このモードでは、タイプと長さの値が読み取りリクエストで指定されます。

AWS IoT コンソールでの表示名: [Read mode] (読み取りモード)

必須: true

タイプ: string

有効な値: true, false

有効なパターン: ^([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

PollingReadLength

各ポーリング読み取りオペレーションで読み取るデータの長さ (バイト単位)。これは、ポーリング読み取りモードを使用している場合にのみ適用されます。

AWS IoT コンソールでの表示名: [Polling read length] (ポーリング読み取り長)

必須: false。このプロパティは、PollingReadtrue の場合に必須です。

タイプ: string

有効なパターン: ^(|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-2][0-9]{3}|63[0-8][0-9]{2}|639[0-8][0-9]|6399[0-4])$

PollingReadInterval

ポーリング読み取りが行われる間隔 (秒単位)。これは、ポーリング読み取りモードを使用している場合にのみ適用されます。

AWS IoT コンソールでの表示名: [Polling read interval] (ポーリング読み取り間隔)

必須: false。このプロパティは、PollingReadtrue の場合に必須です。

タイプ: string

有効な値: 1~999

有効なパターン: ^(|[1-9]|[1-9][0-9]|[1-9][0-9][0-9])$

PollingReadType

ポーリングスレッドが読み取るデータのタイプ。これは、ポーリング読み取りモードを使用している場合にのみ適用されます。

AWS IoT コンソールでの表示名: [Polling read type] (ポーリング読み取りタイプ)

必須: false。このプロパティは、PollingReadtrue の場合に必須です。

タイプ: string

有効な値: ascii, hex

有効なパターン: ^(|[Aa][Ss][Cc][Ii][Ii]|[Hh][Ee][Xx])$

RtsCts

RTS/CTS フロー制御を有効にするかどうかを示します。デフォルト値は false です。詳細については、「RTS、CTS、RTR」を参照してください。

AWS IoT コンソールでの表示名: [RTS/CTS flow control] (RTS/CTS フロー制御)

必須: false

タイプ: string

有効な値: true, false

有効なパターン: ^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

XonXoff

ソフトウェアフロー制御を有効にするかどうかを示します。デフォルト値は false です。詳細については、「ソフトウェアフロー制御」を参照してください。

AWS IoT コンソールでの表示名: [Software flow control] (ソフトウェアフロー制御)

必須: false

タイプ: string

有効な値: true, false

有効なパターン: ^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

Parity

シリアルポートのパリティ。デフォルト値は N です。詳細については、「パリティ」を参照してください。

AWS IoT コンソールでの表示名: [Serial port parity] (シリアルポートパリティ)

必須: false

タイプ: string

有効な値: N, E, O, S, M

有効なパターン: ^(|[NEOSMneosm])$

サンプルコネクタを作成する (AWS CLI)

以下の CLI コマンドは、シリアルストリーミングコネクタを含む初期バージョンで ConnectorDefinition を作成します。ポーリング読み取りモード用にコネクタを設定します。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MySerialStreamConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/SerialStream/versions/3", "Parameters": { "BaudRate" : "9600", "Timeout" : "25", "SerialPort" : "/dev/serial1", "SerialPort-ResourceId" : "my-serial-port-resource", "PollingRead" : "true", "PollingReadLength" : "30", "PollingReadInterval" : "30", "PollingReadType" : "hex" } } ] }'

AWS IoT Greengrass コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

入力データ

このコネクタは、以下の 2 つの MQTT トピックのシリアルポートに対する読み取りリクエストまたは書き込みリクエストを受け入れます。入力メッセージは JSON 形式である必要があります。

  • serial/+/read/# トピックの読み取りリクエスト。

  • serial/+/write/# トピックの書き込みリクエスト。

これらのトピックに発行するには、+ ワイルドカードを Core モノ名に置き換え、# ワイルドカードをシリアルポートへのパスに置き換えます。例:

serial/core-thing-name/read/dev/serial-port
トピックのフィルター: serial/+/read/#

このトピックを使用して、オンデマンド読み取りリクエストをシリアルピンに送信します。読み取りリクエストの最大読み取り長は 63,994 バイトに制限されています。

メッセージのプロパティ
readLength

シリアルポートから読み取るデータの長さ。

必須: true

タイプ: string

有効なパターン: ^[1-9][0-9]*$

type

読み取るデータのタイプ。

必須: true

タイプ: string

有効な値: ascii, hex

有効なパターン: (?i)^(ascii|hex)$

id

リクエストの任意の ID。このプロパティでは、入力リクエストを出力レスポンスにマッピングします。

必須: false

タイプ: string

有効なパターン: .+

入力例
{ "readLength": "30", "type": "ascii", "id": "abc123" }
トピックのフィルター: serial/+/write/#

このトピックを使用して書き込みリクエストをシリアルピンに送信します。書き込みリクエストの最大データ長は 128,000 バイトに制限されています。

メッセージのプロパティ
data

シリアルポートに書き込む文字列。

必須: true

タイプ: string

有効なパターン: ^[1-9][0-9]*$

type

読み取るデータのタイプ。

必須: true

タイプ: string

有効な値: ascii, hex

有効なパターン: ^(ascii|hex|ASCII|HEX)$

id

リクエストの任意の ID。このプロパティでは、入力リクエストを出力レスポンスにマッピングします。

必須: false

タイプ: string

有効なパターン: .+

入力例: ASCII リクエスト
{ "data": "random serial data", "type": "ascii", "id": "abc123" }
入力例: 16 進リクエスト
{ "data": "base64 encoded data", "type": "hex", "id": "abc123" }

出力データ

コネクタは 2 つのトピックに関する出力データを発行します。

  • serial/+/status/# トピックに関するコネクタからのステータス情報。

  • serial/+/read_response/# トピックに関する読み取りリクエストからのレスポンス。

このトピックに発行すると、コネクタは + ワイルドカードを Core モノ名に、# ワイルドカードをシリアルポートへのパスに置き換えます。例:

serial/core-thing-name/status/dev/serial-port
トピックのフィルター: serial/+/status/#

このトピックを使用して、読み取りおよび書き込みリクエストのステータスをリッスンします。id プロパティがリクエストに含まれている場合は、レスポンスで返されます。

出力例: 成功
{ "response": { "status": "success" }, "id": "abc123" }
出力例: 失敗

失敗レスポンスには、読み取りまたは書き込みオペレーションの実行中に発生したエラーまたはタイムアウトを説明する error_message プロパティが含まれています。

{ "response": { "status": "fail", "error_message": "Could not write to port" }, "id": "abc123" }
トピックのフィルター: serial/+/read_response/#

このトピックを使用して、読み取りオペレーションからレスポンスデータを受信します。タイプが hex の場合、レスポンスデータは Base64 でエンコードされます。

出力例
{ "data": "output of serial read operation" "id": "abc123" }

使用例

コネクタの試用に利用できる Python 3.7 Lambda 関数の例を設定するには、次のステップ (概要) を使用します。

注記
  1. コネクタの要件を満たしていることを確認します。

  2. 入力データをコネクタに送信する Lambda 関数を作成して発行します。

    サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、PY ファイルとルートレベルの greengrasssdk フォルダを含む zip パッケージを作成します。この zip パッケージは、AWS Lambda にアップロードするデプロイパッケージです。

    Python 3.7 Lambda 関数を作成したら、関数バージョンを公開し、エイリアスを作成します。

  3. Greengrass グループを設定します。

    1. エイリアスで Lambda 関数を追加します (推奨)。Lambda ライフサイクルを長期間有効に (または CLI で "Pinned": true に) 設定します。

    2. 必要なローカルデバイスリソースを追加し、Lambda 関数への読み取り/書き込みアクセスを許可します。

    3. コネクタをグループに追加し、そのパラメータを設定します。

    4. コネクタが入力データを受信し、サポートされているトピックフィルターで出力データを送信できるようにするサブスクリプションをグループに追加します。

      • Lambda 関数をソースに、コネクタをターゲットに設定し、サポートされている入力トピックフィルターを使用します。

      • コネクタをソースとして、AWS IoT Core をターゲットとして設定し、サポートされている出力トピックフィルターを使用します。このサブスクリプションを使用して、AWS IoT コンソールでステータスメッセージを表示します。

  4. グループをデプロイします。

  5. AWS IoT コンソールの [Test] (テスト) ページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の Lambda 関数は長期間有効であり、グループがデプロイされた直後にメッセージの送信を開始します。

    テストが終了したら、Lambda ライフサイクルをオンデマンドに (または CLI で "Pinned": false に) 設定して、グループをデプロイできます。これにより、関数がメッセージの送信を停止します。

次の例では、Lambda 関数で入力メッセージをコネクタに送信します。

import greengrasssdk import json TOPIC_REQUEST = 'serial/CORE_THING_NAME/write/dev/serial1' # Creating a greengrass core sdk client iot_client = greengrasssdk.client('iot-data') def create_serial_stream_request(): request = { "data": "TEST", "type": "ascii", "id": "abc123" } return request def publish_basic_request(): iot_client.publish(payload=json.dumps(create_serial_stream_request()), topic=TOPIC_REQUEST) publish_basic_request() def lambda_handler(event, context): return

ライセンス

シリアルストリーミングコネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

3

Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。

2

AWS リージョン のサポートを目的にコネクタ ARN を更新。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

以下も参照してください。