스마트팜 온실 온도 이력을 MQTT로 모아 MySQL에서 조회하는 구성

온실 온도는 현재값과 이력이 함께 필요합니다
온실의 현재 온도는 당장 환경을 살피는 데 필요하지만, 한 시점의 숫자만으로는 시간대별 변화를 판단하기 어렵습니다. 같은 구역을 언제 측정했고 값이 어떻게 달라졌는지 남겨야 운영자가 설정을 검토할 근거를 확보합니다. 농촌진흥청 농업기술 데이터 플랫폼은 온실온도를 자동 수집하는 환경정보 항목으로 제시합니다.
이번 구성은 온도센서에서 시작한 값을 MQTT로 전달하고 MySQL에 남겨 보존/검색에 활용하는 스마트팜 사례입니다. 운영 판단의 출발점은 온도 수치 자체보다 값이 기록된 시각과 누락 구간을 함께 보는 일입니다. 현장 담당자는 시간대별 이력을 검토해 재배 환경의 변화를 확인하고, 필요한 조정은 별도 운용 절차에 따라 판단합니다.
전달 경로와 저장 대상을 먼저 정합니다
온실 데이터의 목적을 세 가지로 나누면 구성이 분명해집니다. 현장에서는 값을 수집하고, 연결 구간에서는 수집값을 보내며, 운영 화면에서는 저장 이력과 전달 상태를 확인합니다. 센서 데이터 수집과 데이터 추세 분석을 같은 데이터 흐름으로 묶되, 각 단계가 정상인지 따로 확인할 수 있어야 합니다.
주 전달 대상은 MySQL입니다. MQTT는 장치가 브로커에 값을 발행하고 수집 측이 받는 연결에 쓰며, MySQL은 누적값을 조회하고 보존 기간을 관리하는 데 씁니다. HTTP API도 외부 시스템에 값을 전달하는 경로로 제공되지만, 이 사례에서는 별도의 조회 경로를 만들지 않습니다.
처음부터 여러 구역을 묶기보다 온도 수집 장치 한 대의 온도 흐름을 확인한 뒤 범위를 넓히는 순서가 적합합니다. 이때 기록의 빈도와 저장 공간을 함께 검토해야 합니다. 데이터가 보인다는 사실과 필요한 기간의 이력이 남는다는 사실은 각각 확인해야 합니다.
온도 수집 장치에서 운영 화면까지 잇습니다
EASY-TEMP는 이 구성의 현장 온도 수집 장치로 두고, EASY-LINK는 값을 MQTT로 보내는 연결 역할을 맡깁니다. EASY LOGGER는 현장에서 값을 받는 수집 장치이며, MQTT 값의 저장 이력과 전달 상태를 확인하는 산업용 IoT 게이트웨이이자 대시보드 운영 계층입니다. 세 제품의 역할을 이 순서로 나누면 온도 값의 발생 지점부터 MySQL 조회까지 같은 흐름으로 따라갈 수 있습니다.
MAIN 설정의 PLC 연결 설정에서 CONNECTION PROTOCOL을 EASY-LINK로 고르고 PRODUCT에서 TEMP를 선택합니다. 브로커를 장비의 MQTT 설정과 함께 운용한다면 Self · 관리자 MQTT 재사용을 고릅니다. 현장 브로커를 따로 쓰는 구성에서는 External · 장치 브로커를 고르고 BROKER HOST, PORT, USERNAME, PASSWORD, CLIENT ID, TLS를 실제 접속 정보에 맞게 입력합니다.
수집 조건 설정에는 SUBSCRIBE TOPIC으로 매뉴얼 예시인 EASYLINK/TEMP를 넣고 ROOT KEY는 TEMP 기본값인 EASYTEMP를 확인합니다. ADDRESSES는 임의로 정하지 않고 토픽 스캔에서 실제 수신 키를 확인한 뒤 채웁니다. TRIGGER의 On message는 메시지가 올 때마다 한 행을 남기고, Timer는 정한 주기마다 최신값을 한 행으로 남깁니다.

온도 수집, MQTT 전달, 이력 저장의 세 단계를 구분한 흐름입니다.
EASY LOGGER MySQL 예제
아래는 저장된 프로필과 수집 조건을 확인하고 DB 조회로 이동하는 읽기 전용 예제입니다. 매뉴얼의 화면 이름과 입력 항목, 토픽 예시만 사용합니다. ADDRESSES 값은 실제 메시지에서 확인해야 하므로 임의의 주소키를 넣지 않습니다.
MAIN 설정 > PLC 연결 설정
CONNECTION PROTOCOL: EASY-LINK
PRODUCT: TEMP
PLC NAME: 등록할 장비 이름
MAIN 설정 > 수집 조건 설정
CONFIG NAME: 수집 설정 이름
PLC SELECT: 저장한 PLC
ROOT KEY: EASYTEMP
MAIN 설정 > 저장 설정 목록
주소 / 토픽: EASYLINK/TEMP
DB 설정 > DB 연결 설정
Host Address: DB 서버 주소
Port: 3306
DB 조회 > 테이블 선택 > 기간 설정 > 상세 필터 > 조회
DB 설정에서 ENABLE을 켜고 DB Name, Host Address, Port, User, Password를 입력한 뒤 연결 테스트와 설정 저장을 진행합니다. 저장된 값은 외부 DB에 기록합니다. MySQL의 SELECT를 쓰는 외부 쿼리는 실제 외부 스키마와 테이블을 확인한 뒤 별도 시스템에서 작성합니다. 이 매뉴얼에는 그 SELECT 문과 테이블 구조가 제시되지 않습니다.
화면 아래 STATUS 표시등에서 DB 상태를 보고, MAIN 설정의 저장 설정 목록에서 RUNNING 여부를 확인합니다. DB History는 이 글에서 화면의 DB 이력 로그를 가리키는 표현이며, 해당 화면에서 전체 처리 건수와 성공률, 마지막 오류 시각을 확인합니다. DB 조회에서는 기간과 Config, Address, Data Type으로 결과를 좁혀 Timestamp, Config, Address, Value를 읽습니다. 보존/검색 범위는 DB TABLE DELETE와 DB 조회의 기간 설정에서 확인합니다.
대시보드와 저장 상태를 함께 점검합니다
EASY LOGGER 대시보드에서는 값의 그래프를 보고, DB 조회와 화면 하단 상태 표시등에서 저장 이력과 전달 상태를 확인합니다. 화면 하단의 DB·PLC·API·MQTT·OPCUA 상태 표시등은 어느 화면에서든 연결 상태를 보는 출발점입니다. 수집값이 안 보이면 MAIN 설정의 저장 PLC 목록과 저장 설정 목록을 먼저 확인합니다.
상태가 RUNNING이면 통신과 수집이 정상이며, FAULT는 접속 정보나 주소 범위를 점검할 신호입니다. EASY-LINK 브로커 연결이 없어 SKIPPED가 표시되면 선행 조건을 확인합니다. 브로커가 복구되면 수집이 재개되므로, 재개 여부와 이후 DB 이력 로그를 다시 확인합니다.
DB 조회에서는 필요한 기간을 지정해 조회한 뒤 결과를 검토합니다. CSV 출력은 조회 결과를 파일로 내려받을 때 쓰며, DB TABLE DELETE에는 보존 기간을 지정합니다. 설정한 기간이 지나면 수집 데이터가 매일 00:00에 정리되므로 필요한 이력 기간을 먼저 결정합니다.

연결 상태, 수집 상태, 기간별 조회를 순서대로 확인하는 운영 화면입니다.
한 구역에서 확인하고 운영 범위를 넓힙니다
MySQL은 이력 검색과 보존 기간 관리에 맞고, MQTT는 온도 값이 브로커를 통해 도착하는지를 확인하는 연결에 맞습니다. 두 경로의 상태를 따로 읽으면 저장 오류와 전달 중단을 구분하기 쉽습니다. HTTP API는 외부 인터페이스가 필요한 경우의 별도 선택지이며, 여기서는 MySQL 이력 조회를 중심으로 운영합니다.
첫 적용은 온도 수집 장치 한 대의 토픽과 주소키를 확인하고, 실제 기록이 DB 조회에 나타나는지 보는 순서로 진행합니다. 같은 온도라도 구역이 늘면 이름과 키가 뒤섞이지 않도록 등록 단계에서 구분해야 합니다. 홈에서 제품 구성을 보고 블로그 목록과 온실 구역별 환경 기록 가이드를 함께 검토할 수 있습니다.
설치 전에 현장 연결 가능 여부를 먼저 확인하십시오. 브로커 출처, 실제 수신 토픽과 키, DB 서버 접속 정보, 필요한 보존 기간을 확인하면 적용 범위를 구체적으로 정할 수 있습니다.