https://aws.amazon.com/ko/premiumsupport/knowledge-center/iot-core-publish-mqtt-messages-python/
Python을 사용하여 AWS IoT Core에 MQTT 메시지 게시
참고: AWS IoT에 연결할 사물을 생성할 필요는 없습니다. 하지만 사물을 활용하면 추가 보안 제어 및 플릿 인덱싱, 작업, 또는 디바이스 섀도우와 같은 다른 AWS IoT 기능을 사용할 수 있습니다. 1.
aws.amazon.com
Python을 통해서 어떻게 aws iot core mqtt subscribe하는지 궁금해서 검색해보니까 이런 게 떴다.
그런데 이 글에서는 publish하는 방법만 쓰여있고 subscribe하는 방법은 쓰여있지 않았다.
심지어 이 모듈.. 인기가 없는 건지? 잘 알려져 있지 않은 건지는 잘 모르겠지만 인터넷에 검색해도 예제가 없었다 ㅋㅋㅋㅋㅋㅋㅋㅋ ㅜㅜ.. 그래서 내가 subscribe 할 수 있는 코드를 티스토리에 올려보려고 한다..
공식 문서랑 위의 링크를 참고해서 작성한 코드이다.
https://awslabs.github.io/aws-crt-python/py-modindex.html
Python Module Index — awscrt documentation
awslabs.github.io
코드 사용하실 분들은 subscribe 메소드의 callback 함수를 따로 만들어서 작성하면 된다.
내가 쓴 콜백함수인 got_message는 그냥 예시일뿐이다. 지우고 새로 작성하면 된다.
callback 함수 arguments들은 무조건 topic, payload, dup, qos, retain, **kwars 이렇게 6가지여야 한다.
from awscrt import io, mqtt, auth, http
from awsiot import mqtt_connection_builder
import time as t
ENDPOINT = ""
CLIENT_ID = ""
PATH_TO_CERT = ""
PATH_TO_KEY = ""
PATH_TO_ROOT = ""
TOPIC = ""
def got_message(topic, payload, dup, qos, retain, **kwars):
print(f"{topic} {payload}")
event_loop_group = io.EventLoopGroup(1)
host_resolver = io.DefaultHostResolver(event_loop_group)
client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver)
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=ENDPOINT,
cert_filepath=PATH_TO_CERT,
pri_key_filepath=PATH_TO_KEY,
client_bootstrap=client_bootstrap,
ca_filepath=PATH_TO_ROOT,
client_id=CLIENT_ID,
clean_session=False,
keep_alive_secs=6
)
print("Connecting to {} with client ID '{}'...".format(
ENDPOINT, CLIENT_ID))
connect_future = mqtt_connection.connect()
connect_future.result()
print("Connected!")
print('Begin Subcribe.')
while True:
mqtt_connection.subscribe(topic=TOPIC, qos=mqtt.QoS.AT_LEAST_ONCE, callback=got_message)
t.sleep(0.1)