cloud - July 30, 2020 · 4 mins read

IBM Watson IoT Platform 디바이스 파이썬 코딩 예제 - 2020.07.30

IBM Watson IoT Platform 디바이스 파이썬 코딩 예제 - 2020.07.30

파이썬 코딩으로 IBM Watson IoT Platform 디바이스 역할하도록 하여 서비스를 이용해 보자. (언제쯤 실제 디바이스가 등장할 수 있으려나 ^^;)

참고로 앞서, MQTT.fx 라는 툴을 이용하여 MQTT 로 연결해서 실제 디바이스 없이 데이터를 주고 받는 동작을 실험해 보았다.

한걸음만 살짝 더 나가고 싶어서 잠깐 포스팅 추가하는 것이다. 사실 개발자용 디바이스라고 하면, 일단 라즈베리파이 보드나 아두이노 보드를 많이 떠올릴 것이다. 동작을 테스트할 때 디바이스 쪽을 개발하는 측면에서 보면 실제 보드가 꼭 필요하지만, 클라우드 쪽의 서비스를 개발하는 분들은 가상의 에뮬레이터나 데이터 생성기 정도면 충분하지 않을 까 싶다. (사실 라즈베리파이 보드는 그냥 PC와 같다고 보면 되니깐, 머 PC로 데이터를 생성해 보내면 그게 그거일듯~~)

아무튼, PC에서 에뮬레이션하기 위해 코드를 작성한다고 치면 실제 앱을 작성해도 되지만 요즘 대세인 듯 한 파이썬 코딩을 간단하게 해서 동작을 시연해 보려고 한다. 위에 언급한 이전 글을 보면 서비스의 생성 및 디바이스를 생성하는 방법이 나와 있으니 참고하고, 그 이후 파이썬에 프로그램할 때 사용한 부분만 추가해 보려고 한다.

디바이스 인증 정보 저장하기 - IBM Watson IoT Platform

아래 그림에서 처럼 꼭 디바이스 생성할 때 최종 화면에서 생성된 디바이스의 토큰 정보는 필수적으로 알고 있어야 하며, 따로 텍스트 파일로 라도 저장해 두길.. 이전 포스팅의 화면을 참고용으로 가져왔다.

IBM Watson IoT Platform - 디바이스 인증정보

먼저 이 저장된 정보를 device.yaml 이라는 파일명으로 아래와 같은 형태로 저장해 작업 폴더에 저장을 해 둔다.

device.yaml

IBM Watson IoT Platform 파이썬 라이브러리 설치

그럼 이제 파이썬 코딩을 위해 IBM Watson IoT Platform 파이썬 라이브러리를 준비한다. (물론 나머지 파이썬 기본 환경은 다 되어 있다고 가정 :) )

Install the latest version of the library with pip

pip install wiotp-sdk

IBM 파이썬 라이브러리 문서는 아래 링크를 참고하면 된다. Python SDK - IBM Watson IoT Platform - https://ibm-watson-iot.github.io/iot-python/

Note Support for MQTT with TLS requires at least Python v2.7.9 or v3.4, and openssl v1.0.1 Additional documentation for the library is available in IBM Cloud, but it’s a “little” out of date in places: Uninstalling the module is simple.

IBM Watson IoT Platform 디바이스 파이썬 코딩

언제나 공부해야 하는 양은 많다. 다 살펴보기 힘드니 그냥 기초적인 동작 부분만 따로 코딩해서 아래에 공개해 둔다. 시나리오는 그냥 접속해서 데이터 3번 보내고 연결을 종료하는 것이다. (당연히 device.yaml 은 자신이 저장해 둔 파일을 써야 되겠죠 ^^…)

import wiotp.sdk.device
import time

def myCommandCallback(cmd):
    print("Command received: %s" % cmd.data)

# Configure
myConfig = wiotp.sdk.device.parseConfigFile("device.yaml")
client = wiotp.sdk.device.DeviceClient(config=myConfig, logHandlers=None)
client.commandCallback = myCommandCallback

# Connect
client.connect()
print("Connected")
time.sleep(5)
        
# Send Data
myData={'name' : 'foo', 'cpu' : 60, 'mem' : 50}
client.publishEvent(eventId="status", msgFormat="json", data=myData, qos=0, onPublish=None)
print("Sent data")
time.sleep(5)

# Send Data
myData={'name' : 'foo', 'cpu' : 61, 'mem' : 50}
client.publishEvent(eventId="status", msgFormat="json", data=myData, qos=0, onPublish=None)
print("Sent data")
time.sleep(5)

# Send Data
myData={'name' : 'foo', 'cpu' : 62, 'mem' : 50}
client.publishEvent(eventId="status", msgFormat="json", data=myData, qos=0, onPublish=None)
print("Sent data")
time.sleep(5)

# Disconnect
client.disconnect()
print("Disconnected")

파이썬 동작 결과

결과화면은 아래와 같다. 파이썬 코드가 순서대로 수행이 되었고, 중간중간 연결이 되었는지 끊어졌는지 정보는 callback 함수를 통해 출력됨을 볼 수 있다.

파이썬 실행 결과 화면

당연히 클라우드쪽에 구성한 Watson IoT Platform 에는 받은 데이터의 로그를 볼 수 있었다.

IBM Watson IoT Platform 결과화면

이상으로 제가 해 볼 수 있는 범위의 테스트를 마치며. 세상 누군가에게는 도움이 되는 자료이길…