ZPi Controller v2 로드맵 — MQTT, WebSocket, 알람
ZPi Controller v1 (운영자용 ZView + MCP + Modbus + Programs) 까지 정리하고 보니, v2 에서 추가할 만한 것들이 명확해졌다. 우선순위와 이유 정리.
🥇 MQTT 1순위 — Modbus 만으로는 부족
산업 PLC 의 Modbus 는 검증된 표준이지만 IoT 생태계와는 다리가 약하다. MQTT 가 있으면:
- Home Assistant 자동발견 (auto-discovery) → 스위치/센서 자동 등록
- Node-RED 와 양방향 연동 (코드 한 줄 없이 플로우 빌딩)
- Grafana 시각화 (MQTT → InfluxDB → 대시보드)
- 클라우드 (AWS IoT, Azure IoT Hub, ThingsBoard) 게이트웨이 0설정
- 다중 ZPi 간 P2P 통신
설계:
zpi/<deviceId>/io → publish, 1Hz
zpi/<deviceId>/io/outputs/{i} → publish on change
zpi/<deviceId>/cmd/output/{i} → subscribe (외부에서 토글)
zpi/<deviceId>/cmd/data/{i} → subscribe (D[] 쓰기)
zpi/<deviceId>/event → publish (룰 발동 / 알람)
zpi/<deviceId>/status → LWT online/offline retain
MQTTnet 으로 .NET 측 client/broker 모두 가능. 작업량 약 3일.
🥈 WebSocket — 라이브 모니터의 정의
현재 모니터 페이지는 /api/io 를 1Hz polling. 입력 변화 보는데 1초
지연 + 폴링 트래픽 낭비. WebSocket push 로 바꾸면 50ms 이내 반응.
ZView 도 활용 가능 — /api/io polling 대신 WS subscribe → CPU 부담
대폭 감소.
작업량 약 2일.
🥉 알람 + 알림 — 무인 운영의 핵심
룰엔진 카드 액션에 “알림” 추가:
- 텔레그램 봇 (가장 즉시)
- 슬랙 incoming webhook
- 이메일 (SMTP)
- 일반 webhook (다른 시스템 연동)
# 예: 룰 카드
Trigger: OnInputRising IN[0] (비상정지 입력)
Action: AlarmSend "🚨 비상정지 발생 - LINE2 컨베이어" → Telegram + Slack
야간 무인 공장 / 원격 모니터링에 필수. 작업량 약 1-2일.
다음 단계 (있으면 좋은)
| 기능 | 작업 | 가치 |
|---|---|---|
| 로컬 히스토리 DB (SQLite) | 2일 | IO 변화 / 알람 / 룰 발동 영구 기록. 사고 분석 / 트렌드 / 보고서 |
| 백업/복원 | 0.5일 | admin UI 에서 zip export/import. 새 SD 카드 클론 즉시 |
| OTA 펌웨어 업데이트 | 1-2일 | 시스템 페이지에서 dll 업로드. 현장 출장 줄임 |
| 여러 ZPi 동기화 | 2-3일 | 큰 공장의 multi-board 묶음 (master/slave) |
| i18n | 1일 | 한/영 토글. 해외 고객 대응 |
| 모바일 PWA | 0.5일 | manifest + service worker. 폰에서 앱처럼 |
| 감사 로그 | 1일 | 누가 언제 무엇을 바꿨나. 인증 환경 (제약/식품) |
ZView 진화
v1 에서 가장 흥미로운 부분이라 별도 로드맵:
| 항목 | 현재 | v2 |
|---|---|---|
| 활성 슬롯 | 1개 | N개 + 메뉴 (/zview/, /zview/pump, /zview/oven) |
| 사용자 프로그램 통합 | 충돌 경고만 | 프로그램이 자체 ZView 동봉 가능 (program.json 매니페스트) |
| AI 분석 깊이 | 룰 스크립트만 | 사용자 프로그램 소스도 분석해서 그에 맞는 ZView 자동 생성 |
| 미리보기 | 새 탭 | admin UI 안에서 iframe 라이브 미리보기 (편집 → 즉시 확인) |
| 권한 | admin/operator 단일 | 그룹 / 사용자별 분리 가능 |
가장 큰 도전 — 사용자 프로그램 모드의 충돌 해결
현재 사용자 프로그램 (Programs 페이지) 이 GPIO 점유하면 룰엔진과 ZView 가 자동 정지. v2 에서 풀어야 할 것:
- 프로그램이 자체 HTTP API 노출하면 ZView 가 그걸 분석해서 적응
- 프로그램이 매니페스트 (
program.json) 로 control point 선언:
AI 가 매니페스트 보고 ZView 자동 생성{ "controlPoints": [ { "label": "펌프 시작", "endpoint": "POST /pump/on" }, { "label": "비상정지", "endpoint": "POST /pump/estop", "danger": true } ] }
이건 단순 기능 추가가 아니라 아키텍처 결정이라 v2 의 첫 작업.
비교 — 다른 산업 PLC 들
| 기능 | 미쓰비시 FX5 | 지멘스 S7-1200 | ZPi Controller (목표) |
|---|---|---|---|
| 가격 | ~80만원 | ~120만원 | 부품 ~5만원 (판매가 미정) |
| Modbus | 옵션 모듈 (+10만원) | 통합 | 통합 |
| MQTT | 별도 게이트웨이 필요 | TIA Portal 확장 (+) | 통합 (v2) |
| HMI | 별도 패널 (+30만원~) | WinCC 별도 (+) | 웹 + AI 자연어 생성 |
| 클라우드 | 벤더 클라우드 (+) | 벤더 클라우드 (+) | 표준 MQTT → 어디든 |
| 프로그래밍 | GX Works (전용 IDE) | TIA Portal (전용 IDE) | 웹 + Python |
ZPi 의 위치: “PLC 가 너무 비싸거나 닫혀있어서 못 쓰던 영역” — 교육, R&D, 메이커, 소형 OEM, IoT 게이트웨이.
v2 작업 순서 (제안)
Week 1: 백업 / 롤백 정리 (완료)
Week 2: MQTT 통합 + Home Assistant 자동발견
Week 3: WebSocket + 라이브 모니터 개선 + ZView 멀티슬롯
Week 4: 알람 + 텔레그램/슬랙
Week 5: 로컬 히스토리 DB + Grafana 연동 가이드
Week 6: 사용자 프로그램 매니페스트 + AI ZView 자동생성 v2
마지막 한마디
ZPi Controller v1 만들면서 가장 배운 건 “AI 친화 인프라” 라는 관점. 도구 description 이 LLM 의 행동지침이 되고, AI 가 만든 산출물의 인프라 부분을 서버가 보완하고, 사용자 설정 실수도 자동 복구되는 시스템.
이런 디자인 패턴은 ZPi 가 아니라도 적용 가능하다 — 사내 백오피스 도구, 데이터 대시보드, IoT 디바이스 운영자 UI 등.
v2 도 같은 방향. 더 단순하고, 더 안전하고, AI 가 더 잘 다룰 수 있게.
의견 / 협업
이 글 보고:
- “이런 기능도 있으면 좋겠다” 의견
- 직접 써보고 싶다 (HW 보드 협찬 / 데모)
- 다른 산업 도메인 (반도체, 제약, 식품) 응용 아이디어
- 코드 보고 싶다 (오픈소스 공개 시점 알림)
연락 환영. (문의 페이지 / 이메일)
시리즈 마무리
ZPi Controller 시리즈 7편 끝.
- 라즈베리파이로 PLC 만들기 — ZPi Controller 소개
- ZView: AI 가 자연어로 만드는 산업 HMI
- Claude Desktop MCP — ‘한 번 더블클릭’ 설치자를 만들기까지의 삽질
- 디버깅한 세 가지 함정 — Modbus 포트, mDNS 캐시, Regex
$1 - 라즈베리파이 WiFi 복원력 + 부팅 1분 31초 → 33초
- (이 글) v2 로드맵
- ZView 샘플 — Modbus IO 모니터링 화면 한 장으로 만들기
읽어주셔서 감사합니다.
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…