
昨晚翻家里NAS存的智能门锁、温湿度节点的日志,翻到眼花才找出温湿度节点频繁掉线是因为固件老丢MQTT包,干脆写了个小工具自动筛,步骤整理如下直接抄就行。
提前要准备的东西
- 已经能正常跑MQTT服务的家用物联网环境,没搭的话先装个mosquitto就行,apt/yum/brew都能直接装
- 本地部署的7B参数级量化大模型,不用联网,跑在普通PC/NAS上就够,别用云接口,传家里设备日志没必要
- Python3.8以上版本,别用太老的3.6版本,很多新依赖装不上
直接能跑的核心步骤
- 先装需要的依赖包,终端直接跑下面的命令:
pip install paho-mqtt openai python-dotenv - 写基础的MQTT日志订阅逻辑,对接本地大模型的兼容接口,代码直接改下IP就能用:
import paho.mqtt.client as mqtt from openai import OpenAI import os from dotenv import load_dotenv load_dotenv() # 对接本地ollama服务,不用填真实OpenAI密钥 llm_client = OpenAI( base_url="http://127.0.0.1:11434/v1", api_key="ollama" ) log_buffer = [] # MQTT连接配置,换成你自己的broker地址 def on_connect(client, userdata, flags, rc): client.subscribe("iot/+/log") # 订阅所有设备的日志主题 def on_message(client, userdata, msg): log_content = msg.payload.decode() log_buffer.append(log_content) # 攒够10条日志就交给本地模型巡检 if len(log_buffer) >=10: check_logs(log_buffer) log_buffer.clear() def send_alert(content): # 这里换成你自己的告警通道,比如Server酱、企业微信机器人都行 pass mqtt_client = mqtt.Client() mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message mqtt_client.connect("你的MQTT服务IP", 1883, 60) mqtt_client.loop_start() - 补上日志巡检的核心逻辑,提示词不用写太复杂:
def check_logs(logs): prompt = f"以下是家里物联网设备上报的10条运行日志,帮我找出异常的设备和可能的问题,别扯无关内容,直接列问题:\n{''.join(logs)}" resp = llm_client.chat.completions.create( model="qwen2.5:7b-instruct-q4_0", # 换成你本地拉取的模型名 messages=[{"role":"user","content":prompt}], temperature=0.1 # 调低温度参数,避免模型编造不存在的故障 ) result = resp.choices[0].message.content # 识别到异常就触发告警 if "异常" in result or "故障" in result: send_alert(result)
几个容易踩的坑
- 别一开始就拿全量日志喂模型,上下文窗口占满了会漏信息,攒个10-15条处理一次就行,攒多少看你设备上报频率,上报勤就多攒几条
- 本地模型选qwen2或者llama3的7B量化版就够,不用搞太大参数的版本,推理速度看设备配置,CPU跑的话每次推理大概几秒左右,完全不耽误用
- MQTT订阅主题别写#全量订阅,不然家里摄像头、智能电视的杂消息全进来,平白占算力
小提示:要是你家物联网设备已经接了HomeAssistant,直接从HA的事件流里拉日志更省事,不用单独改MQTT订阅规则
反正我把这脚本扔NAS后台跑了几天,已经逮到两次智能开关离线重启的小问题,比自己逐行翻日志省事儿多了。对了,记得别给本地模型开不必要的网络权限,家里设备的运行信息没必要往外传。
评论一下?