mqtt — 간단한 MQTT 클라이언트¶
mqtt 모듈은 메모리가 제한된 장치에서 사용하기 적합한 최소한의 MQTT v3.1.1 클라이언트 구현을 제공합니다. 브로커 연결(선택적 TLS 포함), 메시지 발행, 토픽 구독, last-will 구성 및 keep-alive 핑을 지원합니다.
예시:
from mqtt import MQTTClient
def callback(topic, msg):
print(topic, msg)
client = MQTTClient("openmv", "broker.example.com", 1883)
client.set_callback(callback)
client.connect()
client.subscribe(b"openmv/in")
client.publish(b"openmv/out", b"hello")
while True:
client.check_msg()
예외¶
- exception mqtt.MQTTException¶
브로커가 CONNECT 요청을 거부하거나 SUBSCRIBE 요청이 거절될 때 발생합니다. 단일 인수는 브로커가 제공한 숫자 반환 코드입니다.
클래스¶
- class mqtt.MQTTClient(client_id: bytes | str, server: str, port: int, ssl_params: dict | None = None, user: bytes | str | None = None, password: bytes | str | None = None, keepalive: int = 0, callback: callable | None = None)¶
MQTT 클라이언트를 생성합니다.
인수:
client_id – 브로커로 전송되는 고유 클라이언트 식별자입니다.
server – 브로커 호스트명 또는 IP 주소입니다(
socket.getaddrinfo()로 확인됨).port – 브로커 TCP 포트입니다(일반적으로 일반 연결은
1883, TLS는8883).ssl_params –
None이 아닌 경우, 소켓이ssl.wrap_socket()으로 래핑되고 ssl_params가 키워드 인수로 전달됩니다. 기본값으로 TLS를 활성화하려면{}를 전달하십시오.user – 브로커 인증을 위한 선택적 사용자명입니다. 지정하는 경우 password도 함께 제공해야 합니다.
password – user와 함께 사용되는 선택적 비밀번호입니다.
keepalive – keep-alive 간격(초 단위,
0은 비활성화).65536보다 작아야 합니다.callback – 브로커에서 전달되는 각 PUBLISH에 대해
callback(topic, msg)로 호출되는 콜러블입니다. 나중에set_callback()으로 설정할 수도 있습니다.
메서드¶
- set_callback(f: callable) None¶
PUBLISH 메시지가 수신될 때
wait_msg()와check_msg()가 호출하는 콜백을 설정합니다. 콜백은 두 인수 모두bytes로 하여f(topic, msg)로 호출됩니다.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
MQTT Last Will and Testament를 구성합니다. 클라이언트가 비정상적으로 연결을 끊으면 브로커가 topic에 msg를 발행합니다.
connect()전에 호출해야 합니다.인수:
topic – last-will 토픽입니다(비어 있지 않아야 함).
msg – last-will 페이로드입니다.
retain –
True이면 브로커가 will 메시지를 보존된(retained) 메시지로 저장합니다.qos – last-will QoS 레벨입니다.
0,1또는2여야 합니다.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
브로커에 대한 TCP(및 선택적으로 TLS) 연결을 열고 CONNECT 패킷을 전송합니다.
인수:
clean_session –
True이면 클린 세션을 요청하고, 그렇지 않으면 브로커가 이전 세션 상태를 재개합니다.timeout – 기반 소켓에 적용되는 소켓 타임아웃(초 단위)입니다.
브로커의 session present 플래그(
0또는1)를 반환합니다. 브로커가 0이 아닌 CONNACK 반환 코드를 반환하면MQTTException을 발생시킵니다.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
msg를 topic에 발행합니다.
인수:
topic – 발행할 토픽 이름입니다.
msg – 페이로드 바이트입니다.
retain –
True이면 브로커가 새 구독자를 위해 메시지를 보존하도록 지시합니다.qos – quality-of-service 레벨입니다.
0(전송 후 확인 안 함)과1(확인됨)이 지원됩니다.2는 구현되지 않았으며AssertionError를 발생시킵니다.
qos
1의 경우, 일치하는 PUBACK이 수신될 때까지 호출이 블록됩니다. 전체 패킷 크기는2097152바이트보다 작아야 합니다.
- subscribe(topic: bytes | str, qos: int = 0) None¶
주어진 qos 레벨로 topic을 구독합니다.
set_callback()을 통해 또는 생성자에 콜백이 등록되어 있어야 하며, 그렇지 않으면AssertionError가 발생합니다.일치하는 SUBACK이 수신될 때까지 블록됩니다. 브로커가 구독을 거부하면(반환 코드
0x80)MQTTException을 발생시킵니다.
- wait_msg() int | None¶
단일 수신 MQTT 패킷을 기다리며 블록하고 이를 처리합니다. PUBLISH 패킷은 등록된 콜백으로 전달됩니다. PINGRESP 패킷은 조용히 소비됩니다. 다른 제어 패킷의 경우 원시 첫 바이트가 반환됩니다. 사용 가능한 데이터가 없거나 PINGRESP가 처리된 경우
None을 반환합니다.
- check_msg() int | None¶
wait_msg()의 논블로킹 변형입니다.select.select()를 사용하여 최대 ~50 ms 동안 소켓을 폴링합니다. 데이터가 대기 중이면wait_msg()와 동일한 처리를 수행하고, 그렇지 않으면None을 반환합니다.