일상생활 (EveryDay)

Home Assistant와 Modbus 통신 프로토콜 통합 설정 및 활용 가이드

날으는물고기 2024. 11. 12. 00:05

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 통합 설정 파일 편집

  1. 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 등은 장치 매뉴얼을 참고하여 설정합니다.
    TCP 연결을 사용하는 경우
    modbus:
      - name: "modbus_hub"
        type: tcp
        host: 192.168.1.100
        port: 502
  2. 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 재시작

  1. 설정 확인
    hass --script check_config
  2. 재시작
    sudo systemctl restart home-assistant@your_user

Modbus 장치와의 통신 확인

  1. Home Assistant 웹 인터페이스 접속
    http://<Home Assistant IP 주소>:8123
  2. 센서 값 확인
    • 개요 페이지에서 새로운 센서가 추가되었는지 확인합니다.
    • 센서 값이 실시간으로 업데이트되는지 확인합니다.

온도 센서를 이용한 난방 제어

  1. 자동화 설정
    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
    거실 온도가 18°C 이하로 내려가면 난방기를 켜고, 22°C 이상으로 올라가면 난방기를 끄는 자동화를 설정합니다.
  2. 난방기 스위치 설정
    switch:
      - platform: modbus
        coils:
          - name: "Heater"
            slave: 1
            coil: 1
    Modbus로 제어 가능한 난방기의 스위치를 설정합니다.

전력 소비 모니터링

  1. 에너지 미터 설정
    sensor:
      - platform: modbus
        registers:
          - name: "Power Consumption"
            unit_of_measurement: "kWh"
            slave: 2
            register: 300
            count: 2
            data_type: float32
    Modbus를 지원하는 에너지 미터로부터 전력 소비량을 읽어옵니다.
  2. 에너지 대시보드 구성
    • Home Assistant의 에너지 관리 기능을 활용하여 일일, 주간, 월간 에너지 소비량을 시각화합니다.

조명 자동화

  1. 조명 스위치 설정
    switch:
      - platform: modbus
        coils:
          - name: "Living Room Light"
            slave: 1
            coil: 2
  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를 통합하여 스마트 홈 환경을 구축할 수 있습니다.

728x90