Showing posts with label iot. Show all posts
Showing posts with label iot. Show all posts

Wednesday, September 4, 2019

MQTT broker 서비스를 이사가다.

장치간의 메시징(통신)을 위해 MQTT - Message Queuing Telemetry Transport,  ISO standard (ISO/IEC PRF 20922) - 프로토콜을 사용하고 있고, 다음 그림과 같이 MQTT broker(or server)가 연결된 디바이스들(subscriber)의 mqtt에 기반한 메시징을 중계해준다.


Image from www.mathworks.com


알려진대로 매우 가벼운 프로토콜이기 때문에 IoT 디바이스들에 적용되기에 적합하다.

문제는 mqtt broker인데 이는 서버이므로 PC든 라즈베리 파이든 NAS든 broker를 구동할 서버가 준비되어야 한다. 여기에는 두가지 문제가 있는데, 하나는 간단한 응용을 위해 항시 켜져있는 서버를 운용해야 한다는 점과, 서버가 내부 IP 영역에 존재하면 그 외부의 장치들은 접근하기가 어렵다는 것이다. 물론, 전자의 경우 NAS같이 원래 항상 운용되는 장비가 있다면 거기에 mqtt broker를 설치/운용할 수 있으며, 후자의 경우 port forwarding 을 사용하여 내/외부 모두 접근이 가능한 서버를 구축할 수도 있을 것이다.
그런데 간단한 구축을 위해 너무 귀찮잖아!

이런 경우를 위해 유/무료로 mqtt broker 운용해주는 site들이 여럿 있다.

나같은 경우 CloudMQTT에서 제공하는 무료 서비스를 사용하고 있었다.
무료의 경우 생성할 수 있는 채널 수 등이 제한되어 있었는데, 그래도 충분히 활용할 만 했었다. 그런데, 오랜만에 새로운 채널을 생성하려고 했는데 이게 웬걸. 무료 정책이 바뀌어서 기존에 만든것은 유지하지만 새롭게 만들거나 변경하는것이 불가능했다. 뭔가 하려면 기존것을 상당부분 삭제해야 하는 상황이다!

[CloudMQTT 무료버전]

Cute Cat

  • 5 users/acl rules/connections
  • 10 Kbit/s

CloudMQTT 무료 서비스는 사용자수던, acl rule(채널)수던, 접속자 수던 5개로 제한되고 있고, 통신속도는 10 Kbit/s !  이거 너무하지 않은가?


그래서 다른 대안을 찾기 시작했고, broker로 유명한 mosquitto를 제공하는 재단에서 mqtt 테스트 서버를 무료로 제공하기에 이를 사용하기로 하였다.
물론, 다른 무료 서버들도 많이 있다. 선택은 사용자가 적절히!

[Public MQTT Brokers]
https://mntolia.com/10-free-public-private-mqtt-brokers-for-testing-prototyping/



테스트 서버의 접속 url은 http://test.mosquitto.org/ 이다.

접속 port에 따라서 서비스 형태가 약간 다르다.
  • 1883 : MQTT, unencrypted
  • 8883 : MQTT, encrypted
  • 8884 : MQTT, encrypted, client certificate required
  • 8080 : MQTT over WebSockets, unencrypted
  • 8081 : MQTT over WebSockets, encrypted


IoT의 소형장치들은 대부분 보안에 취약하다. 이는 미래에 큰 화두가 될 것이다.
나는 테스트를 위한 (보안이 필요 없는) 정보를 주고받는 정도이므로 1883 포트를 사용한다.

무료가 항상 그렇듯 본 서비스도 donation을 받는다. 한달에 약 $70가 운용비용이라고 하는데, 설마 이정도도 ECLIPSE 재단에서 지불을 못할까?

테스트 해보니 속도도 빠르고 별 문제가 없어서, 앞으로는 본 서비스를 활용할 계획이다.



Wednesday, June 6, 2018

IoT messaging service와의 연동

1. Blynk

전에는 장치와 휴대폰을 연계하기위해 nodemcu로 서버를 만들고 웹에서 접속하여 장치를 컨트롤하거나 장치의 메세지를 휴대폰에 전달하기위해 안드로이드에서 푸쉬서비스를 구현하려 했었다. 그런데 이게 다 필요없다.

blynk는 무엇보다 단순하다. 장치를 제어하기위해 필요한 소프트웨어 측면의 노력이 현저히 줄어든다. 간단한 경우에는 추가적인 프로그래밍도 필요 없다.    그런데 그렇게 다 만들어져 있어서 커스터마이즈가 어렵다. 안될지도 모른다.내가 아직 모르는 것인가?

blynk테스트는 pc에 서비스를 연동하여 테스트하였다. 즉, pc 인터넷을 활용한 것이다.  다음에는 esp8266을 연동해보았다. 그러나 이건 실패다.  컴파일 후 다운로드 시 esp8266 sync 오류가 발생한다. → 설정에 문제가 있었다. 지금은 잘 된다.ㅋ

2. Pushover

그 전까지는 ifttt를 응용하여 푸시서비스를 구현할 수 있다고만 알다가, 새다리님 블로그에서 pushover, pushbullet, mqtt를 알게 되었다. 그분의 호기심은 정말 대단한것 같다.  아무튼 푸쉬서비스를 직접 개발하는것을 매우 귀찮게 여기던 중(그런데 난 소프트웨어 개발자임 ㅋ)  이러한 서비스를 접하니 다시 iot를 해보고자 의욕이 솟는다.

pushover는 유료이다. 약 5천원에 퍼머넌트 라이선스를 제공하므로 비용 부담은 사실상 없다.  테스트 결과는 빠르다.  잘 동작한다.  pushover는 api서버가 ssl을 사용한다.  따라서 esp8266 01버전만 가지고 있는 나로서는 nodemcu에서 ssl을 지원하는 https를 사용할 수가 없었다.  nodemcu를 커스텀빌드해서 https만이라도 사용해보려고 하였는데 역시 esp8266 01은 폭주한다.  누군가 01버전에서 https를 성공하였다면 그 성공기를 듣고 싶다.

다행이다.  pushover는 그냥 http도 지원하더라. 요즘은 보안이 중요시되는 시대라 나중에 nodemcu에서 https가 지원되면 그때 다시 테스트할 예정이다.

3. Pushbullet

얘는 단순히 푸쉬메세징 서비스를 넘어서는 것 같다. 노트 프로그램은 아니지난 에버노트처럼 어디서든 사용 가능하다.  윈도우를 위한 앱도 있고 모바일용 앱도 있다.  그리고 그냥 웹상에서도 된다. 푸쉬메세지에 등록되어 있는 기기들은 모두 연동된다. 꼭 채팅서비스와 같다고 할까?  급하게 파일을 공유할 필요가 있을때 유용했다.  단, 파일을 한번에 하나씩만 선택가능하더라.

중요한건 어쨋든 푸쉬알람서비스인데 얘는 api서버가 https만 지원한다.   그래서 나는 아직 esp8266을 통한 테스트를 못해봤다.  curl이나 javascript를 통한 테스트에서는 훌륭하게 잘 동작하였다.  아, pushbullet은 무료로 사용할 수 있다.

4. MQTT

위에 훌륭한 서비스들이 있지만 표준은 아니다.  mqtt(message queue telemetry transport)는 가벼운 양방향 메세징 프로토콜이다. 너무 가벼워 IoT에도 버겁지 않다.  페북도 메세징 서비스를 위해 mqtt를 사용한다더라.  표준프로토콜이므로 향후 발전할 가능성이 무궁무진하다.  얘는 양방향메세징이 기본이므로 메세지를 받는것만이 아니라 보낼 수 있어 기기에 대한 제어를 가능케 한다.

mqtt는 서비스를 운용할 서버가 필요하다. 내가 가지고 있는 synology 215j에서 mosquitto라는 mqtt 앱을 설치할 수가 있다는 것을 알았다. 어짜피 nas는 일년내내 켜놓고 있으므로 mqtt서버로서 안성마춤이었다. 그런데 설치만되고 구동이 안된다. nas에 shell로 접속하여 mqtt를 설정하고 실행해보니 사용자 id관련 오류가 난다. 특별히 설정을 안해도 동작해야하는 상황이라 난감하다. 좀더 조사를 해봐야겠는데 시간은 없다. 인터넷에서도 관련이슈를 어렵지않게 찾을 수 있었으나 뾰족한 해결책은 보이지 않았다.

그런데 새다리님 블로그에서 cloudmqtt.com 서비스를 알게 되었다. 무료로 사용할 경우 약간의 제약은 있지만 이 상황에서는 최선의 선택일것이다.  새다리님덕에 요즘 다시 iot자작이 재미있어진다.

차후 테스트가 더 진행되면 업데이트 하겠다.