IT 개발,관리,연동,자동화

MQTT와 Modbus를 활용한 Python 소스 구성 및 상세 설명: 전력 계량 정보 수집 시스템 구축 가이드

_Blue_Sky_ 2024. 10. 1. 11:53
728x90

서론

이 글에서는 전력 계량 정보를 실시간으로 수집하여 활용하는 시스템을 구축하기 위한 Python 소스 코드를 상세히 설명합니다. 특히, 산업 환경에서 널리 사용되는 Modbus 프로토콜을 통해 계량기 데이터를 수집하고, IoT 환경에 적합한 MQTT 프로토콜을 이용하여 데이터를 전송하는 과정을 중점적으로 다룹니다.

시스템 개요

  • Modbus: 계량기와 같은 산업용 장비와 통신하기 위한 시리얼 통신 프로토콜입니다. Python에서는 pymodbus 라이브러리를 사용하여 Modbus 통신을 구현할 수 있습니다.
  • MQTT: 경량 메시징 프로토콜로, IoT 환경에서 데이터를 전송하기에 적합합니다. Python에서는 paho-mqtt 라이브러리를 사용하여 MQTT 클라이언트를 구현할 수 있습니다.

Python 코드 구현

import paho.mqtt.client as mqtt
from pymodbus.client.sync import ModbusTcpClient

# MQTT 설정
MQTT_BROKER = "your_mqtt_broker_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "energy_data"

# Modbus 설정
MODBUS_HOST = "your_modbus_device_ip"
MODBUS_PORT = 502

# MQTT 클라이언트 생성
client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT)

# Modbus 클라이언트 생성
client_modbus = ModbusTcpClient(host=MODBUS_HOST, port=MODBUS_PORT)

def read_modbus_data():
    # Modbus 레지스터에서 데이터 읽기
    result = client_modbus.read_holding_registers(0, 10)  # 예시: 0번 레지스터부터 10개 읽기
    if result.function_code < 0x80:
        return result.registers
    else:
        return None

def publish_mqtt(data):
    # MQTT로 데이터 발행
    client.publish(MQTT_TOPIC, str(data))

while True:
    data = read_modbus_data()
    if data:
        publish_mqtt(data)
    time.sleep(5)  # 5초마다 데이터 읽기
 
728x90

코드 설명

  1. 라이브러리 임포트: paho-mqtt와 pymodbus 라이브러리를 임포트합니다.
  2. 설정: MQTT 브로커 주소, 포트, 토픽, Modbus 장비 주소, 포트 등을 설정합니다.
  3. MQTT 클라이언트 생성: mqtt.Client()를 사용하여 MQTT 클라이언트를 생성하고 브로커에 연결합니다.
  4. Modbus 클라이언트 생성: ModbusTcpClient()를 사용하여 Modbus 클라이언트를 생성하고 Modbus 장비에 연결합니다.
  5. Modbus 데이터 읽기: read_modbus_data() 함수에서 Modbus 레지스터에서 데이터를 읽어옵니다.
  6. MQTT 데이터 발행: publish_mqtt() 함수에서 읽은 데이터를 MQTT 토픽에 발행합니다.
  7. 무한 루프: 지정된 시간 간격으로 Modbus 데이터를 읽고 MQTT로 발행하는 작업을 반복합니다.

추가 고려 사항

  • 에러 처리: 예외 처리를 통해 오류 발생 시 적절한 조치를 취해야 합니다.
  • 데이터 형식 변환: Modbus에서 읽어온 데이터를 JSON 형식으로 변환하여 MQTT로 전송할 수 있습니다.
  • 데이터 보안: MQTT 통신 시 보안을 위해 SSL/TLS를 사용하는 것이 좋습니다.
  • 데이터베이스 연동: 수집된 데이터를 MySQL, PostgreSQL 등의 데이터베이스에 저장하여 분석에 활용할 수 있습니다.
  • 클라우드 서비스: AWS IoT Core, Azure IoT Hub 등 클라우드 MQTT 서비스를 활용하면 더욱 확장성 있는 시스템을 구축할 수 있습니다.

확장 기능

  • 다양한 Modbus 함수: read_coils, write_coils 등 다양한 Modbus 함수를 사용하여 다양한 종류의 데이터를 읽고 쓸 수 있습니다.
  • 데이터 가공: 수집된 데이터를 가공하여 유용한 정보를 추출할 수 있습니다. 예를 들어, 전력 사용량을 시간별로 그래프로 표현하거나, 이상치를 감지하는 알고리즘을 구현할 수 있습니다.
  • 알람 시스템: 특정 조건이 충족될 때 알람을 발생시키는 기능을 구현할 수 있습니다.
  • 웹 인터페이스: Flask, Django 등을 사용하여 웹 인터페이스를 구축하여 실시간 데이터를 모니터링하고 제어할 수 있습니다.

결론

이 글에서는 MQTT와 Modbus를 활용하여 전력 계량 정보를 수집하고 실시간으로 처리하는 Python 소스 코드를 소개했습니다. 이를 기반으로 다양한 IoT 시스템을 구축할 수 있습니다.

 

728x90