MQTT 인터페이스

경로: 프로젝트 보기> 구성 > 인터페이스 > MQTT 더블클릭

MQTT 인터페이스를 사용하여 MQTT 표준에 따라 데이터를 게시합니다.

MQTT 프로토콜을 통해 전송할 태그 또는 알람을 그룹 내에 정의해야 합니다.

파라미터 설명
MQTT 인터페이스 활성화 MQTT 서비스를 활성하기 위한 주 플래그.
선택된 태그 그룹은 MQTT 브로커에 게시될 것입니다.
알람 활성화 선택된 알람 그룹은 MQTT 브로커에 게시될 것입니다.
알람 상태가 바뀔 때마다 알람이 게시됩니다.

태그 구성

파라미터 설명
활성화 그룹 내에 포함된 태그를 활성화하여 "데이터(Pub)" 게시를 트리거합니다. 그룹에 포함된 태그는 "데이터(서브)" 구독으로 업데이트할 수 있습니다.
태그 그룹 지정된 정책 조건이 만족될 때 이전될 태그들의 목록입니다.
QoS

사용할 QoS

0 = 기껏해야 한 번 전달됨(발사하고 잊음), 확인 앖음

1 = 적어도 한 번 전달됨, 확인 요구됨

2 = 정확하게 한 번 전달됨, 4단계 악수가 행해짐

유지 이 플래그는 브로커가 메시지를 특정 항목의 마지막 알려진 유효 값으로 저장하는지의 여부를 정의합니다. 새 클라이언트가 항목을 신청하면 해당 항목에 유지되는 마지막 메시지를 받습니다.
지속

참인 경우, 패널 리셋 후에 또는 MQTT 서버와 두절된 통신이 재확립될 때 가용 시스템 파일 안으로 0보다 큰 QoS 메시지가 대기됩니다.

정책 태그 값을 게시할 때를 결정하기 위한 기준을 정의합니다. 이것이 비어 있을 때는 표의 맨위에 정의되어 있는 "기본 푸시 정책"이 사용됩니다.
푸시 정책 관리

정책은 트리거 기준과 태그 값이 전송되기 위해서는 확인해야 하는 여러 (옵션) 조건으로 구성됩니다.

트리거

파라미터 설명
타이머

값이 바뀌지 않아도 게시는 지속적으로 수행됩니다.

  • 간격 (ms)
    주기적 게시 시간
변경시

태그 값이 바뀔 때 게시가 수행됩니다.

  • 최소 간격 (ms)
    값 체크 간격
  • 불감대
    새 게시를 트리거하려면 발견해야 하는 이전 게시와의 차이.
  • 사용 퍼센트
    퍼센트로 표현된 사역대 값
  • 태그 명칭
    게시를 활성화하기 위해 체크할 태그. 비어 있는 경우, 게시될 태그가 사용됩니다.

조건

조건은 조건 풀더를 포함합니다. 각 폴더의 타입은 두 가지일 수 있습니다:

모든 폴더가 트리거에 의해 요청된 전송을 갖고 있는 것으로 검증되어야 합니다. 포함된 조건이 모두 참일 때 "다음 조건들이 모두 충족됨” 타입의 폴더가 검증되고, 포함된 조건 중 적어도 하나가 참일 때 "다음 조건들 중 어느 것이든 충족됨" 타입의 폴더가 검증됩니다.

태그 인터페이스

"태그 인터페이스"를 사용하면 MQTT 인터페이스의 상태에 대한 정보를 교환하는 데 사용할 태그를 정의할 수 있습니다.

파라미터 설명 데이터 유형
활성화

MQTT 인터페이스의 상태를 제어합니다.

이 매개변수가 비어 있으면(태그에 첨부되지 않음) MQTT 인터페이스가 항상 활성화됩니다.

  • 0 = 비활성화됨
  • 1 = 활성화됨

부울

읽기 쓰기

상태

MQTT 인터페이스의 상태를 보고합니다.

  • 0 = 연결 끊김
  • 1 = 연결됨
  • 2 = 연결 중
  • 3 = 연결 끊김

unsignedInt

읽기 전용

마지막 오류

오류가 있는 경우 오류 메시지를 보고합니다.

빈 문자열을 작성하여 오류 메시지를 지울 수 있습니다.

문자열

읽기 쓰기

보낸 메시지 HMI 디바이스에서 원격 MQTT 서버로 보낸 메시지의 양.

unsignedInt

읽기 전용

받은 메시지 HMI 디바이스에서 원격 MQTT 서버로부터 받은 메시지의 양.

unsignedInt

읽기 전용

대기열 길이 로컬 버퍼에 임시로 캐시된 보내기 전에 보류 중인 메시지의 수입니다.

unsignedInt

읽기 전용

대기열 크기 로컬 버퍼에 임시로 캐시할 수 있는 최대 메시지 수입니다.

unsignedInt

읽기 전용

설정

항목 설명
최대 보류 메시지 통신 오류가 있을 때 RAM에 대기될 수 있는 메시지의 수. MQTT 서버가 도달 가능으로 복귀하는 즉시 대기열 메시지가 방출됩니다.
기본값 "태그 구성" 표 내부에 정의되지 않은 항목을 위해 사용할 "QoS", "유지" 및 "지속" 파라미터의 값.

항목 및 페이로드

다섯 가지 타입의 지원 항목이 있습니다:

항목 설명
출생 이것은 HMI 기기가 시작될 때 한 번만 게시되는 특별 항목입니다.
유언

장치가 시작될 때 공개되지만 MQTT 브로커가 숨기고 저장하는 특수 토픽입니다. 클라이언트가 비정상적으로 연결이 끊긴 것을 감지하면 MQTT 브로커가 게시합니다.

데이터 (게시) 이 항목은 태그 그룹과 연계된 전송 정책을 따라 태그 값을 게시하는 데 사용됩니다.
데이터 (신청) 이 항목은 태그를 신청하는 데 사용됩니다. 페이로드는 받은 태그의 값을 인식하는 데 사용되는 템플릿입니다.
알람 알람을 게시하는 데 사용되는 항목

각 항목에 대해 페이로드는 관련 값의 구조를 정의합니다. 항목 및 페이로드에서 정의는 사용된 플레이스 홀더일 수 있습니다.

플레이스 홀더 설명
${clientId} MQTT 클라이언트 ID
${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]} 알람 설명에 있는 경우, "Tag1" 라이브 태그의 값
${any} 일반 레이블입니다. 구독 페이로드에 유용

JSON 페이로드

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}"} }

배열 수신 메시지의 요소 또는 모든 요소를 일치시키려면:

{ "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 브로커
파라미터 설명
브로커 주소

포트 번호가 있는 MQTT 서버의 이름 또는 IP 주소(예: "127.0.0.1:1883")

일반적으로, 기본 TCP/IP 포트는 1883이며, 또는 MQTT가 SSL 상에서 사용될 때는 포트 8883입니다.

클라이언트 ID 클라이언트 ID는 MQTT 브로커에 연결되는 각 MQTT 클라이언트의 ID입니다. 선호하는 것을 쓸 수 있지만 브로커별로 고유해야 합니다. 브로커는 클라이언트와 클라이언트의 현재 상태를 식별하기 위해 그것을 사용합니다.
사용자이름
암호
MQTT 브로커가 유효한 사용자 이름과 암호를 사용해 클라이언트 인증을 요구하도록 구성된 경우
라이브 유지 시간 (s) 데이터 흐름이 없을 때 서버에 PING 요청을 보내기 전의 시간 간격 (클라이언트와 서버가 여전히 살아 있고 도달 가능한 경우 알면 유용함).
클린 세션 사용 클린 세션 플래그가 거짓으로 설정되었을 때 브로커는 클라이언트를 위한 지속적 세션을 생성합니다. 모든 정보와 메시지는 클라이언트가 그 다음 번에 클린 세션을 요청할 때까지 유지됩니다. 클린 세션 플래그가 거짓으로 설정되고 브로커가 이미 클라이언트를 위한 세션을 마련해 둔 경우에는 기존 세션을 사용하여 이전에 대기된 메시지를 클라이언트로 전달합니다.
레거시 사용 “레거시 사용” 플래그는 클라이언트가 MQTT 스펙 3.1을 준수하게 합니다

TLS 활성화

MQTT 서버가 TLS 접속으로 일하도록 구성된 경우, HMI 기기는 자체 인증서를 서버에 제공해야 합니다. 필수가 아닌 경우에도, 각 클라이언트는 자체 인증서를 가져야 합니다(단, 모든 클라이언트에 같은 인증서를 배치할 수 있습니다).

서버 및 클라이언트의 인증서는 같은 당국에 의해 서명되어야 합니다.

파라미터 설명
TLS 활성화 TLS 암호화 활성화
CA 인증서 Mosquitto 브로커 상의 서버 인증서에 서명한 CA의 공용 인증서
클라이언트 인증서 HMI 기기의 공용 인증서. CA 인증서에 서명해야 합니다
클라이언트 키 클라이언트 인증서와 연계된 비공개 키
TLS 버전

사용할 TLS 버전 (MQTT 브로커에서 사용된 암호화 레벨과 일치해야 함)

  • tlsv 1
  • tlsv 1.1
  • tlsv 1.2
비보안 이 옵션은 서버 인증서의 서버 호스트 명칭의 확인을 불가능하게 합니다. 이는 초기 서버 구성을 테스트할 때 유용할 수 있지만 악의적 제3자가 예컨대 DNS 스푸핑을 통해 귀하의 서버를 가장할 수 있도록 만듭니다. 이 옵션은 테스트할 때만 사용하십시오.

예컨대, macros, JavaScript 또는 구성 페이지를 사용하는 런타임에서 "태그에 첨부"를 사용하여 MQTT 파라미터에 들어갈 수 있습니다. 이는 여러 HMI 기기에 같은 프로젝트를 다운로드할 때 상이한 값(예컨대, ClientID)을 갖기 위해 유용할 수 있습니다.

태그를 사용해 MQTT 설정값(예컨대, ClientID)을 정의하는 경우, 잘못된 설정값을 받지 않기 위해 이러한 태그를 MQTT 서버와 교환된 태그 리스트에 포함하지 않도록 하십시오.

인증서를 위해 사용되는 문자열 태그는 인증서 전체를 포함하기에 충분히 커야 합니다(예컨대, 2.048 바이트). 인증서의 형식은 ASCII로서 첫 텍스트와 마지막 텍스트의 행이 아래 예처럼 포함되어야 합니다.

MQTT 브로커 예

여기에 MQTT 서버와 통신할 애플리케이션을 구성하는 방법을 설명하는 작은 예가 있습니다. 이 예에서, 우리는 인증서를 사용하는 오픈 소스 MQTT 브로커(https://mosquitto.org)와 통신할 HMI 기기를 구성합니다. 인증서는 공용 OpenSSL-Win32 라이브러리(https://www.openssl.org)를 사용해 생성될 것입니다.

인증서 생성

다음 스크립트 파일은 여러 서버 및 클라이언트 인증서를 생성하고 서버 및 클라이언트 인증서에 서명하고 이러한 인증서의 진위를 확인하는 데 사용될 공용 인증서 권한을 생성할 것입니다.

파일: 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

서버 호스트 명칭은 localhost(/CN=localhost)로서, 이는 귀하가 "localhost" 도메인을 쓸 수 없는 브로커 주소 파라미터에 있는 경우 보안 접속을 사용할 수 없음을 의미합니다. 귀하는 MQTT 서버와 HMI 기기가 같은 기기에서 실행되고 있는 경우에만 "localhost" 도메인을 사용할 수 있습니다. 그렇지 않으면 MQTT 서버에 도달할 수 있기 위해서는 IP 주소와 "비보안" 플래그를 사용해야 합니다.

MQTT 브로커 구성

서버 인증서(server.crt, server.key)와 권한 인증서(ca.crt)는 MQTT 폴더의 하위 폴더 내부에, 예컨대, 하위 폴더 "certs" 내부에 위치해야 합니다.

"mosquitto.conf" 파일은 TLS 지원을 사용하도록 구성되어야 합니다

# ================================================================= # Default listener # ================================================================= ... (omiss) ... # 기본 리스너를 위해 사용할 포트. #port 1883 port 8883 # ----------------------------------------------------------------- # Certificate based SSL/TLS support # ----------------------------------------------------------------- ... (omiss) ... #cafile #capath cafile certs/ca.crt certfile certs/server.crt keyfile certs/server.key tls_version tlsv1.2

MQTT 브로커는 DOS 명령 창의 아래 명령을 사용해 시작될 수 있습니다:

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 브로커에 이전하기 원하는 알람 그룹과 태그 그룹을 구성할 수 있습니다.