Apr 112017
 

이번에는 Node-RED를 가지고 기본적인 설정 후에 간단히 노드 생성 및 테스트/디버깅해봄으로써 Node-RED를 맛보기로 하겠다.

Node-RED를 라즈베리 파이에서 운영하는 것은 너무도 쉽다. 2015년 11월 이후, 그러니까 Raspbian Jessie 이후의 full image를 설치했다면 이미 Node-RED가 설치되어 있다. 만약 수동으로 설치하려면 링크의 글을 보고 하면 된다. 본격적으로 Node-RED를 사용하려면 부팅시마다 자동으로 실행되도록 해주면 되는데 다음의 명령어를 실행해주면 된다.

sudo systemctl enable nodered.service

Node-RED가 실행중이라면 http://ip:1880을 입력해서 다음과 같은 editor에 접근이 가능하다.

nodered-editor

그런데 뭔가 이상하다. 아무런 인증 과정없이 editor에 접근이 가능했다. 그렇다. 기본적으로 node-red의 editor는 아무런 인증 과정없이도 사용이 가능하다. 링크의 글을 참조해서 기본적인 사용자 인증을 적용하면 되는데, 다음에 기재한 것만 해도 별 무리는 없을 듯 하다.

sudo apt-get update
sudo apt-get install npm
sudo npm install -g node-red-admin
sudo service nodered restart

node-red-admin hash-pw 실행 후 원하는 암호 입력하면 출력되는 hash된 키를 복사해둔다.

vi ~/.node-red/setting.js해서 adminAuth/httpNodeAuth/httpStaticAuth부분의 주석표시를 제거해서 활성화 후 node-red-admin을 통해 생성한 hash된 키를 복사해 넣고 node-red를 재부팅하면 된다.

adminAuth: {
type: “credentials”,
users: [{
username: “admin”,
password: “생성한 hash암호”,
permissions: “*”
}]
},

httpNodeAuth: {user:”admin”,pass:”생성한 hash암호”},
httpStaticAuth: {user:”admin”,pass:”생성한 hash암호”},

이제 다시 http://ip:1880으로 접속해보면 다음처럼 로그인 화면이 나오고 위에서 지정한 암호를 입력해야 editor 접근이 가능해진다.

editor-login

 

이제 Hello world를 해보자. Hello world 용으로 MQTT를 사용해보자. 일단 MQTT 서버와 클라이언트를 라즈베리 파이에 다음처럼 설치하자.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

아무 설정없는 상태에서 mosquitto에는 아무 인증없이 누구나 subscribe/publish가 가능하다. 그러므로 다음의 사용자 인증/토픽접근 제어 설정을 적용하도록 하자.

sudo vi /etc/mosquitto/mosquitto.users 해서 아이디:암호 형식으로 다음처럼 1줄에 1개씩 기재
admin:password_1

sudo mosquitto_passwd -U /etc/mosquitto/mosquitto.users

sudo vi /etc/mosquitto/mosquitto.conf 해서 다음을 추가
allow_anonymous false
password_file /etc/mosquitto/mosquitto.users

sudo service mosquitto restart

테스트 해보자.
터미널 1: mosquitto_sub -h localhost -t /sensor/livingroom/state -u admin -P password
터미널 2: mosquitto_pub -h localhost -t /sensor/livingroom/state -m “23 -u user -P password

sudo vi /etc/mosquitto/mosquitto.acl 해서 다음을 추가
user admin
topic/sensor/livingroom/state

sudo service mosquitto restart

테스트 해보자.
터미널 1: mosquitto_sub -h localhost -t /sensor/livingroom/state -u admin -P password
터미널 2: mosquitto_pub -h localhost -t/sensor/livingroom/state -m “23” -u admin -P password

다음으로는 dashboard node를 설치해야 한다(참고로 cd ~/.node-red 하지 않고 설치시 설치된 모듈이 지정된 위치에 다운로드되지 않아 인식되지 않는 오류가 발생함으로 현 시점에서는 디렉토리 변경이 필요함).

cd ~/.node-red
npm install node-red-dashboard
sudo service nodered restart

이제 http://ip:1880을 가면 다음과 같은 dashboard node들을 볼 수 있다.

dashboard-nodes

이제 모든 준비가 끝났다.

editor에서 ctrl + i 누른 후 다음을 붙여넣은 후 다음처럼 설정을 해주면 되고 deploy버튼을 눌러서 작성한 내용이 서버에 반영되도록 한 이후 http://ip:1880/ui에 접근하면 랜덤하게 생성된 값들이 MQTT 토픽에 Publish되고 그 값들이 대쉬보드에 실시간 표시됨을 볼 수 있다.

helloworld

[{“id”:”e8a6a48f.8953d8″,”type”:”inject”,”z”:”aa0a983c.7cbef8″,”name”:””,”topic”:””,”payload”:””,”payloadType”:”date”,”repeat”:”5″,”crontab”:””,”once”:false,”x”:115,”y”:54,”wires”:[[“fb45a81f.16e8d8”]]},{“id”:”fb45a81f.16e8d8″,”type”:”random”,”z”:”aa0a983c.7cbef8″,”name”:””,”low”:”10″,”high”:”100″,”inte”:”true”,”x”:266,”y”:53,”wires”:[[“147a741a.fcf04c”]]},{“id”:”147a741a.fcf04c”,”type”:”mqtt out”,”z”:”aa0a983c.7cbef8″,”name”:””,”topic”:”/sensor/livingroom/state”,”qos”:”1″,”retain”:”true”,”broker”:”d96006fc.6471d8″,”x”:463,”y”:51,”wires”:[]},{“id”:”89ac48b1.9612a8″,”type”:”mqtt in”,”z”:”aa0a983c.7cbef8″,”name”:””,”topic”:”/sensor/livingroom/state”,”qos”:”2″,”broker”:”d96006fc.6471d8″,”x”:135,”y”:150,”wires”:[[“1adfa2af.934e3d”]]},{“id”:”1adfa2af.934e3d”,”type”:”ui_gauge”,”z”:”aa0a983c.7cbef8″,”name”:””,”group”:”54359e7.e23766″,”order”:0,”width”:0,”height”:0,”gtype”:”donut”,”title”:”Gauge”,”label”:”units”,”format”:”{{value}}”,”min”:”10″,”max”:”100″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:354,”y”:148,”wires”:[]},{“id”:”d96006fc.6471d8″,”type”:”mqtt-broker”,”z”:””,”broker”:”localhost”,”port”:”1883″,”clientid”:””,”usetls”:false,”compatmode”:true,”keepalive”:”60″,”cleansession”:true,”willTopic”:””,”willQos”:”0″,”willPayload”:””,”birthTopic”:””,”birthQos”:”0″,”birthPayload”:””},{“id”:”54359e7.e23766″,”type”:”ui_group”,”z”:””,”name”:”Default”,”tab”:”841c7e06.6255c”,”disp”:true,”width”:”6″},{“id”:”841c7e06.6255c”,”type”:”ui_tab”,”z”:””,”name”:”Home”,”icon”:”dashboard”}]

helloworld-configuration

만약 어떤 값이 Random 노드에서 생성되는지 알고 싶다면 다음처럼 간단히 debug 노드를 붙여주면 된다. 생성한 디버그 노드의 출력은 끝에 달린 버튼을 클릭해서 on/off 시킬 수 있으므로 삭제하지 말고 필요없을 때에는 그냥 off시켜주면 편리하다.

helloworld-debug

이 예제를 통해 Injetc, debug, random, MQTT read(subscribe)/write(push) 그리고 dashboard 노드 중 Gauge 까지 한번에 다뤄보았다.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)