#!/usr/bin/env python3 # Мини raw-MQTT subscriber: коннект к брокеру, SUBSCRIBE guard/#, ждём 1 PUBLISH. import socket, struct, sys, time HOST, PORT = "10.50.0.48", 1883 TOPIC = "guard/#" def rl(n): o=bytearray() while True: b=n%128; n//=128 if n>0: b|=0x80 o.append(b) if n==0: break return bytes(o) def s(x): b=x.encode(); return struct.pack("!H",len(b))+b sock=socket.create_connection((HOST,PORT),timeout=8) # CONNECT body=s("MQTT")+bytes([0x04,0x02])+struct.pack("!H",60)+s("pcn-subtest") sock.sendall(bytes([0x10])+rl(len(body))+body) ca=sock.recv(4) assert ca[0]==0x20 and ca[3]==0x00, ("CONNACK",ca) # SUBSCRIBE (packet id 1, qos0) sb=struct.pack("!H",1)+s(TOPIC)+bytes([0x00]) sock.sendall(bytes([0x82])+rl(len(sb))+sb) # SUBACK sock.recv(5) print("SUBSCRIBED", flush=True) # ждём PUBLISH до 12с sock.settimeout(12) buf=b"" try: data=sock.recv(4096) print("GOT_FROM_BROKER:", repr(data[:300])) except socket.timeout: print("TIMEOUT_NO_MESSAGE") sock.close()