
上次我把书架上吃灰半年的ESP8266温湿度节点刷完固件,对着写死的阈值告警逻辑发愣——明明梅雨季湿度到80%才需要提醒开抽湿机,写死数值的话春秋季同湿度完全没必要报警,干脆用本地跑的小模型接了段脚本凑活用,步骤写下来给刚碰这几块的朋友参考。
先把前置依赖装好
- 首先确保本地Python版本在3.9以上,终端敲下面的命令查版本,版本不对就去官网下安装包,安装时记得勾选add to path选项:
python --version - 先确保本地装好了Ollama服务端,安装包去官网下就行,一路下一步装完自动在后台运行。再装两个必要的Python依赖库,一个用来接收MQTT协议传输的传感器数据,一个用来调用本地大模型接口,直接装最新版即可:
pip install paho-mqtt ollama
坑提前说:如果pip装完提示找不到命令,多半是你Python的Scripts目录没加系统环境变量,临时测试的话直接写全路径调用也行,不用死磕环境变量折腾半小时。
核心逻辑没你想的复杂
- 先写MQTT订阅部分,连你自己家里的MQTT broker就行,地址一般是路由器或者NAS的内网IP,默认端口1883,订阅主题填传感器上传数据用的topic即可:
import paho.mqtt.client as mqtt import ollama import json def on_message(client, userdata, msg): data = json.loads(msg.payload.decode()) temp = data.get("temperature") hum = data.get("humidity") # 后续接AI判断逻辑 print(f"收到数据:温度{temp}℃,湿度{hum}%") - 接上AI判断的部分,不用写复杂的提示词,直白说清要求就行。模型选你本地已经拉取过的小参数模型就好,比如qwen2:0.5b或者phi3,跑起来几乎不占资源,树莓派这类低性能设备也能带动:
prompt = f"当前室内温度{temp}摄氏度,湿度{hum}%,判断当前温湿度是否需要给住户发提醒,只需要回答是或否,不要额外内容" response = ollama.chat(model="qwen2:0.5b", messages=[{"role":"user","content":prompt}]) if "是" in response["message"]["content"]: # 这里换成你自己的推送逻辑,比如发微信、弹桌面通知都可以 print("注意:当前温湿度体感不适") - 最后补完MQTT的连接和常驻运行逻辑,把脚本存成ai_alert.py直接跑就行:
client = mqtt.Client() client.on_message = on_message client.connect("你家的MQTT服务内网IP", 1883, 60) client.subscribe("你的传感器数据主题") client.loop_forever()
别一上来就选7B以上参数的大模型,传感器上报的都是短文本数据,小模型足够应付,选大了不仅推理慢,后台常驻还平白耗功耗。
反正我自己用下来,比之前写死阈值的逻辑灵活太多,连窗户没关导致温度骤降这类没提前写规则的场景都能识别出来,你要是手头有闲置的传感器节点,花点时间搭一套试试?
评论一下?