MQTTインターフェース
パス: プロジェクトビュー> Config(構成) > Interfaces(インターフェース) double-click(ダブルクリック) MQTT
MQTT インターフェースを使用して、MQTT 標準に従いデータを公表します。
MQTT 協定が送信したタグやアラームをグループ内で定義する必要があることに注意してください。
パラメータ | コメント |
---|---|
MQTTインターフェースを有効にする | MQTTサービスをアクティブにするメインフラグです。 選択したタグのグループがをMQTT ブローカーで公表します。 |
アラームを有効にする | 選択したアラームのグループを MQTT ブローカーで公表します。 アラームの状態が変更された場合、アラームは公表します。 |
タグ構成
パラメータ | コメント |
---|---|
有効化 | グループに含まれているタグによる公開「Data (Pub)」のトリガを有効にします。グループに含まれているタグは、サブスクリプション「Data (Sub)」で更新できます。 |
タググループ | 割り当てたポリシーの条件が満たされると、送信されるタグのリストです。 |
QoS |
使用するQoS
|
Retain | このフラグはメッセージがブローカーにより指定トピックの最後の既知値として保存されるかどうかを定義します。新しいクライアントがトピックを申し込む場合、彼らはそのトピックが保存した最後のメッセージを受け取りました。 |
Persistence |
Trueの場合、パネルがリセットとMQTT サーバ通信中断の後に、QoS は0より大きいメッセージはファイルシステムファイルの列に入れられても使用できます。 |
ポリシー | いつタグ値の標準を公表するかを決定することを定義します。空の場合、表の最上部に定義されている」デフォルトのプッシュポリシー」を使用します。 |
プッシュポリシーを管理
策略はトリガ条件といくつか (オプショナル)条件で組み合わせて検証してから、タグ値を送信できます。
トリガ
パラメータ | コメント |
---|---|
タイマ |
値が変更しなくても、発行し続けます。
|
変化時 |
タグ値を変更した時に発行します。
|
条件
条件には条件ファイルフォルダを含めています。各ファイルフォルダは二つのタイプがあります:
- 次のすべての条件が満たされます(AND)
- 次のいずれかの条件が満たされます(OR)
トリガが請求を送信させるために、全てのファイルフォルダを検証する必要があります。含めている全ての条件がtrueの場合、 「次の全ての条件が満たされる」タイプのファイルフォルダを検証します。含めている条件のいずれかがtrueの場合、「次のいずれかの条件が満たされる」タイプのファイルフォルダを検証します。
タグインターフェース
「タグインターフェース」では、MQTTインターフェースのステータスに関する情報の交換に使用するタグを定義できます。
パラメータ | コメント | データタイプ |
---|---|---|
有効 |
MQTTインターフェースのステータスを制御します。 このパラメータを空にしておくと (タグにアタッチしない)、MQTT インターフェースは必ず有効になります。
|
boolean 読込み/書込み |
ステータス |
MQTTインターフェースのステータスを報告します。
|
unsignedInt 読込み専用 |
前回のエラー |
エラーの場合、エラーメッセージが報告されます。 空の文字列を書き込むとエラーメッセージを消去できます。 |
string 読込み/書込み |
送信メッセージ数 | 「HMIデバイス」からリモート「MQTTサーバ」に送信されるメッセージ数 |
unsignedInt 読込み専用 |
受信メッセージ数 | 「HMIデバイス」が受信したリモート「MQTTサーバ」のメッセージ数。 |
unsignedInt 読込み専用 |
キュー長さ | ローカルバッファで一時的にキャッシュされる送信前の保留メッセージ数。 |
unsignedInt 読込み専用 |
キューサイズ | ローカルバッファで一時的にキャッシュできる最大メッセージ数。 |
unsignedInt 読込み専用 |
設定
トピック | コメント |
---|---|
保留メッセージの最大数: | 通信エラーが発生した時にRAMの列に入れられるメッセージの数です。MQTTサーバが達成可能に戻る時、列メッセージを解放します。 |
デフォルト | 「タグ構成」表内で未定義のトピックに使用する 「QoS」, 「保留」 と」持続性」 パラメータの値です。 |
トピック
サポートされているトピックは5つあります:
トピック | コメント |
---|---|
Birth | これは特別なトピックで、HMIデバイスが実行する時に一回のみ発行します。 |
Will |
デバイスが開始すると公開されるが、「MQTTブローカー」によって保存されて非表示になる特別なトピック。クライアントが異常切断されたことを検出すると、「MQTTブローカー」が公開します。 |
Data(Pub) | トピックはタググループと関連する送信策略に従いタグ値を発行することに使用します。 |
Data(Sub) | トピックはタグを申し込むために使用されます。ペイロードは受信したタグ値のテンプレートを識別するために使用されます。 |
アラーム | アラームを発行する時に使用されるトピック |
各トピックに対して、ペイロード関連値の構造を定義します。トピックとペイロードの定義ではプレースホルダを使用できることに注意してください。
プレースホルダ | コメント |
---|---|
${clientId} | MQTTクライアント |
${currentTimestamp} | 現在の時間 |
${protocolName} | タグに関連する協定の名前 |
${tagGroup} | タグが所属するグループの名前 |
$(‘TagName’) | タグの名前 |
${alarmGroup} | アラームが所属するグループの名前 |
${alarmName} | アラーム名 |
${value} | タグの最後の既知値 |
${timestamp} | タグ値を読み取るタイムスタンプ |
${activeValue} | アラームがアクティブになった時のタグ値 |
${quality} | タグの品質 (信頼性) |
${activeTimestamp} | アラームを発生させた前回の事件のタイムスタンプ |
${inactiveTimestamp} | アラーム条件を中止させる最後の事件のタイムスタンプ |
${ackTimestamp} | オペレーターがアラームのタイムスタンプを確認します |
${description} | アラームの説明 |
${customField1} | アラームカスタム フィールド1 |
${customField2} | アラームカスタム フィールド2 |
${state} | アラーム状況 |
${severity} | アラーム重症度 |
${lowLimit} | アラームの下限 |
${highLimit} | アラームの上限 |
${[0]} | アラームの説明で利用可能の場合、最初のライブタグ値、[1]第二のライブタグ値など。 |
${[Tag1]} | アラームの説明で利用可能の場合、」タグ1」のライブタグ値 |
${any} | 一般ラベル。ペイロードのサブスクライブ時に便利 |
JSONペイロード
JSON format(JSON形式) を選択する場合、JSON構文に符合するために、文字列値周囲に引用符を追加します。
JSON形式を使用すると通信を最適化にして、単一のメッセージに複数のメッセージを含めるようにできます。「メッセージの集積」を選択する場合、選択したタイムアウトの期限が切れた後や送信するメッセージが選択したサイズに達した時に、メッセージがMQTTサーバに送信します。
複数のタグ
JSON形式を使用すると、サブスクライブ/公開では、以下の例のようにトピックで複数のタグを管理できます:
次のような着信メッセージの場合:
{ "x": { "tagName": "Tag1", "value": 1 }, "y": { "tagName": "Tag2", "value": 2 } }
次のパターンを使用できます:
{ "${any}": { "tagName": "${tagName}", "value": "${value}" } }
次のような着信メッセージの場合:
[ { "tagName": "Tag1", "value": 1 }, { "tagName": "Tag2", "value": 2 } ]
次のパターンを使用できます:
[ { "tagName": "${tagName}", "value": "${value}" } ]
次のような着信メッセージの場合:
{ "Tag1": { "value": 1 }, "Tag2": { "value": 2 } }
次のパターンを使用できます:
{ "${tagName}": { "value": "${value}"} }
次のような配列着信メッセージの1要素、またはすべての要素の場合:
{ "Tag1": { "value": "[1, 2, 3, 4, 5, 6, 7, 8]" } }
次のパターンを使用できます:
{ "${tagName}": { "value": "${value.1}"} }
{ "${tagName}": { "value": "${value}"} }
公開されたトピックの場合、トリガ条件を成立させるにはタグ/タグのグループが必要ですが、メッセージにはライブタグ構文で別のタグ値を含めることもできます。ペイロードパターンではトリガタグを省略することもできます。
例:
{ "tag1" : "${[Tag1]}", "tag2" : "${[Tag2]}" }
サブスクライブしたトピックでは、同じライブタグ構文でタグ値を記述できます (記述できるのはトリガ条件にリストされているタグのみです)。
例:
{ "tag1" : "${[Tag1]}", "tag2" : "${[Tag2]}" }
{ "t" : "${tagName}", "v" : "${value}", "tag2" : "${[Tag2]}" }"
MQTTブローカー設定
現在サポートされているMQTTブローカーは次の通り:
- 一般的なMQTTブローカー
- Azure
- Amazon AWS
- IBM BlueMix
- Murano
一部のパラメータは選択したブローカーによって異なることに注意してください。
一般的なMQTTブローカー
パラメータ | コメント |
---|---|
ブローカーアドレス |
ポート番号付きのMQTTサーバのIPアドレスの名前 (例、「127.0.0.1:1883」) 一般的に、デフォルトのTCP/IP ポートは 1883で、SSLに基づく MQTTを使用する時のポート8883 です。 |
クライアントID | クライアントID は、MQTTブローカーに接続する各MQTT クライアントのIDです。自分の好きな内容を書いてもいいですが、各ブローカーは唯一であることが必要です。ブローカーはこれを使って、クライアントとクライアントの現在の状態を識別します。 |
ユーザ名 パスワード |
MQTTブローカー が有効のユーザ名とパスワードを使用しクライアント認証を請求される場合 |
キープアライブ時間[s] | データフローのない場合、サーバにPING請求を発送する前の時間間隔 (クライアントとサーバはアライブ状態にあり、到達可能かどうかを了解することに役たつ). |
Clean sessionの使用 | クリーンなセッションフラグをfalseに設定する場合、ブローカーはクライアントのために永続的なセッションを作成します。全ての情報とメッセージは、次回クライアントがクリーンなセッションを請求するまで保留します。クリーンなセッションフラグをfalseに設定されて、ブローカーが既にクライアントで使用可能のセッションを持つ場合、ブローカーは既存のセッションを使って、前に列に入れられたメッセージをクライアントに送信します。 |
Legacyの使用 | “レガシーを使用” フラグによって、クライアントはMQTT spec 3.1に準拠します。 |
TLSを有効化
MQTTサーバを TLS 接続で作動することに設定する場合、 HMIデバイスはサーバに自分の証明書を提供する必要があります。強制的ではないが、各クライアントは自分の証明書を持つべきです (ただし、全てのクライアントに同じ証明書を配備できます)。
サーバ証明書とクライアント証明書の両方が同じ機構によって署名される必要があります。
パラメータ | コメント |
---|---|
TLSを有効化 | TLS暗号化を有効にします。 |
CA証明書 | Mosquitto ブローカーでサーバ証明書を署名したCA公開証明書 |
クライアント証明書... | HMIデバイスの公開証明書Ca証明書からの署名が必要 |
クライアントキー | クライアント証明書に関連する秘密キー |
TLSバージョン |
使用するTLSバージョン (MQTTブローカーから使用される暗号化レベルに合わせる必要があります)
|
Insecure | このオプションは、サーバ証明書の中にあるサーバホスト名を無効にします。これはサーバの初期設定をテストする時に効果がありますが、例えば、悪意の第三者はDNS を通じてサーバを成り済ますことも可能です。このオプションはテストのみで使用されます。 |
実行中に「タグにアタッチ」、例えば、マクロJavaScriptや構成ページを使ってMQTTパラメータを入力します。同じプロジェクトが違うHMIデバイスにダウンロードする場合でも、異なる値 (ClientIDなど)を持つ場合に役立ちます。
タグを使ってMQTT設定を定義する場合 (例えば、クライアント ID)、設定エラーを避けるよう、これらのタグを MQTTサーバと交換するタグリスト中に含まないことを確保してください。
証明書に使う文字列タグは全ての証明書を含められるほど大きい必要があります。 (例えば2.048 bytes)この形式は ASCIIで、次の例の最初と最後のテキスト行が含まれる必要があります。
MQTT ブローカーの例
次はMQTTサーバと通信するようにアプリケーションを構成する方法を説明する小さな例です。この例では、私たちはHMI デバイスを証明書の使用とオープンソースMQTTブローカー (https://mosquitto.org) 通信に構成させます。公開OpenSSL-Win32庫(https://www.openssl.org).を使用して 証明書を作成します。
証明書を生成します
次のスクリプトファイルはいくつかのサーバ証明書とクライアント証明書と公開証明書認証機構を作成します。その認証機構の作用はサーバ証明書とクライアント証明書に署名し、これらの証明書の信頼性を検証することです。
- ca.crt
- server.crt, server.key
- client.crt, client.ket
ファイル: CreateCertificates.cmd
@echo off set OpenSSL="C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe" rem Generate self signed CA certificate (Certificate Autority) %OpenSSL% req -nodes -batch -new -x509 -days 1000 -keyout ca.key -subj "/CN=Broker/O=company.com" -out ca.crt rem Generate MQTT Server private key %OpenSSL% genrsa -out server.key 2048 rem Generate MQTT Server certificate signed request %OpenSSL% req -batch -new -key server.key -subj "/CN=localhost/O=company.com" -out server.csr rem Sign the MQTT Server certificate %OpenSSL% x509 -req -days 1000 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt rem Generate HMI Client private key %OpenSSL% genrsa -out client.key 2048 rem Generate HMI Client Server certificate signed request %OpenSSL% req -batch -new -key client.key -subj "/CN=client/O=company.com" -out client.csr rem Sign the HMI Client certificate %OpenSSL% x509 -req -days 1000 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt rem Remove unnecessary files del *.rnd *.srl *.csr pause
サーバホスト名はローカルホスト (/CN=localhost)、これはブローカーアドレスパラメータで「ローカルホスト」領域 を書かないと、安全接続を使用できないと意味することに注意してください。MQTT サーバとHMI デバイスが同一デバイスで執行する時のみで、「ローカルホスト」領域を使用できます。MQTTサーバをアクセスできるために、 IPアドレスと 「不安全」 フラグを使用する必要があります。
MQTTブローカー構成
サーバ証明書 (server.crt, server.key) と認証機構証明書 (ca.crt)は、MQTTフォルダのサブフォルダに放置する必要があります。 例えば、 「証明書」 のサブフォルダに。
「mosquitto.conf」mosquitto.conf" ファイルをTLS サポートを使用するように構成される必要があります。
# ================================================================= # デフォルトリスナー# ================================================================= ...(omiss) ...# デフォルトのリスナーに使用するポート#ポート1883 ポート 8883 # ----------------------------------------------------------------- # 証明書に基づく SSL/TLS サポート # ----------------------------------------------------------------- ...(omiss) ...#cafile #capath cafile certs/ca.crt certfile certs/server.crt keyfile certs/server.key tls_version tlsv1.2
dos 命令ウィンドウで次の命令を使ってMQTTブローカーを起動します:
mosquitto -v -c mosquitto.conf
MQTTクライアント
テストするために、HMIデバイスと交換されるメッセージを確認できるように、全てのトピック申込のMQTTクライアントを起動することに役立ちます。TLS通信を使用しているため 、クライアント証明書を提供する必要があります。私たちは certs-client のサブフォルダ内で、client.crt,、client.keyと認可証明書 ca.crt をコピーします。
MQTT クライアントをアクティブにする命令は次の通り:
mosquitto_sub --cafile certs-client\ca.crt --cert certs-client\client.crt --key certs-client\client.key -p 8883 -t /#
HMIデバイス
HMIデバイス を構成するには、次を提供する必要があります:
- 実行しているMQTT サーバのIPアドレスを使用して、ブローカーアドレスパラメータを設定します。
- ポートアドレスを8883に設定します。
- 認可証明書、クライアント証明書とクライアントキーファイルをロードします。
- TLSバージョンをバージョン 1.2と MQTT サーバ設定と一致することに設定します。
- IPアドレスを使用してMQTTサーバを参照する可能性があるため、そのIPアドレスはサーバ証明書声明の領域とは違って、 「不安全」 フラグを設定する必要があります。
最初のテストを実行するため、トピックとペイロードのデフォルト値を保留して、MQTTブローカーに送信するアラームグループとタググループを構成します。