[MQTT] #Mosquitto-MQTT library 사용하기 (1) README 따라하기

Mosquitto-PHP :

현재 회사에서 내가 해야하는 것은, 웹에서 스위치를 제어 할 수 있도록 mqtt와 웹 사이의 통신을 연결하는 것이다. 흔히 사용하는 기술이 아니다 보니 참고할 수 있는 자료도 라이브러리도 적었다. 그 중(사실 둘중에 하나 였지만)에서도 가장 최근의 커밋 기록이 있는 Mosquitto-PHP를 이용해서 개발을 하려고 한다. 그런데 참 개발자라고 하기에 부끄럽다만 ubuntu건 linux건 검은 바탕에 흰글씨가 익숙하지 않아서 꽤 오래 걸렸다… 명령어 찾아보랴, 무슨 의미인지 알아내랴, 에러가 무슨 뜻인지 검색하랴. 다시 헤매지 않도록 기록해 두려고 한다.

mosquitto_php_installation.png

0. libmosquitto-dev 설치, PECL[php 확장 모듈] 설치, Mosquitto-alpha 설치 완료.

1. phpize
– 다음과 같은 에러 발생. 즉, phpize는 아무데서나 실행할 수 없다.
mosquitto_php_0
– phpize는 config.m4가 있는 directory에서 실행해야 한다 : config.m4 파일 위치를 찾아서 이동한 후에 실행…하려는 데 다음과 같은 문제가 또 발생한다. Permission denied…
mosquitto_php_1
-그래서 권한을 확인해 보았다. “root”
mosquitto_php_2
-권한을 “root”에서 접속자와 동일한 “ubuntu”로 변경했고 phpize를 실행했다. 또 다른 문제가 생겼다. mkdir: cannot create directory ‘build’ : Permission denied …쭉쭉쭉 또 다른 접근 거부 …
mosquitto_php_3
– 사실, build라는 directory를 만들고 한번 더 phpize를 실행하는 삽질을 한 후에 “ubuntu”가 “root”가 되면 될 것 같다는 생각을 했다. whoami를 통해 지금 나는 “ubuntu”로 접속해 있다는 사실을 다시한 번 확인. sudo su – 명령어를 통해서 root로 바뀐 것을 확인 할 수 있다.
mosquitto_php_4
-다시 phpize 실행. 드디어 성공!
mosquitto_php_5

2../configure –with-mosquitto=/path/to/libmosquitto [참고 ./configure –help를 하면 여러가지 사용법을 볼 수 있다.] 별 문제없이 작동!
mosquitto_php_6

3. make 별 문제없이 작동!
mosquitto_php_7

4. make install. 별 문제없이 작동!
mosquitto_php_8

5. make test … 4개의 테스트에서 실패한다. 이유를 모르겠다…ㅠ 이유를 찾는 중이다…

 

Advertisements

[PuTTY] (2) ubuntu에 접속하기

1.putty.exe 를 다운로드한다.

2.putty.exe 실행 후 셋팅.

  • Host Name(or IP address) :
    AWS일 경우,
    1. Public DNS
    2.Public IP
    3. instance 환경에 따라 username@Public DNS
    (예)ubuntu일 경우, ubuntu@Public DNS
  • Port값 :22 확인
  • 자주 사용하는 session일 경우에 Saved Sessions에 session명을 입력한 후에 저장하면, 접속할 때 열기만 하면 된다.
    putty_1.png

 

  • Connection > SSH > Auth 에서 (.ppk)를 지정한다. (.ppk 파일을 생성하는 방법은 이전 포스팅을 참고하기 바란다.)

putty_2

3. 별다른 오류가 없다면 문제없이 접속에 성공한다. 다음에 첨부하는 이미지는 접속에 성공했을 때의 화면을 캡쳐한 것이다.putty_3

4. 정리
AWS에 새로운 Instance를 생성하면서 ubuntu A(pache2)P(hp)M(ySqul) 설치를 위해서 PuTTY를 사용하게 되었다. 포스팅 내용은 새로운 Instance를 생성한 후에 PuTTY로 접속하는 과정을 정리한 것이다. 사실은 Time Out 에러로 30분 정도 헤맨듯 하다ㅜㅜ. AWS 메뉴얼을 참고해서 해결했다. 다음 기회에 정리해서 포스팅 해야 겠다. 다음 포스팅은 PuTTY로 APM 셋팅하는 과정에 대해서 쓰도록 하겠다.

[PuTTY] (1) #puTTy Key Generator

서버 환경 셋팅을 위해서 ubuntu/linux환경으로 접속해야 하는 경우가 있다. window를 사용하는 경우에 PuTTY를 사용하면 접속이 가능하다! 그러나, 문제는 .pem 은 인식하는 파일 포맷이 아니므로 puTTy Key Generator로 인식 가능한 파일 포맷(.ppk)로 변환해주어야 한다. 오늘은 그 과정을 간단히 포스팅 하겠다.

1.PuTTY Key Generator 다운로드

2. 실행 > File > Load private keyputty_gen_1

3. 변환할 (.pem) 파일 선택 후 열기

putty_gen_2.png

4. Save private key를 눌러 원하는 경로에 원하는 이름으로 저장한다.

  • Key comment : 예)AWS-WEB-BS
  • Key passphrase : 암호(?) Key passphrase를 설정하면 접속할 때마다 입력해야하는 번거로움이 생겨서 공백으로 비워두기도 한다
    putty_gen_3.png

5. 다음에는 생성된 (.ppk) 파일로 PuTTY에 접속하는 것을 포스팅하겠다.

[MQTT] #mosquitto (3) subscribe&publish

0. mosquitto –help제목 없음.png

1. [PUBLISH] mosquitto_pub

  • 발행(publish)을 할 때, topic과 message는 반드시 필요하다. 둘 중에 하나라도 없을 경우 발행(publish)되지 않는다.

제목 없음

2. [SUBSCRIBE] mosquitto_sub

  • 구독(subscribe)을 할 때, topic은 반드시 필요하다.

제목 없음

3. 간단한 TEST

  • 발행(publish) :
    mosquitto_pub 
    -h [주소]
    -t [topic명]
    -m [message 내용]
  • 구독(subscribe):
    mosquitto_sub
    -h [주소-발행할 떄와 동일한 주소]
    -t [구독할 topic명]

제목 없음

[MQTT] (2) how to install mosquitto in windows

  1. http://mosquitto.org/download/ 접속 후 mosquitto-1.4.9-install-win32.exe 다운로드1
  2. mosquitto-1.4.9-install-win32.exe 실행 및 설치mosquitto_setup.png
    – OpenSSL 다운로드 > 설치 > 디렉토리 내의 dll들을 mosquitto directory로 이동
    – pthreadVC2.dll 다운로드 후 mosquitto directory로 이동2.png
  3. 반드시 mosquitto directory에서 mosquitto를 실행해야한다.3

[MQTT] (1) get started

  • What Is MQTT ?

MQ Telemetry Transport

Telemetry [원격측정 : 송신기를 이용하여 측정량을 측정 대상으로부터 멀리 떨어진 곳에 보내어 처리하고 기록하는 일.]
Transport[수송]

Design Principles

  1. Publish/subscribe messaging (useful for most sensor applications) : 다수의 클라이언트 연결에 적합한 Publish/Subscribe 네트워크 사용
  2. Minimize the on-the-wire footprint : 프로토콜이 차지하는 모든 면의 리소스 점유를 최소화
  3. Expect and cater for frequent network disruption – built for LOW BANDWIDTH, HIGH LATENCY, UNRELIABLE, HIGH COST networks : 느리고 품질이 낮은 네트워크의 장애와 단절에 대비
  4. Expect that client applications may have very limited processing resources available. : 클라이언트 어플리케이션 동작에 자원 활용이 극히 제한적임을 고려
  5. Provide traditional messaging qualities of service where the environment allows. : 신뢰성 있는 메세징을 위해서 QoS 옵션을 제공
  6. Publish the protocol royalty-free, for ease of adaption by device vendors and third-party software developers. : 개방형 표준 메세징 프로토콜을 지향하며 제3자 기기 제조업체와 소프트웨어 개발업체의 용이한 도입, 적용을 유도

[출처]Introducing MQTT

애초에 MQTT는 발행/구독(Publish/Subscribe) 방식의 메세지 큐(message queue[큐:자료구조:First In First Out])로, 원격 검침(telemetry)영역에 사용하기 위해 개발되었다. 원격 검침기의 대부분이 소형이며 통신 대역폭과 전원이 한정적인 환경에서 동작하므로, 이는 배터리 용량이 제한적이고 통신 품질을 일정 수준으로 유지하기 어렵다는 점에서 스마트폰 환경과 매우 유사하다. 이러한 제한적인 환경을 고려하여 디자인 되었기 때문에 MQTT 프로토콜은 최적의 프로토콜로 주목받고 있다.

  • MQTT 특징
  1. Publish/Subscribe :
    [기본원칙 : 메세지를 발행하고, 관심 있는 주제를 구독한다]
    Publisher와 Subscriber 모두 Broker에 대한 클라이언트로 작동하며, Publisher는 토픽을 발행하기 위한 목적으로, Subscriber는 토픽을 구독하기 위한 목적으로 Broker 서버에 연결한다. 하나 이상의 Pub과 Sub가 Broker에 연결해서 토픽을 발행하거나 구독할 수 있다. 또한 다수의 클라이언트가 하나의 주제를 구독할 수도 있다.
  2. 토픽 : Pub과 Sub이 작동하는 기준이다. 토픽은 (/)를 사용해서 계층적으로 구성할 수 있기 때문에 다수의 센서 기기들을 효율적으로 관리할 수 있다.
  3. 메세지 버스 : MQTT는 메세지 버스 시스템이다. MQTT Broker가 메세지 버스를 만들고, 여기에 메세지를 흘려보내면, 버스에 붙은 어플리케이션들이 메세지를 읽어가는 방식이다. 메세지 버스에는 다양한 주제의 메세지들이 흐를 수 있는데, 메세지를 구분하기 위해서 “Topic”을 이름으로 하는 메세지 채널을 만든다.
  4. Quality-Of-Service : MQTT에서 메세지의 신뢰성을 위해서 제공하는데, 서비스의 종류에 따라서 적당한 QoS 레벨을 선택한다.

0 : 메세지가 1번만 전달, 전달여부 확인 X – 유실 가능성
1 : 메세지가 최소 1번만 전달(1번 이상 전달 되겠다) – 중복 전달 가능성
2 : 메세지가 1번만 전달, 유일하게 핸드셰이킹(?) 과정 추적- 높은 품질을 보장하지만 성능의 희생

발행자와 구독자 모두 QoS를 지정할 수 있지만 발행자가 지정한 최대 QoS 수준이 우선이다. 예를 들어 발행자의 QoS 수준을 0 이라고 지정했을 떄, 구독자의 QoS 수준을 2로 지정했더라도, 브로커에 의해 무시되고 ‘QoS 0’ 수준의 서비스를 받게 된다.

  • MQTT Broker : MQTT 서버라고 하지 않고 중개인이라고 하는 이유는 MQTT가 Pub(발행인)과 Sub(구독자)가 메세지를 주고 받을 수 있도록 다리를 놔주는 역할만하기 때문이다. 다양한 종류의 Broker들이 있다.

Broker(중개인, 서버X)
-mosquitto(C기반, 클리스터링(?)이 안됨)
-HiveMQ(클리스터링은 됨, 저가 상용)
-Rabbit MQ
-IBM MQ
-Vertx

  • 클라이언트
    이클립스 Paho : The Paho JavaScript Client is a browser-based libaray that uses WebSockets to connect to an MQTT server. A simple utility to demonstrate it tis included, and available online.
    Source : https://github.com/eclipse/paho.mqtt.javascript
  • IoT Connectivity를 위한 MQTT
    • Local connectivity (표준이 존재X)
      퀼컴,LG – Allseen
      얼라이언스 – Alljoyn
      인텔,삼성 – Open Interconnect Consortium
      애플 – Homekit
    • Remote connectivity : IoT기기들과 유저 모바일 기기 그리고 인터넷 서비스들은 IoT Internet Infra에 연결되고, 이때 MQTT를 사용할 수 있게 된다.
    • 인터넷 어플리케이션과의 연동
  1. 유저 모바일 어플리케이션 : 채널 분리, 메세지는 HTTP 기반으로 전송하고, 응답은 MQTT client로 받는다. 네이티브 혹은 하이브리드 앱에서 사용할 수 있다. (Ex. 페이스북 메신저)
  2. 웹 브라우저 : HTTP로 전송하는 건 동일하다. 응답은 웹 소켓을 이용한다. 많은 MQTT Broker들이 웹 소켓 인터페이스를 제공한다.
  3. 소형 디바이스 : MQTT 단일 인터페이스로 송/수신
  4. 웹 어플리케이션 : 그림에는 없지만, 인터넷 서비스와 Server-to-Server 방식으로 연결할 수 있다. 이 경우 양측이 Open API를 제공하고, 서로 호출하는 방식을 사용한다.

Continue reading