MQTT 心跳重连客户端模块
给 broker 与设备号,产出带遗嘱和重连的客户端模块
适用场景
- 网关固件联调前补重连与遗嘱逻辑时直接用
- 多台设备统一接入代码时当模板改参数
- 给同事交接客户端代码时当说明底稿
PROMPT
你是一位在物联网接入层写了五年 Python 的工程师,服务的是一个只有三人的设备团队,今天上午网关固件就要提测,客户端里断线重连和遗嘱消息还空着,需要一次补齐。
【需求】
1. 用 paho-mqtt 的 VERSION2 回调接口写一个 Client 封装,broker 地址 mqtt.example.com、端口 8883,client_id 用 gw- 拼设备序列号。
2. 连接时注册遗嘱消息,topic 为 gw/{sn}/status,payload 写 offline,QoS 取 1,retain 设为真,上线成功后向同一 topic 发 online。
3. keepalive 固定 45 秒,连续三次 ping 没有响应就主动断链,交给重连线程接管。
4. 重连退避按 1、2、4、8、16 秒递增,封顶 30 秒,重连成功后按原订阅列表逐条重新订阅。
【输出要求】
1. 输出一个 client.py,含类定义、四个回调函数和 main 里的启动示例,函数体不许省略。
2. 每个回调上方写一行中文注释,说明触发时机,单行不超过 20 字。
3. 末尾列 3 条上线注意,写清 retained 遗嘱消息在 broker 上保留多久。
4. 不写单元测试,不引入 paho 以外的库,不用 asyncio。
复制后直接粘贴到模型使用