SlideShare a Scribd company logo
1 of 17
Node-RED 사용법
• Node-RED 기본 사용법
• Node-RED를 통한 Modbus 통신
• Node-RED에서 REST API 제공
개요
노드-레드(Node-RED)는 웹 페이지에서 쉽고 간단한 설정을 통해서 디바이스 또는 센서를 연결할 수 있게 하며, 필요한
프로토콜을 통해 외부로 데이터를 오픈할 수 있습니다.
https://nodered.org/
“노드-레드(Node-RED)는 하드웨어 장치, API 및 온라인 서비스를 새롭고 흥미로운 방식으로 연결하기 위한 프로그래밍
도구입니다.
노드-레드(Node-RED)는 브라우저 기반 편집기를 제공하며, 팔레트에 있는 다양한 노드를 연결하여 flow를 작성하여 클릭 한
번으로 런타임에 배치할 수 있습니다. “
https://ko.wikipedia.org/wiki/Node-RED
“Node-RED(노드 레드)는 하드웨어 장치들, API, 온라인 서비스를 사물인터넷의 일부로 와이어링(배선화)시키기 위해 본래 IBM이
개발한 시각 프로그래밍을 위한 플로 기반 개발 도구이다.
Node-RED는 브라우저 기반 플로 편집기를 제공하므로 자바스크립트 함수를 개발하는데 사용할 수 있다. 애플리케이션의
요소들은 재사용을 위해 저장하거나 공유할 수 있다. 런타임은 Node.js 위에서 개발되어 있다. Node-RED에서 만든 플로는
JSON을 사용하여 저장된다. 버전 0.14 이후 MQTT 노드들은 적절하게 구성된 TLS 연결을 만들 수 있다.
2016년에 IBM은 Node-RED를 오픈 소스 ‘JS Foundation’ 프로젝트로 기여했다.”
http://www.steves-internet-guide.com/node-red-overview/
“노드-레드(Node-RED)는 IBM이 개발하고 node.js로 작성된 오픈 소스 플로우 기반 툴이며 IOT 플랫폼 으로서 대시보드도
제공합니다.”
*
목표
• Node-RED의 인스톨
• MQTT over WebSocket을 위한 RabbitMQ의 인스톨 및 RabbitMQ의 MQTT 플러그인의 인스톨
• Node-RED에서 Modbus 서버의 설정
• Node-RED에서 Modbus 데이터 읽기
• Node-RED에서 Modbus 데이터 쓰기
• 취득한 Modbus 데이터를 웹 페이지에서 표시
• Node-RED에서 취득한 Modbus 데이터를 REST API를 접근하도록 설정
• Node-RED에서 Modbus 데이터를 REST API를 통해 제어하도록 설정
이 문서를 통해서 다음과 같은 것을 이해할 수 있습니다:
*
Node-RED 인스톨
https://nodered.org/
Node.js가 인스톨된 상태에서 윈도우 환경에서 이하의 명령을 실행합니다. (http://127.0.0.1:1880/으로 실행됨)
*
> npm install -g --unsafe-perm node-red
… 인스톨이 완료 되면 이하의 명령으로 node-red를 실행합니다.
> node-red
… 이하와 같은 메시지가 표시됩니다.
6 Feb 17:31:56 - [info]
Welcome to Node-RED
===================
6 Feb 17:31:56 - [info] Node-RED version: v1.0.3
6 Feb 17:31:56 - [info] Node.js version: v8.12.0
6 Feb 17:31:56 - [info] Windows_NT 10.0.18362 x64 LE
6 Feb 17:31:58 - [info] Loading palette nodes
6 Feb 17:32:04 - [info] Settings file : C:Usersmonad.node-redsettings.js
6 Feb 17:32:04 - [info] Context store : 'default' [module=memory]
6 Feb 17:32:04 - [info] User directory : C:Usersmonad.node-red
6 Feb 17:32:04 - [warn] Projects disabled : editorTheme.projects.enabled=false
6 Feb 17:32:04 - [info] Flows file : C:Usersmonad.node-redflows_MONAD.json
6 Feb 17:32:04 - [info] Server now running at http://127.0.0.1:1880/
RabbitMQ 인스톨
https://www.rabbitmq.com/
https://openplc.daouoffice.com/app/board/7600/post/674956
1) erlang의 인스톨: https://www.erlang-solutions.com/resources/download.html
2) RabbitMQ의 인스톨: https://www.rabbitmq.com/download.html
3) RabbitMQ의 MQTT 플러그인 인스톨
*
이하와 같은 명령으로 MQTT 플러그인을 인스톨합니다.
C:Program FilesRabbitMQ Serverrabbitmq_server-3.7.11sbin>
rabbitmq-plugins enable rabbitmq_management
Node-RED Simple Flow Example 1
*
Inject 노드의 injection 시작 버튼
디버그 창에 표시 여부
Node-RED Simple Flow Example 2
*
https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.csv
node-red-contrib-modbus 팔레트 설치
*
1) 오른쪽 상단에 있는 메뉴 버튼 > settings 을 클릭하고, Palette의 Install 탭에서
modbus를 검색합니다.
2) 검색 결과 중 node-red-contrib-modbus를 인스톨합니다.
하드웨어 구성
*
< 각층 경광등>
< 각층 LED >
< 각층 PIR >
< 각층 습도센서 >
< 각층 온도센서 >
< 각층 연기 감지 센서 >
< 각층 FAN >
< 각층 엘리베이터용 근접센서 >
전선
IP: 192.168.0. 55
Modbus Gateway
< DC motor >
층 수 센서 종류 Net address Offset Data Type Driver Object Type
1층 근접센서 1 0 BOOL Input Status
2층 근접센서 1 1 BOOL Input Status
3층 근접센서 1 2 BOOL Input Status
1층 경광등 1 512 BOOL Coil
2층 경광등 1 513 BOOL Coil
3층 경광등 1 514 BOOL Coil
1층 Fan 1 518 BOOL Coil
2층 Fan 1 519 BOOL Coil
3층 Fan 1 520 BOOL Coil
1층 LED 1 523 BOOL Coil
2층 LED 1 525 BOOL Coil
3층 LED 1 526 BOOL Coil
1층 온도센서 1 0 INT Holding Register
2층 온도센서 1 1 INT Holding Register
3층 온도센서 1 3 INT Holding Register
1층 습도센서 1 5 INT Holding Register
2층 습도센서 1 6 INT Holding Register
3층 습도센서 1 7 INT Holding Register
1층 연기감지 1 8 BOOL Input Status
2층 연기감지 1 9 BOOL Input Status
3층 연기감지 1 10 BOOL Input Status
1층 PIR 1 12 BOOL Input Status
2층 PIR 1 13 BOOL Input Status
3층 PIR 1 14 BOOL Input Status
엘리베이터 Down 1 516 BOOL Coil
엘리베이터 Up 1 517 BOOL Coil
INT: Signed Int 16
< 각층 디바이스의 구성 > < 디바이스의 Modbus Address 조견표>
위의 표의 Offset을 통해서 Modbus 데이터의 취득 및 제어를 합니다.
Node-RED Modbus Reading(단순 읽기)
*1) 접속할 Modbus 서버를 설정합니다.
2) Modbus 서버로부터 데이터를 취득합니다.
3) Modbus에서 취득한 데이터를 MQTT broker에 publish합니다.
RabbitMQ에 접속 ID/PWD를 설정한 경우, Security
탭에 그 ID/PWD를 기입합니다.
Server: RabbitMQ의 정보입니다.
Topic: publish할 topic을 기입합니다.
Node-RED Modbus Reading(Voltage로 읽은 값을 변환)
*
아날로그로 들어오는 데이터의 경우 ADC의 레졸루션, 측정 볼티지, 시스템 볼티지 및
센서의 데이터 시트를 통해서 계산한 결과를 전달합니다.
Analog Voltage Measured = ADC Reading/Resolution of the ADC x System Voltage
온/습도 값 = Analog Voltage Measured x 각 센서의 변환 계수(센서의 데이터시트 참조)
Node-RED Modbus Writing
*LED, FAN, Alarm Light와 같은 전원을 ON/OFF하여 조작하는 디바이스에 대한 제어를 하고자 합니다.
RESTful API 작성
층, 디바이스, 동작 명령을
추출
Modbus 서버에 데이터를
쓰기
Node-RED에서는 RESTful API를 작성할 수 있습니다. 또한 RESTful API를 작성할 때 변수를 이용하여 같은 패턴의 URL의 정보를 제어할 수 있습니다.
<동작 흐름>
<전체 Flow>
URL의 형태 예는 다음과 같습니다.
• http://127.0.0.1:1880/write/1f/led/on
• http://127.0.0.1:1880/write/1f/led/off
• http://127.0.0.1:1880/write/2f/fan/on
• http://127.0.0.1:1880/write/2f/fan/on
• http://127.0.0.1:1880/write/3f/alm/on
• http://127.0.0.1:1880/write/3f/alm/on
Node-RED Modbus Writing(URL Parsing)
*RESTful API를 통해서 호출된 URL에서 제어할 대상 정보를 추출하고 그 정보를 Modbus Flex Write에게 전달해 줍니다.
msg.payload.value:
동작 제어를 위한 값(true/false)
true: 전원 인가, false: 전원
절단
msg.payload.fc:
function code 5는 Coil 영역
연결
msg.payload.unitid:
modbus gateway id로 하나일 경우
1
msg.payload.address:
제어할 시작 어드레스
msg.payload.quantity:
시작 어드레스로부터 몇 개를 제어할
것인 지를 결정
Node-RED Modbus Writing(Modbus Flex Write)
*Modbus Flex Write를 이용해 Modbus 통신을 하여 실제 디바이스를 제어합니다.
Node-RED Modbus Writing(동작 테스트 1/2)
*웹 브라우저에서 REST API를 통해서 디바이스를 제어하는 동작을 테스트합니다. REST API 테스트를 위해서 Advanced REST client를
이용합니다. (Chrome 웹 스토어에서 검색하여 인스톨 합니다. https://chrome.google.com/webstore/ )
1층의 LED에 전원을 인가
Node-RED Modbus Writing(동작 테스트 2/2)
*Advanced REST client를 통해서 전달된 제어 정보를 수행한 이후 http out
이용합니다.
http response를 통해서 돌아온
결과입니다.
Modbus Response를 통해서
동작 결과를 Node-RED Flow
화면에서 확인할 수 있습니다.
결론
*Node-RED의 Modbus 통신 노드를 이용해 디바이스를 제어하는 과정을 거쳐서 다음과 같은 결론을
도출했습니다.
1) 산업용 프로토콜(예: Modbus)과 Node.js 및 JavaScript에 대한 기본 지식은 필요합니다.
2) 웹 페이지에서 flow를 작성할 수 있고 그 flow에 의해서 디바이스가 제어되는 것은 편의성
측면에서 매우 높다고 할 수 있습니다.
3) IOT Framework로서 사용할 수 있으며 디바이스 상태를 MQTT를 통해서 취득하여 웹페이지에
표시하고 REST API를 통해서 디바이스를 제어할 수 있습니다.

More Related Content

What's hot

Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.jsDinesh U
 
Implementing a LED LightBar solution on Android system
Implementing a LED LightBar solution on Android systemImplementing a LED LightBar solution on Android system
Implementing a LED LightBar solution on Android systemCheng Wig
 
第一次用 Vue.js 就愛上 [改]
第一次用 Vue.js 就愛上 [改]第一次用 Vue.js 就愛上 [改]
第一次用 Vue.js 就愛上 [改]Kuro Hsu
 
What is new in BIND 9.11?
What is new in BIND 9.11?What is new in BIND 9.11?
What is new in BIND 9.11?Men and Mice
 
Lvmを縮小してみた
Lvmを縮小してみたLvmを縮小してみた
Lvmを縮小してみたkoedoyoshida
 
Linux Kernel vs DPDK: HTTP Performance Showdown
Linux Kernel vs DPDK: HTTP Performance ShowdownLinux Kernel vs DPDK: HTTP Performance Showdown
Linux Kernel vs DPDK: HTTP Performance ShowdownScyllaDB
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성Hyunjik Bae
 
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiRoom 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiVietnam Open Infrastructure User Group
 
SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019Razvan Stoenescu
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Ryan Chou
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Cheng Wig
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked ChangesJiyeon Seo
 

What's hot (20)

Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Implementing a LED LightBar solution on Android system
Implementing a LED LightBar solution on Android systemImplementing a LED LightBar solution on Android system
Implementing a LED LightBar solution on Android system
 
第一次用 Vue.js 就愛上 [改]
第一次用 Vue.js 就愛上 [改]第一次用 Vue.js 就愛上 [改]
第一次用 Vue.js 就愛上 [改]
 
Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
What is new in BIND 9.11?
What is new in BIND 9.11?What is new in BIND 9.11?
What is new in BIND 9.11?
 
Proposal
ProposalProposal
Proposal
 
Lvmを縮小してみた
Lvmを縮小してみたLvmを縮小してみた
Lvmを縮小してみた
 
Linux Kernel vs DPDK: HTTP Performance Showdown
Linux Kernel vs DPDK: HTTP Performance ShowdownLinux Kernel vs DPDK: HTTP Performance Showdown
Linux Kernel vs DPDK: HTTP Performance Showdown
 
Server side rendering review
Server side rendering reviewServer side rendering review
Server side rendering review
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
React Server Side Rendering with Next.js
React Server Side Rendering with Next.jsReact Server Side Rendering with Next.js
React Server Side Rendering with Next.js
 
Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介
 
Introduction Node.js
Introduction Node.jsIntroduction Node.js
Introduction Node.js
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
 
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiRoom 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
 
Loom promises: be there!
Loom promises: be there!Loom promises: be there!
Loom promises: be there!
 
SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
 

Similar to Node-RED Modbus sample (Node-RED 간단 사용법)

한글시계웍샵_ SW
한글시계웍샵_ SW한글시계웍샵_ SW
한글시계웍샵_ SW영광 송
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Nalee Jang
 
ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCRYoonseok Pyo
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Seung-Hoon Baek
 
한글시계웍샵_SW
한글시계웍샵_SW한글시계웍샵_SW
한글시계웍샵_SW영광 송
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Hyunghun Cho
 
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solutionOpenStack Korea Community
 
Solaris 11 network virtualization & Server Virtualization for cloud
Solaris 11 network virtualization & Server Virtualization for cloudSolaris 11 network virtualization & Server Virtualization for cloud
Solaris 11 network virtualization & Server Virtualization for cloudsuk kim
 
NodeJs로 디바이스 통신하기
NodeJs로 디바이스 통신하기NodeJs로 디바이스 통신하기
NodeJs로 디바이스 통신하기TaeYoung Kim
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2InfraEngineer
 
Opendaylight beryllium
Opendaylight berylliumOpendaylight beryllium
Opendaylight berylliumCheolmin Lee
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_shareRhea Strike
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-toJi-Woong Choi
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Nalee Jang
 

Similar to Node-RED Modbus sample (Node-RED 간단 사용법) (20)

한글시계웍샵_ SW
한글시계웍샵_ SW한글시계웍샵_ SW
한글시계웍샵_ SW
 
Zimiidle
ZimiidleZimiidle
Zimiidle
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
 
ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCR
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
 
한글시계웍샵_SW
한글시계웍샵_SW한글시계웍샵_SW
한글시계웍샵_SW
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
 
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution
[OpenStack Days Korea 2016] Innovating OpenStack Network with SDN solution
 
Solaris 11 network virtualization & Server Virtualization for cloud
Solaris 11 network virtualization & Server Virtualization for cloudSolaris 11 network virtualization & Server Virtualization for cloud
Solaris 11 network virtualization & Server Virtualization for cloud
 
NodeJs로 디바이스 통신하기
NodeJs로 디바이스 통신하기NodeJs로 디바이스 통신하기
NodeJs로 디바이스 통신하기
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
 
Opendaylight beryllium
Opendaylight berylliumOpendaylight beryllium
Opendaylight beryllium
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_share
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to
 
Internship backend
Internship backendInternship backend
Internship backend
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
 

Node-RED Modbus sample (Node-RED 간단 사용법)

  • 1. Node-RED 사용법 • Node-RED 기본 사용법 • Node-RED를 통한 Modbus 통신 • Node-RED에서 REST API 제공
  • 2. 개요 노드-레드(Node-RED)는 웹 페이지에서 쉽고 간단한 설정을 통해서 디바이스 또는 센서를 연결할 수 있게 하며, 필요한 프로토콜을 통해 외부로 데이터를 오픈할 수 있습니다. https://nodered.org/ “노드-레드(Node-RED)는 하드웨어 장치, API 및 온라인 서비스를 새롭고 흥미로운 방식으로 연결하기 위한 프로그래밍 도구입니다. 노드-레드(Node-RED)는 브라우저 기반 편집기를 제공하며, 팔레트에 있는 다양한 노드를 연결하여 flow를 작성하여 클릭 한 번으로 런타임에 배치할 수 있습니다. “ https://ko.wikipedia.org/wiki/Node-RED “Node-RED(노드 레드)는 하드웨어 장치들, API, 온라인 서비스를 사물인터넷의 일부로 와이어링(배선화)시키기 위해 본래 IBM이 개발한 시각 프로그래밍을 위한 플로 기반 개발 도구이다. Node-RED는 브라우저 기반 플로 편집기를 제공하므로 자바스크립트 함수를 개발하는데 사용할 수 있다. 애플리케이션의 요소들은 재사용을 위해 저장하거나 공유할 수 있다. 런타임은 Node.js 위에서 개발되어 있다. Node-RED에서 만든 플로는 JSON을 사용하여 저장된다. 버전 0.14 이후 MQTT 노드들은 적절하게 구성된 TLS 연결을 만들 수 있다. 2016년에 IBM은 Node-RED를 오픈 소스 ‘JS Foundation’ 프로젝트로 기여했다.” http://www.steves-internet-guide.com/node-red-overview/ “노드-레드(Node-RED)는 IBM이 개발하고 node.js로 작성된 오픈 소스 플로우 기반 툴이며 IOT 플랫폼 으로서 대시보드도 제공합니다.” *
  • 3. 목표 • Node-RED의 인스톨 • MQTT over WebSocket을 위한 RabbitMQ의 인스톨 및 RabbitMQ의 MQTT 플러그인의 인스톨 • Node-RED에서 Modbus 서버의 설정 • Node-RED에서 Modbus 데이터 읽기 • Node-RED에서 Modbus 데이터 쓰기 • 취득한 Modbus 데이터를 웹 페이지에서 표시 • Node-RED에서 취득한 Modbus 데이터를 REST API를 접근하도록 설정 • Node-RED에서 Modbus 데이터를 REST API를 통해 제어하도록 설정 이 문서를 통해서 다음과 같은 것을 이해할 수 있습니다: *
  • 4. Node-RED 인스톨 https://nodered.org/ Node.js가 인스톨된 상태에서 윈도우 환경에서 이하의 명령을 실행합니다. (http://127.0.0.1:1880/으로 실행됨) * > npm install -g --unsafe-perm node-red … 인스톨이 완료 되면 이하의 명령으로 node-red를 실행합니다. > node-red … 이하와 같은 메시지가 표시됩니다. 6 Feb 17:31:56 - [info] Welcome to Node-RED =================== 6 Feb 17:31:56 - [info] Node-RED version: v1.0.3 6 Feb 17:31:56 - [info] Node.js version: v8.12.0 6 Feb 17:31:56 - [info] Windows_NT 10.0.18362 x64 LE 6 Feb 17:31:58 - [info] Loading palette nodes 6 Feb 17:32:04 - [info] Settings file : C:Usersmonad.node-redsettings.js 6 Feb 17:32:04 - [info] Context store : 'default' [module=memory] 6 Feb 17:32:04 - [info] User directory : C:Usersmonad.node-red 6 Feb 17:32:04 - [warn] Projects disabled : editorTheme.projects.enabled=false 6 Feb 17:32:04 - [info] Flows file : C:Usersmonad.node-redflows_MONAD.json 6 Feb 17:32:04 - [info] Server now running at http://127.0.0.1:1880/
  • 5. RabbitMQ 인스톨 https://www.rabbitmq.com/ https://openplc.daouoffice.com/app/board/7600/post/674956 1) erlang의 인스톨: https://www.erlang-solutions.com/resources/download.html 2) RabbitMQ의 인스톨: https://www.rabbitmq.com/download.html 3) RabbitMQ의 MQTT 플러그인 인스톨 * 이하와 같은 명령으로 MQTT 플러그인을 인스톨합니다. C:Program FilesRabbitMQ Serverrabbitmq_server-3.7.11sbin> rabbitmq-plugins enable rabbitmq_management
  • 6. Node-RED Simple Flow Example 1 * Inject 노드의 injection 시작 버튼 디버그 창에 표시 여부
  • 7. Node-RED Simple Flow Example 2 * https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.csv
  • 8. node-red-contrib-modbus 팔레트 설치 * 1) 오른쪽 상단에 있는 메뉴 버튼 > settings 을 클릭하고, Palette의 Install 탭에서 modbus를 검색합니다. 2) 검색 결과 중 node-red-contrib-modbus를 인스톨합니다.
  • 9. 하드웨어 구성 * < 각층 경광등> < 각층 LED > < 각층 PIR > < 각층 습도센서 > < 각층 온도센서 > < 각층 연기 감지 센서 > < 각층 FAN > < 각층 엘리베이터용 근접센서 > 전선 IP: 192.168.0. 55 Modbus Gateway < DC motor > 층 수 센서 종류 Net address Offset Data Type Driver Object Type 1층 근접센서 1 0 BOOL Input Status 2층 근접센서 1 1 BOOL Input Status 3층 근접센서 1 2 BOOL Input Status 1층 경광등 1 512 BOOL Coil 2층 경광등 1 513 BOOL Coil 3층 경광등 1 514 BOOL Coil 1층 Fan 1 518 BOOL Coil 2층 Fan 1 519 BOOL Coil 3층 Fan 1 520 BOOL Coil 1층 LED 1 523 BOOL Coil 2층 LED 1 525 BOOL Coil 3층 LED 1 526 BOOL Coil 1층 온도센서 1 0 INT Holding Register 2층 온도센서 1 1 INT Holding Register 3층 온도센서 1 3 INT Holding Register 1층 습도센서 1 5 INT Holding Register 2층 습도센서 1 6 INT Holding Register 3층 습도센서 1 7 INT Holding Register 1층 연기감지 1 8 BOOL Input Status 2층 연기감지 1 9 BOOL Input Status 3층 연기감지 1 10 BOOL Input Status 1층 PIR 1 12 BOOL Input Status 2층 PIR 1 13 BOOL Input Status 3층 PIR 1 14 BOOL Input Status 엘리베이터 Down 1 516 BOOL Coil 엘리베이터 Up 1 517 BOOL Coil INT: Signed Int 16 < 각층 디바이스의 구성 > < 디바이스의 Modbus Address 조견표> 위의 표의 Offset을 통해서 Modbus 데이터의 취득 및 제어를 합니다.
  • 10. Node-RED Modbus Reading(단순 읽기) *1) 접속할 Modbus 서버를 설정합니다. 2) Modbus 서버로부터 데이터를 취득합니다. 3) Modbus에서 취득한 데이터를 MQTT broker에 publish합니다. RabbitMQ에 접속 ID/PWD를 설정한 경우, Security 탭에 그 ID/PWD를 기입합니다. Server: RabbitMQ의 정보입니다. Topic: publish할 topic을 기입합니다.
  • 11. Node-RED Modbus Reading(Voltage로 읽은 값을 변환) * 아날로그로 들어오는 데이터의 경우 ADC의 레졸루션, 측정 볼티지, 시스템 볼티지 및 센서의 데이터 시트를 통해서 계산한 결과를 전달합니다. Analog Voltage Measured = ADC Reading/Resolution of the ADC x System Voltage 온/습도 값 = Analog Voltage Measured x 각 센서의 변환 계수(센서의 데이터시트 참조)
  • 12. Node-RED Modbus Writing *LED, FAN, Alarm Light와 같은 전원을 ON/OFF하여 조작하는 디바이스에 대한 제어를 하고자 합니다. RESTful API 작성 층, 디바이스, 동작 명령을 추출 Modbus 서버에 데이터를 쓰기 Node-RED에서는 RESTful API를 작성할 수 있습니다. 또한 RESTful API를 작성할 때 변수를 이용하여 같은 패턴의 URL의 정보를 제어할 수 있습니다. <동작 흐름> <전체 Flow> URL의 형태 예는 다음과 같습니다. • http://127.0.0.1:1880/write/1f/led/on • http://127.0.0.1:1880/write/1f/led/off • http://127.0.0.1:1880/write/2f/fan/on • http://127.0.0.1:1880/write/2f/fan/on • http://127.0.0.1:1880/write/3f/alm/on • http://127.0.0.1:1880/write/3f/alm/on
  • 13. Node-RED Modbus Writing(URL Parsing) *RESTful API를 통해서 호출된 URL에서 제어할 대상 정보를 추출하고 그 정보를 Modbus Flex Write에게 전달해 줍니다. msg.payload.value: 동작 제어를 위한 값(true/false) true: 전원 인가, false: 전원 절단 msg.payload.fc: function code 5는 Coil 영역 연결 msg.payload.unitid: modbus gateway id로 하나일 경우 1 msg.payload.address: 제어할 시작 어드레스 msg.payload.quantity: 시작 어드레스로부터 몇 개를 제어할 것인 지를 결정
  • 14. Node-RED Modbus Writing(Modbus Flex Write) *Modbus Flex Write를 이용해 Modbus 통신을 하여 실제 디바이스를 제어합니다.
  • 15. Node-RED Modbus Writing(동작 테스트 1/2) *웹 브라우저에서 REST API를 통해서 디바이스를 제어하는 동작을 테스트합니다. REST API 테스트를 위해서 Advanced REST client를 이용합니다. (Chrome 웹 스토어에서 검색하여 인스톨 합니다. https://chrome.google.com/webstore/ ) 1층의 LED에 전원을 인가
  • 16. Node-RED Modbus Writing(동작 테스트 2/2) *Advanced REST client를 통해서 전달된 제어 정보를 수행한 이후 http out 이용합니다. http response를 통해서 돌아온 결과입니다. Modbus Response를 통해서 동작 결과를 Node-RED Flow 화면에서 확인할 수 있습니다.
  • 17. 결론 *Node-RED의 Modbus 통신 노드를 이용해 디바이스를 제어하는 과정을 거쳐서 다음과 같은 결론을 도출했습니다. 1) 산업용 프로토콜(예: Modbus)과 Node.js 및 JavaScript에 대한 기본 지식은 필요합니다. 2) 웹 페이지에서 flow를 작성할 수 있고 그 flow에 의해서 디바이스가 제어되는 것은 편의성 측면에서 매우 높다고 할 수 있습니다. 3) IOT Framework로서 사용할 수 있으며 디바이스 상태를 MQTT를 통해서 취득하여 웹페이지에 표시하고 REST API를 통해서 디바이스를 제어할 수 있습니다.