PLCnext 컨트롤러를 Home Assistant와 연동해 스마트 홈 제어하기
이 데모 프로젝트는 PLCnext 컨트롤러를 오픈소스 홈 자동화 소프트웨어인 Home Assistant에서 REST API와 Modbus TCP를 통해 스마트 홈 장치로 사용하는 방법을 보여줍니다. PLCnext 컨트롤러를 사용하면 Axioline 컴포넌트를 자동화에 활용해 라즈베리파이 GPIO 핀보다 더 강력한 출력, Pt100 온도 센서, DALI 같은 버스 시스템을 쉽게 추가할 수 있습니다. 필요한 것은 작동하는 Home Assistant 설치와 실행 가능한 작은 PLCnext 프로젝트뿐입니다.
사전 요구사항
- Home Assistant Core 2021.1.5
- Balena
- PLCnext Engineer 2020.6
- AXC F 2152FW 2020.0 LTS
- Raspberry Pi 2 이미지 (시작까지 최대 1시간 소요)
라이브러리
- PLCnext Engineer용 Modbus_TCP (Build 8)
Home Assistant 서비스
기능 설명
PLCnext 컨트롤러를 스마트 홈 장치로 사용할 때의 가능성을 보여주기 위해, 릴레이로 다른 장치의 전원 전압을 제어해 하드 리셋을 수행하는 PLCnext 프로젝트를 준비했습니다. 리셋은 Telegram 봇으로 전송된 명령으로 트리거되며, 재시작이 시작되었다는 이메일이 발송됩니다. 이 예제는 PLCnext 컨트롤러를 Home Assistant 환경에 연결하는 두 가지 다른 방식을 보여줍니다.
아키텍처

Modbus TCP 연결
Modbus TCP 라이브러리를 사용해 PLCnext 프로젝트에 Modbus 서버를 추가합니다. 설정은 라이브러리 예제와 동일합니다. 적절한 Modbus 레지스터 선택은 데이터 종류와 용도에 따라 달라집니다. 여기서는 변수를 코일 레지스터에 매핑했습니다.
주의: Modbus 서버는 동시에 하나의 연결만 지원합니다. 테스트 중 연결이 올바르게 종료되지 않으면(빈번히 발생) 서버가 오류 상태에 빠져 수동으로 재시작해야 합니다. 이를 방지하려면 PLCnext 프로젝트에 Modbus 서버 자동 재시작 로직을 프로그래밍하는 것이 좋습니다.
Home Assistant에서 Modbus 클라이언트로 두 가지 주요 옵션이 있습니다:
- Node-RED 애드온과 사용 가능한 Modbus 라이브러리 사용
configuration.yaml에서 엔티티 구성 (더 직관적)
아래와 같이 표준 스위치 서비스를 사용하면 부울 변수 작업에 적합합니다. turn_on/turn_off 기능이 내장되어 변수 설정/해제가 가능합니다.
modbus:
type: tcp
host: YOUR_SERVER_IP
port: 502
name: hub1
switch:
- platform: modbus
coils:
- name: restartMB
hub: hub1
slave: 1
coil: 13
Node-RED를 선택하면 일반적으로 읽기와 쓰기에 별도 연결을 생성해 위에서 언급한 오류 상태를 유발할 수 있습니다. 이를 피하려면 Modbus UDP를 사용하거나 PLCnext 프로젝트에서 읽기용/쓰기용 두 개의 Modbus 서버를 구성하세요.
REST API 연결
두 번째 방법은 PLCnext REST 데이터 인터페이스입니다. 이 인터페이스는 PLCnext HMI와 관련되어 있어, 빈 HMI 페이지가 하나라도 있어야 REST API를 사용할 수 있습니다. 또한 변수에 HMI 플래그가 설정되어야 합니다. 자세한 내용은 PLCnext Info Center를 참조하세요.
Home Assistant 측에서는 Node-RED 애드온으로 HTTP 요청을 생성합니다. 설치는 이 지침과 이 지침을 따라 두 단계 모두 완료해야 합니다.
PLCnext 프로젝트에서 HMI 사용자 인증이 활성화된 경우 Node-RED 인증은 다음과 같이 구성됩니다.

플로우는 인증을 실행하고 액세스 토큰을 저장해 후속 요청에 사용합니다. 정확한 HTTP 요청 구조는 PLCnext Info Center 문서를 확인하세요.
Node-RED에서 Home Assistant 데이터에 접근하려면 Node-RED 애드온에 포함된 여러 노드를 사용합니다. 아래 그림 하단의 짧은 플로우는 Home Assistant에 새 엔티티를 생성하고, 상단 플로우에서 이 엔티티 변경을 감지합니다. 엔티티가 true로 설정되면 PLCnext 컨트롤러의 변수도 true로 설정돼 리셋을 트리거합니다. PLCnext 프로젝트의 재시작 변수가 리셋 후 자동으로 false가 되므로, Home Assistant 엔티티도 5초 지연 후 false로 설정됩니다.

Telegram 봇
Home Assistant와 통신하기 위해 Telegram Bot API를 사용합니다. 이 지침을 따라 새 봇을 등록해야 합니다.
telegram_bot:
- platform: polling
api_key: YOUR_API_TOKEN
allowed_chat_ids:
- YOUR_CHAT_ID_1
- YOUR_CHAT_ID_2
채팅 ID를 찾는 가장 쉬운 방법은 봇에게 메시지를 보낸 후 다음 HTTP 요청을 실행하는 것입니다:
https://api.telegram.org/botYOUR_API_TOKEN/getUpdates
유용한 예로, 봇이 매일 아침 날씨 정보를 알려줘 옷차림을 결정하는 데 도움을 줄 수 있습니다. 이 프로젝트에서는 Telegram 명령으로 PLC를 하드 리셋하는 기능을 추가했습니다. /MBrestartPLC 명령은 Modbus 코일 레지스터 값을 변경하는 Home Assistant 자동화 스크립트를 시작하고, /RESTrestartPLC는 REST API로 동일하게 동작합니다.
SMTP
Home Assistant에서 SMTP(Simple Mail Transfer Protocol)를 사용해 홈 자동화에서 사용 가능한 데이터 중 선택적으로 이메일을 보낼 수 있습니다. configuration.yaml에 다음 코드를 추가해 서비스를 구현합니다:
notify:
- name: SMTP_MESSENGER
platform: smtp
server: SMTP_SERVER
port: 587
timeout: 15
sender: YOUR_EMAIL_ADRESS
encryption: starttls
username: YOUR_USERNAME
password: YOUR_PASSWORD
recipient:
- EMAIL_ADRESS_OF_THE_RECIPIENT
sender_name: My Home Assistant
Home Assistant의 SMTP 서비스에 대한 자세한 정보를 확인하세요.
자동화
모든 서비스와 라이브러리가 구현되고 준비되면 자동화로 결합합니다. 이는 Home Assistant 환경의 automations.yaml에서 프로그래밍합니다. 자동화 구조는 아래 표와 같이 매우 간단합니다. 별칭은 Home Assistant에서의 자동화 이름입니다. 트리거는 자동화를 실행하기 위해 참이어야 하는 조건(이 경우 특정 Telegram 명령)이고, 액션은 작업(변수 설정 및 이메일 발송)입니다.
| Modbus TCP |
REST API |
- id: '1'
alias: 'Trigger a reset of a controller via modbus'
trigger:
platform: event
event_type: telegram_command
event_data:
command: '/MBrestartPLC'
action:
- service: switch.turn_on
entity_id: switch.restartMB
- service: notify.SMTP_MESSENGER
data:
title: 'PLC message'
message: 'PLC restart initiated via modbus!'
|
- id: '2'
alias: 'Trigger a reset of a controller via rest api'
trigger:
platform: event
event_type: telegram_command
event_data:
command: '/RESTrestartPLC'
action:
- service: switch.turn_on
entity_id: switch.restartREST
- service: notify.SMTP_MESSENGER
data:
title: 'PLC message'
message: 'PLC restart initiated via rest!'
|
결론
이 데모 프로젝트는 PLCnext 컨트롤러를 홈 자동화에 통합하는 것이 꽤 간단함을 입증합니다. Home Assistant에서 모든 PLC 데이터에 접근할 수 있게 되면, 날씨나 Home Assistant에서 사용 가능한 다른 데이터에 의존해 제어 및 모니터링할 수 있는 훨씬 더 복잡한 PLC 프로그램 등 이 예제보다 훨씬 강력한 애플리케이션으로 나아갈 길이 열립니다.