Modbus 통신 프로토콜 소개
Modbus는 산업 자동화 분야에서 널리 사용되는 통신 프로토콜로, PLC(Programmable Logic Controller)와 RTU(Remote Terminal Unit) 간의 데이터 교환과 제어를 위해 개발되었습니다. 간단한 구조와 높은 호환성으로 인해 다양한 장치와 시스템에서 사용되고 있습니다. pymodbus
라이브러리를 활용하여 Home Assistant와 Modbus 통신을 설정하는 방법과, 이를 안전하게 운영하기 위한 방법입니다.
Modbus 통신 설정하기
Home Assistant에서 Modbus 통신을 설정하려면 configuration.yaml
파일에 통합 설정을 추가해야 합니다. 설정을 변경한 후에는 Home Assistant를 재시작하여 변경 사항을 적용해야 합니다.
기본 설정 예시
modbus:
- name: modbus_hub
type: tcp
host: IP_ADDRESS
port: 502
delay: 0
message_wait_milliseconds: 30
timeout: 5
여기서 IP_ADDRESS
는 연결하려는 Modbus 장치의 IP 주소로 변경해야 합니다.
다양한 연결 방식 설정하기
Modbus는 여러 가지 연결 방식을 지원하며, 사용하는 장치에 따라 적절한 연결 방식을 선택해야 합니다.
TCP 연결 설정
TCP 프로토콜을 사용하는 장치에 대한 설정입니다.
modbus:
- name: modbus_hub
type: tcp
host: 192.168.1.1
port: 502
TCP-RTU 연결 설정
Modbus 포워더를 통해 TCP-RTU 연결을 설정하는 예시입니다.
modbus:
- name: modbus_hub
type: rtuovertcp
host: 192.168.1.1
port: 502
UDP 연결 설정
UDP 프로토콜을 사용하는 경우의 설정입니다.
modbus:
- name: modbus_hub
type: udp
host: 192.168.1.1
port: 502
시리얼 연결 설정
RS-485 인터페이스를 사용하는 장치에 대한 시리얼 연결 설정입니다.
modbus:
- name: modbus_hub
type: serial
port: /dev/ttyUSB0
baudrate: 9600
bytesize: 8
method: rtu
parity: E
stopbits: 1
여러 연결 설정
여러 개의 Modbus 장치를 동시에 연결할 수 있으며, TCP와 시리얼 연결을 혼합하여 설정할 수 있습니다.
modbus:
- name: modbus_hub
type: tcp
host: 192.168.1.1
port: 502
- name: modbus_hub2
type: serial
port: /dev/ttyUSB0
baudrate: 9600
bytesize: 8
method: rtu
parity: E
stopbits: 1
Modbus 엔티티 설정하기
Modbus 장치와의 통신을 위해 각 장치의 엔티티를 정의해야 합니다. 예를 들어, 특정 주소에서 온도 데이터를 읽어오는 센서를 설정할 수 있습니다.
modbus:
- name: modbus_hub
type: tcp
host: 192.168.1.1
port: 502
sensors:
- name: sensor1
address: 100
unit_of_measurement: '°C'
위 설정은 주소 100
에서 데이터를 읽어와 sensor1
이라는 이름의 센서를 생성하며, 단위는 섭씨 온도(°C
)로 표시합니다.
보안 가이드
Modbus 통신은 기본적으로 보안 기능이 부족하므로, 추가적인 보안 조치를 통해 안전한 운영이 필요합니다.
- 인증 및 접근 제어: 방화벽 설정이나 접근 제어 목록(ACL)을 통해 Modbus 통신에 대한 접근을 제한하고, 인증 메커니즘을 도입하여 권한이 없는 사용자의 접근을 방지합니다.
- 암호화: Modbus 프로토콜 자체는 암호화를 지원하지 않으므로, VPN이나 TLS 터널링을 통해 통신 내용을 암호화하여 데이터 유출을 방지합니다.
- 네트워크 분할: Modbus 장치가 연결된 네트워크를 다른 네트워크와 분리하여, 외부로부터의 침입 시 피해를 최소화합니다. VLAN을 사용하거나 별도의 서브넷을 구성할 수 있습니다.
- 로깅 및 모니터링: 통신 로그를 지속적으로 저장하고, 비정상적인 접근 시도를 실시간으로 모니터링하여 빠르게 대응할 수 있도록 합니다. SIEM(System Information and Event Management) 도구를 활용할 수 있습니다.
- 취약점 관리: 정기적으로 시스템 및 Modbus 장치의 펌웨어 업데이트를 확인하고, 제조사에서 제공하는 최신 보안 패치를 적용하여 알려진 취약점을 제거합니다.
활용 예시
공장 자동화 시스템 통합
공장에서 사용되는 PLC를 Modbus를 통해 Home Assistant와 연결하여 생산 라인의 상태를 실시간으로 모니터링하고 제어할 수 있습니다. 예를 들어, 센서 데이터를 수집하여 이상 발생 시 알림을 보내거나 자동으로 장비를 제어하는 시스템을 구축할 수 있습니다.
스마트 빌딩 에너지 관리
건물 내의 에너지 사용량을 모니터링하기 위해 Modbus를 지원하는 전력 계량기를 Home Assistant에 연결합니다. 실시간 에너지 소비 데이터를 분석하여 효율적인 에너지 관리와 비용 절감을 도모할 수 있습니다.
가정에서의 Home Assistant와 Modbus 통합 활용
준비물
- Home Assistant가 설치된 시스템: Raspberry Pi, Docker 등 다양한 방법으로 설치 가능
- Modbus 지원 장치: 스마트 미터, 온습도 센서, 조명 제어기 등
- RS-485 to USB 컨버터 (시리얼 연결의 경우)
- 이더넷 케이블 또는 Wi-Fi 연결 (TCP 연결의 경우)
Modbus 통합 설정 파일 편집
- Modbus 설정 추가
시리얼 연결(RS-485)을 사용하는 경우modbus: - name: "modbus_hub" type: serial method: rtu port: /dev/ttyUSB0 baudrate: 9600 stopbits: 1 bytesize: 8 parity: N
- port: RS-485 to USB 컨버터가 연결된 포트입니다.
- baudrate, parity 등은 장치 매뉴얼을 참고하여 설정합니다.
modbus: - name: "modbus_hub" type: tcp host: 192.168.1.100 port: 502
- Modbus 엔티티(센서) 설정
modbus: - name: "modbus_hub" type: serial method: rtu port: /dev/ttyUSB0 baudrate: 9600 stopbits: 1 bytesize: 8 parity: N sensors: - name: "Living Room Temperature" unit_of_measurement: "°C" slave: 1 address: 100 input_type: holding count: 1 data_type: int16
- slave: Modbus 장치의 슬레이브 ID입니다.
- address: 데이터를 읽어올 레지스터 주소입니다.
Home Assistant 재시작
- 설정 확인
hass --script check_config
- 재시작
sudo systemctl restart home-assistant@your_user
Modbus 장치와의 통신 확인
- Home Assistant 웹 인터페이스 접속
http://<Home Assistant IP 주소>:8123
- 센서 값 확인
- 개요 페이지에서 새로운 센서가 추가되었는지 확인합니다.
- 센서 값이 실시간으로 업데이트되는지 확인합니다.
온도 센서를 이용한 난방 제어
- 자동화 설정
거실 온도가 18°C 이하로 내려가면 난방기를 켜고, 22°C 이상으로 올라가면 난방기를 끄는 자동화를 설정합니다.automation: - alias: "난방기 제어" trigger: - platform: numeric_state entity_id: sensor.living_room_temperature below: 18 action: - service: switch.turn_on target: entity_id: switch.heater - alias: "난방기 끄기" trigger: - platform: numeric_state entity_id: sensor.living_room_temperature above: 22 action: - service: switch.turn_off target: entity_id: switch.heater
- 난방기 스위치 설정
Modbus로 제어 가능한 난방기의 스위치를 설정합니다.switch: - platform: modbus coils: - name: "Heater" slave: 1 coil: 1
전력 소비 모니터링
- 에너지 미터 설정
Modbus를 지원하는 에너지 미터로부터 전력 소비량을 읽어옵니다.sensor: - platform: modbus registers: - name: "Power Consumption" unit_of_measurement: "kWh" slave: 2 register: 300 count: 2 data_type: float32
- 에너지 대시보드 구성
- Home Assistant의 에너지 관리 기능을 활용하여 일일, 주간, 월간 에너지 소비량을 시각화합니다.
조명 자동화
- 조명 스위치 설정
switch: - platform: modbus coils: - name: "Living Room Light" slave: 1 coil: 2
- 일몰 시 자동 조명 켜기
automation: - alias: "일몰 시 거실 조명 켜기" trigger: - platform: sun event: sunset offset: "-00:30:00" action: - service: switch.turn_on target: entity_id: switch.living_room_light
추가적인 활용 방법
환경 센서 데이터 수집 및 분석
- 공기질 센서: CO₂, VOC 등의 데이터를 수집하여 실내 공기질을 모니터링합니다.
- 데이터 시각화: Grafana와 같은 도구를 사용하여 장기적인 데이터 분석을 수행합니다.
음성 비서와의 통합
- Google Assistant 또는 Amazon Alexa와 연동하여 음성으로 Modbus 장치를 제어합니다.
경보 시스템 구축
- 문 열림 센서: Modbus를 지원하는 센서를 이용하여 문이 열렸을 때 알림을 받습니다.
- 경보 설정: 일정 시간 외에 문이 열리면 사이렌을 울리거나 경고 메시지를 보냅니다.
가정에서 Modbus 통신을 활용하면 다양한 IoT 장치와 Home Assistant를 통합하여 스마트 홈 환경을 구축할 수 있습니다.
댓글