OM2M 오픈소스설치가이드 2014 년 10 월 경북대학교통신프로토콜연구실 강형우 (hwkang0621@gmail.com) 요약 최근사물인터넷 (Internet of Things IoT) 이주요이슈가되고있다. 기존인간중심의통신패러다임에서사물이통신의주체로참여하는 IoT에대한시대가도래될것으로전망되는지금전세계적으로다양한오픈플랫폼을통하여 IoT 서비스들을제공하기위한노력이계속되고있다. 본문서에서는오픈플랫폼중 eclipse에서구현한 OM2M 오픈소스를리눅스환경에서설치및실행한방법에대하여설명하도록하겠다. 목 차 1. 서론... 3 2. OM2M... 3 2.1 OM2M DOWNLOAD... 4 2.1.1 Get OM2M binaries... 4 2.1.2 Build OM2M from source code... 4 2.2 OM2M CONFIGURATION... 6 2.2.1 NSCL configure... 6 2.2.2 GSCL configure... 6 2.3 OM2M STARTING... 7 2.3.1 NSCL startup... 7 2.3.2 GSCL startup... 8 2.4 OM2M WEB INTERFACE... 10 2.4.1 Start the sample plugin... 10 2.4.2 Application resources... 11 2.4.3 Container resources... 12 2.4.4 Remote control lamps... 12 2.4.5 Groups resources... 13 2.4.6 Remote control group of lamps... 13 1
2.5 REST API... 14 2.5.1 Install a rest client... 14 2.5.2 Retrieve a resource... 15 2.5.3 Discover resources based on their search strings... 15 2.5.4 Create a MY_SENSOR application... 16 2.5.5 Create a DESCRIPTOR container... 17 2.5.6 Create a description contentinstance... 18 2.5.7 Create a DATA container... 19 2.5.8 Create a data contentinstance... 20 2.5.9 Subscribe to MY_SENSOR data... 21 3. 결론... 22 참고문헌... 22 2
1. 서론 최근많은곳에서사물인터넷에대한이야기를들을수있다. 기존의인간중심의통신패러다임에서사물이통신의주체가되는사물인터넷에대한관심이많아지면서이에대한전세계적인투자및연구가활발하게진행되고있다. Google의안경및삼성의갤럭시기어등현재시판되고있는제품도있으며, 국내에서도 SK Telecom, KT, LG U+ 등의국내통신사들도사물인터넷에대한투자를늘리고있다. 본문서에서는사물인터넷서비스를제공하기위해개발중인많은 Open Source Platform 중에서오픈소스기반의통합개발환경인이클립스 (Eclipse) 로많이알려진이클립스재단에서개발중인 OM2M을 Ubuntu 14.04 기반의리눅스환경에서설치하고실행하는방법에대하여설명하겠다. 2. OM2M LAAS-CNRS에의해시작된 OM2M 프로젝트는 Eclipse Technology Project에서제안된 Open Source Project이다. OM2M은 M2M (Machine to Machine) 리소스를생성하고관리할수있는 RESTful API를제공하며, Plugin을통해확장하게만들어진 OSGi (Open Service Gateway initiative) layer의상부에서실행되는모듈식구조를제안한다. 또한 HTTP나 CoAP과같은 multiple protocol binding을지원한다. OM2M 아키텍처는 ETSI M2M 표준을따른다. OM2M 은그림 1과같은요소들로구성되어있다. 자세한내용은 OM2M project 웹사이트에서확인할수있다. Figure 1 OM2M architecture 3
2.1 OM2M Download OM2M 플랫폼을실행하기위해서우리는 eclipse.org/om2m 사이트에접속하여 OM2M 파일을다운받을수있다. 해당사이트에서 OM2M 플랫폼을다운받고실행하기위해서두가지방법을설명하고있다. 바로 OM2M binary 파일을사용하여실행하는방법과 source code를빌드하여사용하는방법이다. 2.1.1 Get OM2M binaries 첫번째방법으로, OM2M binary ( 웹사이트에서의 OM2M.rar) 를다운받아서실행하는방법이다. 해당파일을실행하기위해서우선해당파일을다운받고, 압축을해제한다. 그후 NSCL과 GSCL products를찾을수있을것이다. NSCL과 GSCL을실행하기위해서 windows에서는 start.bat, linux에서는 start.sh을실행하면된다. OM2M을실행하기위해서는 JAVA 1.7의설치가필요하다. JAVA 1.7 설치는내용을쉽게검색할수있으므로, 생략하도록하겠다. 2.1.2 Build OM2M from source code 두번째방식으로는, source 코드로 OM2M을빌드하여사용할수있다. OM2M 웹사이트에서제공하는 source code의 repository는다음과같다. http://git.eclipse.org/gitroot/om2m/org.eclipse.om2m.git. OM2M source code를사용하여빌드하기위해서우선 OM2M에서제공하는 git을활용하여 repository에저장된 source code를가져온다. ( 다음의 command를입력하여진행 ) git clone http://git.eclipse.org/gitroot/om2m/org.eclipse.om2m.git 그다음과정으로는 library들을추가해야한다. OM2M 웹사이트에서 om2m-libs.rar파일을다운받은후다음과같은과정을수행한다. db4o-core-java5-8.1-snapshot.jar library 를 org.eclipse.om2m.core\libs 폴더 에복사한다. obix.jar library 파일은 org.eclipse.om2m.commons\libs 폴더에복사한다. xsd 폴더를 org.eclipse.om2m.commons\src\main\resources 폴더에복사한다. 마지막으로 OM2M을빌드하기위한 Apache Maven 3를설치한다. Maven 3의설치과정은다음과같다. 1. Remove old version sudo apt-get remove maven2 4
2. Add following lines to sources.list sudo add-apt-repository deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main 3. Update Repository and Install sudo apt-get update sudo apt-get install maven3 4. Add Symbolic Link sudo ln s /usr/share/maven3/bin/mvn /usr/bin/mvn 5. Remove PPA from sources.list Remove Repository via Software Center and Update Figure 2. Software & Updates ppa sudo apt-get update Maven3의설치가끝나면 org.eclipse.om2m 폴더로이동한다. 그리고다음의 command를실행하여 OM2M을빌드한다. mvn clean install 빌드가성공적으로실행되었을시, 다음과같은 products 가생성됐을것이다. om2m/org.eclipse.om2m/org.eclipse.om2m.site.nscl/target/products/nscl/<os>/<ws>/<arch> 폴더안에 NSCL product가생성되었을것이다. om2m/org.eclipse.om2m/org.eclipse.om2m.site.nscl/target/products/gscl/<os>/<ws>/<arch> 폴더안에 GSCL product가생성되었을것이다. 5
2.2 OM2M Configuration 2.2.1 NSCL configure NSCL product가있는폴더로이동하여 configuration/config.ini 파일을수정하여 NSCL에대한환경설정을한다. parameter에대한정보는다음과같다. (OM2M 웹페이지에서확인할수있다.) Figure 3. NSCL configuration 2.2.2 GSCL configure GSCL product가있는폴더로이동하여 configuration/config.ini 파일을수정하여 NSCL에대한환경설정을한다. parameter에대한정보는다음과같다. Figure 4. GSCL configuration GSCL configuration 파일은 GSCL 이인증되어야하는 remote NSCL 을명시하기위한 4 개의 추가적인 parameter 를포함하고있다. 해당 parameter 의정보는다음과같다. Figure 5. Additional parameters in GSCL 환경설정을통해서다른 machine 에서 GSCL 과 NSCL 을동작시킬수있으며, 또한다른 identifier 를사용하여여러개의 GSCL 을설정할수있다. 6
2.3 OM2M Starting 2.3.1 NSCL startup 앞서언급했듯이, OM2M을실행하기위해서는 Java 1.7이필요하다. NSCL을실행하기위해서 NSCL product가있는폴더로이동한다. 그후다음과같이 JVM을호출하여 NSCL을바로시 작할수있다. java jar ea Declipse.ignoreApp=true Dosgi.clean=true Ddebug=true plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar console noexit Figure 6. NSCL NSCL 이실행되면, console 에서 OSGi 를볼수있을것이다. ss 를입력하면모든설치된번들 에대한상태를보여주게된다. Exit 를입력하면 NSCL 이종료된다. Figure 7. NSCL OSGi console 7
또한그림 8 와같이 127.0.0.1:8080 으로접속하여 NSCL web interface 에연결할수있다. Web interface 에는 User name 과 password 에는 admin 을입력하여접속할수있다. Figure 8. NSCL web interface: authentication 정상적인인증을거친후에그림 9 와같이 NSCL web interface 에접속할수있다. Web interface 에서는 NSCL Resource Tree 를확인할수있다. Figure 9. NSCL web interface: NSCL sclbase resource 2.3.2 GSCL startup GSCL 역시 NSCL 처럼 GSCL product 가있는폴더로이동하여 NSCL 과같은 command 를사 용하여실행한다. GSCL 을실행하면그림 10 과같은화면을볼수있다. Figure 10. GSCL 8
GSCL 역시 NSCL과마찬가지로 ss 를입력하여설치된번들의상태를볼수있다. GSCL은 gateway configuration 파일에명시된 remote NSCL과자동적으로인증을하게된다. 만약 NSCL이실행되지않은상태라면, GSCL은계속인증요청메시지를보내게된다 ( 요청메시지를각 10초의주기를갖는다 ). 성공적으로인증과정을거친후, gscl resource가 nscl/scls의 collection에추가되게되고, 또한 nscl recource가 gscl/scls의 collection에추가되게된다. NSCL resource를이용하여 GSCL resource에접속하기위해서는 NSCL web interface의 nscl/scls/gsci uri로접속할수있다 ( 그림 11 참조 ). Figure 11. NSCL web interface: remote gscl resource 그림 12 는 GSCL 의 web interface 를보여준다. 그림 13 에서는 GSCL 의 resource tree 를확인 할수있다. Figure 12.NSCL web interface: gscl sclbase resource 9
2.4 OM2M Web Interface 2.4.1 Start the sample plugin GSCL OSGi console에서 ss 를입력하여그림 13과같이 plugin들을확인할수있다. 그림 13 에서 org.eclipse.om2m.ipu.sample plugin (id = 26 in figure 13) 을확인할수있다. Figure 13. OSGi consolem: Start the lamps sample IPU 그림 14 와같이 start 26 command 를실행하여 sample plugin 을실행한다. 그림 15 는 lamps sample 을보여준다. Figure 14. Sample Plugin Execution 10
Figure 15. GUI: Lamps Sample Sample Plugin에서 Switch 버튼을클릭하여전구의불을키고끌수있다. 2.4.2 Application resources NSCL web interface의 GSCL resource tree의 applications resource를클릭하면그림 16과같이등록된 application을확인할수있다. LAMP_0, LAMP_1은 lamp 0, 1을컨트롤할수있는 application resource이다. LAMP_ALL은 lamp 0, 1을동시에컨트롤할수있는 application resource이다. Figure 16. Web interface: The applications resource 11
2.4.3 Container resources LAMP_0 을클릭하고 container 를클릭하면그림 17 과같은화면을볼수있다. DESCRIPTOR 는 lamp description 을저장한다. Data 는 lamp 의 data 를저장한다. Figure 17. Web interface: The LAMP_0 description resource getstate 를클릭하면가장최근 lamp 상태를 GSCL database 에서읽어온다. getstate(direct) 버튼은현재 lamp 의상태를직접읽어온다. 또한 switchon, switchoff, toggle 버튼클릭을통 해서 lamp 의불을키고끌수있다. 2.4.4 Remote control lamps GUI 또는 LSCL 의 web interface 를통해서그림 18 과같이 lamp 의상태를바꿀수있다. Figure 18. GUI: LAMP_0 switched ON 12
2.4.5 Groups resources Group broadcast 동작을확인하기위해서 gscl base resource의 groups resource를확인할수있다. ON_ALL group은모든 lamp들을 ON으로전환하기위한요청을처리한다. OFF_ALL group은모든 lamp들을 OFF로전환하는요청을처리한다. 그림 17은 groups의 ON_ALL resource를클릭했을때화면을보여준다. 그리고 LAMP_0, LAMP_1을 ON 시키기위한 member attribute의 request URI value를확인할수있다. Figure 19. Web interface: The ON_ALL group resource 2.4.6 Remote control group of lamps 만약 memberscontent resource에 request를보내면, GSCL은모든 group member의 lamp 들에 broadcast를보낸다. 그림 20의 switchallon, switchalloff를클릭하면 LAMP_0, LAMP_1을동시에 ON/OFF 할수있다. 또한그림 21처럼 java GUI의 Switch ALL을클릭하여 group control을할수있다. 13
Figure 20. Web interface: The LAMP_ALL description resource Figure 21. GUI: All lamps are switched ON 2.5 REST API 2.5.1 Install a rest client 이번 2.5 장에서는 REST client 를활용하여 HTTP request (GET, POST, UPDATE, DELETE) 를 OM2M platform 으로보내는작업이필요하다. 따라서 Chrome 에서제공하는 Client REST Simple 이라는 app 을사용하겠다. Chrome 의 Client REST Simple 은다음 URL 에접속하여설 치할수있다. https://chrome.google.com/webstore/detail/simple-restclient/fhjcajmcbmldlhcimfajhfbgofnpcjmb 14
OM2M은인증을위해서 username/password를반드시 base64로 encode하여 Basic Authorization 을 header에적어주어야한다. www.base64encode.org사이트를활용하여 base64 암호화를할수있다. (ex. Base64(admin:admin) = YWRtaW46YWRtaW4=) 그림 26은 chrome에서실행한 Simple REST Client를보여준다. Figure 22. Simple REST Client 2.5.2 Retrieve a resource 그림 23과같이 HTTP request를활용하여 Resource를검색할수있다. 그리고그에대한응답은그림 24에서볼수있다. Figure 23. Retrieve a resource: HTTP request Figure 24.Retrieve a resource: HTTP response 2.5.3 Discover resources based on their search strings Search string을활용한 resource discovery를활용하여사용할수있는 resource를검색할수있다. 15
Figure 25. Discover resource based on search strings 2.5.4 Create a MY_SENSOR application 그림 26 과같이 HTTP 요청메시지를사용하여 gateway 의 application 에 MY_SENSOR parameter 를생성할수있다. 그림 27 에서생성된 MY_SENSOR 어플리케이션을 Web interface 를통해서확인할수있다. Figure 26. Create a MY_SENSOR application 16
Figure 27. Create a MY_SENSOR: Web interface 2.5.5 Create a DESCRIPTOR container 그림 28 과같이 HTTP 요청메시지를보내서 DESCRIPTOR container resource parameter 를 MY_SENSOR application 밑에생성할수있다. Figure 28. Create a DESCRIPTOR container 17
그림 29 와같이 web interface 를통해서결과를확인할수있다. Figure 29. Create a DESCRIPTOR: Web interface 2.5.6 Create a description contentinstance 그림 30과같이 HTTP 요청메시지를보내서 DESCRIPTOR container 밑에 description content instance resource parameter를생성할수있다. Figure 30. Create a description contentinstance 18
그림 31 과같이생성된 contentinstance 를 Web interface 를통해서확인할수있다. Figure 31. Create a descriptor contentinstance: Web interface 2.5.7 Create a DATA container 그림 32 와같이 HTTP 요청메시지를보내서 MY_SENSOR application 밑에 DATA container resource parameter 를생성할수있다. Figure 32. Create a DATA container 19
역시그림 33 과같이 web interface 를통해서생성된 DATA container 를확인할수있다. Figure 33. Create a DATA container: Web interface 2.5.8 Create a data contentinstance 그림 34와같이 HTTP 요청메시지를보내서 DATA application 밑에 data content instance resource parameter를생성할수있다. 그림 35와같이생성된 content instance를 web interface에서확인할수있다. 또한 getvalue를클릭하여생성된 sensor data를확인할수있다. Figure 34. Create a data contentinstance 20
Figure 35. Create a data contentinstance and getvalue 2.5.9 Subscribe to MY_SENSOR data OM2M project 웹사이트에서제공하는 Monitor server sample을다운받아서사용을한다. 해당파일의압축을풀고다음의 command를사용하여실행한다. java jar monitor.jar Monitor의 listening port 및 context를변경하기위해서는 config.properties 를확인한다. Default port = 1400, context = /monitor이다. 그림 36은 monitor를실행한화면이다. Figure 36. monitor 21
그림 37 과같이 HTTP request 메시지를보내서 subscription resource parameter 를 MY_SENSOR application 밑에생성할수있다. Figure 37. Create a subscription resource 또한생성된 subscription resource 를 web interface 에서확인할수있다. 3. 결론 Figure 38. Create a subscription resource: Web interface 지금까지본고에서는 Eclipse의 Open Source Platform인 OM2M을 Ubuntu 14.04기반의리눅스환경에서설치하고예제를실행하는방법에대하여살펴보았다. OM2M은 M2M 리소스를생성하고관리할수있는 RESTful API를제공하며, 시스템인증, 리소스검색, 어플리케이션등록, 컨테이너 (Container) 관리, 동기및비동기통신, 접근권한인증및그룹관리등다양한서비스를제공하고있다. 또한 HTTP 및 CoAP 등다양한프로토콜바인딩을지원하고 Zigbee나 Phidgets 등의장치와원할한통신을제공하므로써, 앞으로진행될사물인터넷중심의시대에제공될다양한 IoT 서비스들을개발에활용될것으로생각된다. 참고문헌 [1] OM2M project, http://eclipse.org/om2m/ 22