본문으로 건너뛰기
블로그›2026. 8. 31.

온실 양액 pH 값을 MQTT로 상위 시스템까지 잇는 구성

온실 양액 pH 값을 MQTT로 상위 시스템까지 잇는 구성

온실 양액 값을 한곳에 모아야 하는 이유

시설 온실의 양액 공급 라인에서 pH와 EC는 급액 조성이 흔들리는 순간을 가장 먼저 보여 주는 값입니다. 문제는 이 값이 양액기 컨트롤러 화면에만 남는 현장이 많다는 점입니다. 며칠 뒤에 원인을 찾으려 해도 그날 배지 온도가 어땠는지, pH가 언제부터 벗어났는지를 같은 시간축에서 비교할 방법이 없습니다.

센서 데이터 수집을 재배 설비와 분리된 계층에서 처리하면 판단 근거가 남습니다. 급액 직후 pH가 설정값으로 돌아오는 데 걸린 시간, 한 주간의 EC 추세, 필터를 교체한 뒤의 변화가 모두 이력으로 쌓이기 때문입니다. 지금 값만 보는 원격 모니터링 구성과 지난 30일을 함께 보는 구성은 운영 판단의 폭이 다릅니다.

온실 현장에서 값이 올라오는 경로

구성은 세 단계로 나눕니다. 제어반 안의 pH 센서와 EC 트랜스미터가 RS485로 값을 내보내고, 그 값을 받아 MQTT로 발행하는 장치가 중간에 서고, 발행된 값을 저장하는 계층이 마지막에 붙습니다.

EASY-LINK는 이 가운데 두 번째 자리를 맡는 게이트웨이입니다. 제어반 안에서 RS485에 물린 센서를 읽어 브로커로 발행하므로, 온실 동마다 한 대씩 두어도 신호선을 사무실까지 끌고 갈 필요가 없습니다.

EASY LOGGER는 그 값을 받아 쌓는 운영 계층입니다. 수집 주기와 저장 이력, 외부로 나가는 전달 상태를 한 화면에서 통합 관리하고, 대시보드와 일일보고서로 현장에 보여 주는 산업용 IoT 게이트웨이 역할을 합니다.

온실 센서에서 게이트웨이를 거쳐 저장 계층으로 이어지는 데이터 흐름

제어반 센서 값이 발행 구간을 거쳐 저장 계층까지 이어지는 경로입니다.

발행된 값을 받는 수집 설정

MAIN 설정 화면의 PLC 연결 설정에서 CONNECTION PROTOCOL을 EASY-LINK로 고르고 PLC NAME을 넣습니다. 이 이름이 나중에 토픽과 API 주소, OPC-UA 노드 경로에 그대로 들어가므로 GH1_NUTRIENT처럼 현장에서 통하는 이름으로 처음에 정해 둡니다. PRODUCT에서는 EASY-LINK PRO를 고르고, 브로커 출처는 Self·관리자 MQTT 재사용과 External·장치 브로커 중에서 정합니다. Self를 고르면 MQTT 설정 화면의 브로커를 그대로 쓰므로 호스트와 계정을 두 번 넣지 않아도 됩니다.

수집 조건 설정에는 시작 번지 대신 SUBSCRIBE TOPIC, ROOT KEY, ADDRESSES를 넣습니다. EASY-LINK PRO는 RTU1 같은 채널 키가 ROOT KEY가 되고, ADDRESSES에는 저장할 주소키를 쉼표로 나열합니다. 토픽 스캔을 누르면 브로커에 실제로 들어오는 토픽과 키를 보여 주므로 결과를 클릭해 입력란을 채우는 편이 안전합니다. 자체 브로커를 쓰면서 구독 토픽이 EASY LOGGER가 스스로 발행하는 READ 토픽과 겹치면 저장이 거부되는데, 자기 출력을 다시 수집하는 순환을 막기 위한 검사입니다. STALE AFTER (MS)를 넣어 두면 그 시간 동안 수신이 없을 때 값을 null로 저장하고 결함으로 표시합니다.

DATA TYPE은 장치 쪽 형식과 반드시 맞춥니다. Word를 WORD (UInt16)로 잘못 잡으면 장치가 보낸 음수가 양수로 저장되고 오류도 나지 않습니다. 저장 설정 목록에서 STATUS가 RUNNING인지 확인하고, 브로커가 끊긴 동안에는 그 설정만 SKIPPED로 표시되었다가 복구되면 재개합니다.

EASY LOGGER MQTT 예제

EASY LOGGER는 수집한 값을 PLC 이름과 CONFIG 이름을 그대로 쓴 READ Topic으로 내보냅니다. 아래는 PLC NAME을 GH1_NUTRIENT, CONFIG NAME을 PH_EC_10S로 등록했을 때 상위 시스템이 받게 되는 주소와 값의 형태입니다.

READ Topic : GH1_NUTRIENT/PH_EC_10S/READ

payload
{
  "plc": "GH1_NUTRIENT",
  "config": "PH_EC_10S",
  "timestamp": "2026-08-31 15:00:10",
  "values": {
    "PH_MAIN": 6.12,
    "EC_MAIN": 1.84
  }
}

주소는 손으로 적지 않고 MQTT 설정 화면의 Topic Preview에서 자동으로 만들어진 값을 확인합니다. 발행이 실제로 돌고 있는지는 화면 아래 MQTT 상태 표시등과 Runtime Status에서 보고, 값이 어떤 형태로 나갔는지는 Payload Log에서 확인합니다. values 안의 주소키는 ADDRESSES에 넣은 이름 그대로 나가므로, 원시 키가 알아보기 어려우면 KEY 편집으로 읽기 쉬운 이름을 붙여 두는 편이 상위 매핑을 단순하게 만듭니다.

저장 위치와 상위 시스템 인터페이스

이 글의 주 전달 대상은 MQTT입니다. 값이 만들어지는 즉시 여러 시스템이 같은 값을 나눠 받을 수 있어 현장 화면과 상위 시스템을 동시에 붙일 때 유리합니다. 다만 브로커가 끊긴 구간은 남지 않으므로 기록은 따로 챙겨야 합니다.

그래서 DB 설정에서 MariaDB나 MySQL 접속 정보를 넣어 저장을 함께 켭니다. MySQL 쪽은 기간 조회와 집계에 강하지만 조회 시점에 서버가 살아 있어야 하고, HTTP API는 상위 시스템이 필요할 때 가져가는 방식이라 방화벽 정책이 단순해지는 대신 실시간성은 떨어집니다. DB 저장과 로컬 CSV는 동시에 켤 수 없으므로 DB 서버가 있는 온실은 DB를, 없는 현장은 CSV를 고릅니다. Firebase처럼 외부 실시간 데이터베이스로 바로 보내는 방법도 있지만 인터넷 회선 상태에 화면이 그대로 묶이므로, 온실 안에서 먼저 확인해야 하는 값은 현장 저장 쪽에 남겨 두는 편이 낫습니다.

MES나 CIM 같은 상위 시스템과의 연계도 이 세 가지 인터페이스 경계로만 정리합니다. 실시간 값은 MQTT, 기간 조회는 데이터베이스, 요청 기반 조회는 HTTP API로 나눠 두면 상위 시스템이 바뀌어도 현장 수집 설정은 그대로 둘 수 있습니다.

한 대에서 시작해 범위를 넓히는 순서

처음부터 온실 전체를 붙이지 않습니다. 먼저 한 대, 한 공정으로 시작합니다. 양액기 한 대에 물린 pH 센서 한 채널만 EASY-LINK에 연결해 값이 올라오는지 확인하고, 2주 정도 저장 이력을 쌓아 실제로 필요한 주소가 무엇인지 추려 낸 뒤 단계적으로 동을 넓히는 순서가 안정적입니다.

수집 주기와 전달 상태를 함께 확인하는 운영 화면 구성

수집 주기와 전달 상태를 한 화면에서 확인하는 운영 구성입니다.

게이트웨이 사양은 EASY-LINK-PRO 제품 소개에 정리해 두었고, 다른 현장 구성 사례는 기술 블로그 글 목록에서 볼 수 있습니다. 제품 구성 전체는 HT Automation 제품 소개에서 확인하시기 바랍니다.

온실마다 이미 들어가 있는 양액기와 컨트롤러가 다르므로 필요한 구성도 달라집니다. 지금 쓰는 장비 목록과 통신 방식만 정리해 주시면 현장 연결 가능 여부를 먼저 확인해 드리니 편하게 문의하시기 바랍니다.

관련 글

← 목록으로 돌아가기