MQTT 브로커
스테이션 자체의 MQTT 브로커입니다. 통신 열의 행, 켜고 끄기, 포트와 연결된 장치, 클라이언트 인증, MQTT 드라이버에 주는 항목 이 스테이션, 그리고 하지 않는 일입니다.
MQTT 브로커는 네트워크에 있는 장치의 MQTT 메시지를 받습니다. 그래서 시험대나 작은 실험실도 따로 브로커를 설치하지 않고 ESP32 보드, 게이트웨이, 센서를 읽을 수 있습니다. 서버 폴더의 세 번째 행으로 Modbus 서버 다음에 있으며, 드라이버가 아닙니다. 장치가 여기에 접속해 발행하고, 스테이션은 발행된 내용을 다른 브로커와 마찬가지로 MQTT 드라이버로 읽습니다. 패널은 제목 아래에 그렇게 씁니다. "네트워크에 있는 장치의 MQTT 메시지를 받으므로 장치마다 따로 브로커를 둘 필요가 없습니다. 연결을 받기만 하고 스스로 연결하지는 않습니다." Connector를 볼 수 있는 사람은 이 페이지를 읽고, 구성할 수 있는 사람은 바꿉니다.
열에 있는 행
행은 통신 열 트리의 서버 폴더에 있으며, Modbus 서버 아래에 드라이버가 플러그를 보여 주는 자리에 허브 아이콘을 달고 놓입니다. 스테이션에는 정확히 하나가 있고, 만들거나 삭제하지 않습니다. 검색 상자는 이름으로 이것을 찾고, 상태 칩은 상태로 나눕니다. 꺼져 있는 동안은 꺼짐에, 포트가 사용 중이거나 수신 대기하지 못한 동안은 문제에, 그 밖에는 정상에 듭니다. 이름 옆에는 브로커가 하고 있는 일이 나오고, 점이 그것을 요약합니다.
| 행의 표시 | 점 | 언제 |
|---|---|---|
| "꺼짐" | 회색 | 브로커가 꺼져 있습니다. 모든 스테이션이 이렇게 시작합니다. |
| "포트 1883에서 수신 대기 중", 이어서 연결된 장치 수: "연결된 클라이언트 없음", "클라이언트 1개 연결됨", "클라이언트 3개 연결됨" | 초록 | 브로커가 켜져 있고 런타임이 실행 중입니다. 포트가 열려 있습니다. |
| "포트 1883은(는) 사용 중입니다" | 빨강 | 브로커는 켜져 있지만 다른 프로그램이 포트를 쓰고 있습니다. |
| "포트 1883에서 수신 대기할 수 없습니다" | 빨강 | 브로커는 켜져 있지만 Windows가 다른 이유로 포트 열기를 거부했습니다. |
| "런타임 정지" | 회색 | 브로커는 켜져 있지만 런타임이 정지해 있습니다. 런타임이 다시 실행될 때까지 포트는 닫혀 있습니다. |
점은 브로커만의 것입니다. 드라이버 폴더의 요약에도, 상태 표시줄에도 들어가지 않습니다. 그쪽은 스테이션이 읽는 장비에 관한 표시이기 때문입니다.
켜고 끄기
| 명령 | 하는 일 | 흐려지는 때 |
|---|---|---|
| 사용 | 브로커를 켭니다. "브로커를 켭니다. 런타임이 실행되는 동안 포트 1883에서 수신 대기하고, 이 스테이션이 브로커를 읽는 항목이 MQTT 드라이버에 생깁니다." 작업 기록 줄에는 "MQTT 브로커를 켰습니다."라고 나옵니다. | 브로커가 이미 켜져 있을 때("브로커가 이미 켜져 있습니다."), 실행 기록이 스테이션을 잡고 있을 때, 런타임이 정지해 있을 때. |
| 사용 안 함 | 브로커를 끕니다. "브로커를 끕니다. 포트를 닫고 모든 클라이언트의 연결을 끊습니다." 작업 기록 줄에는 "MQTT 브로커를 껐습니다."라고 나옵니다. | 브로커가 이미 꺼져 있을 때("브로커가 이미 꺼져 있습니다."), 실행 기록이 스테이션을 잡고 있을 때, 런타임이 정지해 있을 때. |
Connector를 구성할 수 없는 역할에게는 두 명령이 그려지지 않습니다. 켜져 있는지는 스테이션이 간직하는 설정이고, 수신 대기는 런타임을 따릅니다. 브로커는 런타임이 시작되면 포트를 열고, 런타임이 정지하면 포트를 닫고 모든 장치의 연결을 끊으며, 런타임이 돌아오면 다시 엽니다. 열지 못한 포트는 브로커 자신의 상태로 행과 포트 칸 아래에 나오며, 스테이션은 그것 없이 계속 실행됩니다.
포트와 클라이언트 카드
| 칸 | 하는 일 | 값과 기본값 |
|---|---|---|
| TCP 포트 | 브로커가 수신 대기하는 포트입니다. 이 컴퓨터의 모든 주소, IPv4와 IPv6에서 TLS 없이 대기합니다. 대기 중에 바꾸면 이전 포트를 닫고 새 포트를 열므로 모든 장치의 연결이 끊깁니다. 작업 기록 줄에는 "MQTT 브로커를 포트 1884(으)로 옮겼습니다."라고 나옵니다. | 1부터 65535까지. 기본값은 1883으로, TLS 없는 MQTT 포트입니다. |
| 연결된 클라이언트 | 지금 연결된 장치 수입니다. 연결된 장치가 있으면 표가 장치마다 클라이언트 ID, 클라이언트 주소(IP 주소와 포트), 연결 시각을 보여 줍니다. | 읽기 전용. |
브로커가 옮겨 갈 수 없는 포트는 무엇이든 저장하기 전에 거부되고, 칸 아래에 이유가 나오며, 칸은 적용 중인 포트로 돌아갑니다. 범위를 벗어난 수("포트는 1에서 65535 사이여야 합니다."), 웹 서버, 에이전트 접근, OPC UA 서버, Modbus 서버의 포트("포트 N은(는) 이미 Modbus 서버가 쓰고 있습니다. 다른 포트를 고르거나, Modbus 서버를 먼저 옮기십시오."), 그리고 다른 프로그램이 쓰고 있는 포트("포트 N은(는) 이 컴퓨터에서 이미 사용 중입니다. 그 포트를 쓰고 있는 것을 닫거나, 다른 포트를 고르십시오.")입니다. 스테이션의 다른 포트 칸도 같은 방식으로 브로커의 포트를 거부합니다. "포트 N은(는) 이미 MQTT 브로커가 쓰고 있습니다. 다른 포트를 고르거나, MQTT 브로커를 먼저 옮기십시오."
카드 아래에는 메모가 있습니다. "TLS 없음: 장치는 일반 MQTT로 연결하며 동시에 최대 100대까지입니다. 다른 컴퓨터가 이 브로커에 닿으려면 Windows 방화벽이 TCP 포트 1883의 수신을 허용해야 합니다. 허용할지는 사용자가 정하며, 이 스테이션이 스스로 허용하는 일은 없습니다. 보존 메시지는 스테이션이 다시 시작될 때까지 유지됩니다."
동시에 연결할 수 있는 장치는 스테이션 자신의 세션을 포함해 최대 100대입니다. 그것을 넘는 한 대는 할당량 초과를 뜻하는 MQTT 사유로 거부되고, 자기 클라이언트 ID로 다시 접속한 장치는 원래 자리를 되찾습니다. 보존 메시지는 메모리에 남습니다. 런타임이 정지했다가 다시 시작해도 돌아오지만, 스테이션이 다시 시작하면 사라집니다.
Windows 방화벽
스테이션은 Windows 방화벽을 스스로 바꾸지 않습니다. 메모 아래에서 점과 문장 하나가 브로커를 위한 스테이션 자신의 인바운드 규칙이 포트를 들여보내는지 알려 줍니다. "개인 및 도메인 네트워크에서 포트 1883의 인바운드 MQTT 연결이 허용되어 있습니다.", "포트 1883을(를) 허용하는 이 앱의 규칙이 없어 네트워크 클라이언트가 차단될 수 있습니다.", 또는 방화벽을 관리할 수 없는 실행, 예를 들어 격리된 프로필이나 설치된 프로그램이 아닌 사본에서는 "이렇게 실행한 앱은 Windows 방화벽을 관리할 수 없습니다. 필요하면 운영 체제에서 인바운드 접근을 설정하십시오."입니다. 규칙이 없는 동안에만 로컬 네트워크 허용이 사용자의 승인을 받아 Windows에 "Ganter Lab MQTT broker"라는 이름의 규칙을 요청합니다. 포트로 들어오는 TCP, 개인 및 도메인 네트워크, 로컬 서브넷, 이 프로그램입니다. 누르는 곳은 스테이션 자신의 앱이며("방화벽 규칙은 스테이션의 데스크톱 앱에서만 적용할 수 있습니다."), 작업 기록 줄에는 "MQTT 포트 1883을(를) 위해 Windows 방화벽 접근을 요청하는 중…", 이어서 "이제 Windows 방화벽이 포트 1883의 MQTT 연결을 허용합니다."라고 나옵니다.
클라이언트 인증
클라이언트 인증 카드가 누가 접속할 수 있는지 정합니다.
| 선택 | 접속하는 장치 |
|---|---|
| 익명 | "사용자 이름과 비밀번호가 있든 없든 어떤 장치든 연결됩니다." 모든 스테이션이 여기서 시작합니다. |
| 사용자 이름과 비밀번호 | "모든 장치는 아래의 사용자 이름과 비밀번호 하나로 로그인합니다." 다른 사용자 이름이나 비밀번호로 온 장치는 거부되고, 진단 로그에 기록됩니다. 반복되는 실패처럼 묶어서 기록됩니다. |
선택 아래에는 사용자 이름과 비밀번호 칸이 있고, 비밀번호의 레이블은 저장된 것이 있는지만 알려 줍니다. 비밀번호(저장됨) 또는 비밀번호(저장된 것 없음)입니다. 저장된 비밀번호는 페이지에 다시 그려지지 않습니다. 칸은 비어 있는 채로 시작하며, "비워 두면 저장된 비밀번호를 그대로 사용합니다." 선택, 사용자 이름, 비밀번호는 적용으로 함께 적용됩니다. 바뀐 것이 없는 동안에는 흐려져 있고("적용하려면 인증 설정을 바꾸십시오."), 적용하면 작업 기록 줄에 "MQTT 브로커 인증을 저장했습니다."라고 나옵니다. 버튼 옆의 줄이 경고하듯이 "이미 연결된 장치 가운데 새 인증으로 허용되지 않는 장치는 연결이 끊깁니다."
| 입력 | 거부할 때의 문장 |
|---|---|
| 사용자 이름이나 비밀번호가 빈 채로 사용자 이름과 비밀번호를 고름 | "브로커가 요구하기 전에 사용자 이름과 비밀번호를 입력하십시오." |
| 사용자 이름과 비밀번호가 적용 중일 때 사용자 이름을 지움 | "브로커가 모든 장치에 사용자 이름을 요구하므로 비워 둘 수 없습니다. 지우려면 먼저 익명을 선택하십시오." |
| 128자를 넘는 사용자 이름이나 비밀번호 | "사용자 이름은 최대 128자입니다." |
익명인 동안에도 사용자 이름과 비밀번호는 다음을 위해 저장된 채로 남습니다. 비밀번호는 스테이션이 읽는 브로커의 비밀번호처럼 이 Windows 계정용으로 보호되어 저장됩니다. 다른 컴퓨터나 다른 계정에서 연 백업에는 비밀번호가 없고, 다시 입력할 때까지 어떤 장치도 로그인하지 못하며, 카드에는 "이 Windows 계정에서는 읽을 수 없습니다. 입력한 컴퓨터와 그 Windows 계정에서만 열립니다. 여기에 다시 입력하십시오."라고 나옵니다.
이 스테이션
패널의 마지막 카드 이 스테이션은 브로커가 MQTT 드라이버에 주는 것을 알려 줍니다. "켜면 브로커가 MQTT 드라이버 아래에 항목 이 스테이션을(를) 만들고, 이 스테이션은 여기에 발행하는 장치를 이 항목을 통해 127.0.0.1에서 브로커의 포트와 인증으로 읽습니다. 그 장치들은 스캔이나 직접 입력으로 이 스테이션 아래에 추가하십시오. 브로커를 꺼도 이 스테이션과(와) 그 장치는 연결이 끊긴 채 그대로 남습니다."
| 시점 | 일어나는 일 |
|---|---|
| 브로커를 켰는데 스테이션에 항목이 없음 | MQTT 드라이버가 스테이션에 추가되고 브로커 이 스테이션이 생깁니다. 127.0.0.1, 브로커의 포트, TLS 없음, 사용으로, 인증이 사용자 이름과 비밀번호이면 브로커의 사용자 이름과 비밀번호를 갖습니다. |
| 포트나 인증이 바뀜 | 항목이 따라갑니다. 호스트, 포트, 인증이 브로커의 것이 됩니다. 이름, 클라이언트 ID, 킵얼라이브, 사용 여부는 사용자가 정한 대로 남습니다. 항목 자신의 패널에는 "이 항목은 이 스테이션이 자신의 MQTT 브로커(서버, MQTT 브로커)를 읽는 통로입니다. 호스트, 포트, 인증은 그 브로커를 따르며, 브로커가 켜져 있는 동안 남아 있습니다."라고 나옵니다. |
| 브로커가 켜져 있는 동안 | 항목을 삭제할 수 없습니다. 명령 모음, 오른쪽 클릭 메뉴, 드라이버의 표에서 브로커 삭제가 흐려진 채로 "브로커 '이 스테이션'은(는) 이 스테이션이 자신의 MQTT 브로커를 읽는 통로이므로, 그 브로커가 켜져 있는 동안 남아 있습니다. 먼저 서버에서 MQTT 브로커를 끄십시오."라고 알립니다. |
| 브로커를 끔 | 항목과 그 장치는 연결이 끊긴 채 그 자리에 남습니다. 그때 삭제하면 다음에 브로커를 켤 때 다시 만들어집니다. |
항목 아래에 저절로 추가되는 것은 없습니다. 브로커에 발행하는 장치는 다른 MQTT 드라이버의 브로커처럼 브로커의 스캔이나 직접 입력으로 추가하십시오. 브로커가 꺼져 있는 동안 스테이션 자신의 세션은 시도 간격을 늘리므로, 브로커를 켠 뒤 항목이 온라인이 되기까지 최대 30초가 걸릴 수 있습니다. 이 스테이션에도 모든 브로커에 있는 발행 카드가 있습니다. 스테이션이 자기 데이터를 자기 브로커에 발행하는 곳입니다.
에이전트 접근
| 도구 | 하는 일 |
|---|---|
station_broker_status |
브로커를 보고합니다. 켜짐 여부, 포트, 상태, 비밀번호를 뺀 인증, 연결된 장치, 항목 이 스테이션입니다. 런타임이 정지해 있어도 동작합니다. |
station_broker_configure |
패널과 같은 규칙으로 브로커를 켜고 끄고, 포트를 옮기고, 인증을 바꿉니다. |
두 이름 모두 스테이션이 읽는 브로커의 도구인 mqtt_broker_로 시작하지 않습니다. 둘 다 다른 모든 도구와 함께 도구에서 설명합니다.
하지 않는 일
- TLS도 WebSocket도 없습니다. 장치는 TCP 위의 일반 MQTT로 접속합니다.
- 모든 장치에 사용자 이름과 비밀번호가 한 쌍뿐이며, 장치마다 따로 두지 않습니다.
- 영구 세션이 없으며, 보존 메시지는 스테이션을 다시 시작하면 남지 않습니다.
- 스테이션과 함께 멈춥니다. 스테이션이 꺼져 있는 동안에도 계속 발행하는 장치에는 따로 브로커가 필요합니다(브로커 설치).