# NWT_IOT **Repository Path**: srekal/nwt_-iot ## Basic Information - **Project Name**: NWT_IOT - **Description**: water_purifier - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-20 - **Last Updated**: 2026-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 新增/修改的文件 1. 新增 MQTT 服务模型 文件: water_purifier/models/ro_mqtt_service.py • ro.mqtt.config — MQTT Broker 配置模型(地址、端口、用户名、密码、Topic 前缀 • ro.mqtt.service — MQTT 服务管理模型,包含: • start_mqtt_service() / stop_mqtt_service() — 启动/停止后台 MQTT 订阅线程 • _process_message() — 消息处理入口:根据 Topic 提取 SN,将原始 JSON 写入 ro er.purifier.machine.iot,并调用解析方法 • MqttClientThread — 基于 paho-mqtt 的后台守护线程,订阅 4 类 Topic: • /devices/{sn}/info/post • /devices/{sn}/work/post • /devices/{sn}/sys/post • /devices/{sn}/fault/post 2. 重写 IOT 与机器档案模型 文件: water_purifier/models/ro_water_purifier_machine.py 在 ro.water.purifier.machine.iot 中新增解析方法: 方法 功能 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ _parse_payload() 根据 msg_type 分发到对应解析器 _parse_info() 解析固件版本、IP、设备时间 _parse_work() 解析出水状态、温度、滤芯寿命、TDS 等,并回写机器档 案的 filter 和 water_usage _parse_sys() 解析温度补偿、功率设置、总用水量等 _parse_fault() 解析 8 类传感器/故障状态;若值为 1(有故障),自动 创建故障预警 _update_state() 更新/创建 机器运行情况 记录;若基础参数不存在则自 动创建 _create_fault_warning() 为检测到的故障自动创建 ro.fault.warning 记录 3. 预制基础参数数据 文件: water_purifier/data/iot_base_data.xml 预置了所有 IOT Payload 字段对应的基础参数(ro.water.purifier.base),包括: • 设备信息(version, ip, device_time) • 工作状态(water_state, temp, filter1_life ... filter5_life_time, CO2_status, aw_water_TDS, pure_water_TDS, turbidity) • 系统设置(temp_compensati_set, power_set, total_watersize ...) • 故障状态(inlet_water_temp_sensor_fault ... over_temp_protection_shutdown_fa t) • MQTT 类型标记(mqtt_info, mqtt_work, mqtt_sys, mqtt_fault) 4. 新增视图 • views/ro_mqtt_config.xml — MQTT Broker 配置列表/表单视图 • views/ro_mqtt_service.xml — MQTT 服务控制视图(带启动/停止按钮) 5. 菜单更新 文件: water_purifier/views/menu.xml 在「基础资料」下新增: • MQTT配置 • MQTT服务 6. 权限与 Manifest • security/ir.model.access.csv — 新增 ro.mqtt.config 和 ro.mqtt.service 的访问 限 • __manifest__.py — 引入新数据文件和视图 • models/__init__.py — 导入 ro_mqtt_service ────────────────────────────────────────────────────────────────────────────── 数据流说明 设备 MQTT 发布 │ ▼ ┌─────────────────────────────────────┐ │ paho-mqtt 后台线程 (MqttClientThread) │ └─────────────────────────────────────┘ │ ▼ 解析 Topic → 提取 SN │ ▼ 查找机器档案 (ro.water.purifier.machine) │ ├─► 写入 IOT 原始数据表 (ro.water.purifier.machine.iot) │ raw_data = 完整 JSON │ └─► 调用 _parse_payload() │ ├─► info → 写入运行情况 (version, ip, time) ├─► work → 写入运行情况 + 更新机器档案 filter / water_usage ├─► sys → 写入运行情况 (系统设置参数) └─► fault → 写入运行情况 + 自动创建故障预警 (ro.fault.warning) ────────────────────────────────────────────────────────────────────────────── 使用方式 1. 安装/升级模块后,在「基础资料 → MQTT配置」中填写 Broker 信息 2. 进入「基础资料 → MQTT服务」,点击启动服务 3. 当设备向对应 Topic 发布数据时,系统会自动: • 将原始 JSON 保存到 IOT 表 • 解析并更新「机器运行情况」 • 故障数据自动触发「故障预警」 MQTT协议 发布: 1、推送设备信息 Topic:/devices/{sn}/info/post Payload: { 'version':'1.0.0' 'ip':'0.0.0.0' 'time':'2026-02-27 18:00:00' } 2、推送工作状态信息 Topic:/devices/{sn}/work/post Payload: { 'water_state':0 //出水状态 'temp':0, //出水温度, 单位:℃ 'water_size':0, //出水量, 单位:ml 'light_state':0 //照明灯状态 'cooling_state':0 //制冷状态 'flush_state':0 //冲洗状态 'filter1_life':0 //滤芯1寿命 单位:% 'filter2_life':0 //滤芯2寿命 单位:% 'filter3_life':0 //滤芯3寿命 单位:% 'filter4_life':0 //滤芯4寿命 单位:% 'filter5_life':0 //滤芯5寿命 单位:% 'filter1_life_time':0 //滤芯1时间寿命 单位:天 'filter2_life_time':0 //滤芯2时间寿命 单位:天 'filter3_life_time':0 //滤芯3时间寿命 单位:天 'filter4_life_time':0 //滤芯4时间寿命 单位:天 'filter5_life_time':0 //滤芯5时间寿命 单位:天 'CO2_status':0 //气瓶状态 0:气瓶未满 1:气瓶已满 'raw_water_TDS':0 //原水TDS 'pure_water_TDS':0 //纯水TDS 'turbidity':0 //浊度(预留位) } 3、推送系统设置信息 Topic:/devices/{sn}/sys/post Payload: { 'temp_compensati_set':0 //温度补偿设置 单位:℃ 'vol_detection_correct':0 //电压检测矫正 单位:V 'power_set':0 //功率设置 单位:% 'total_watersize':0 //总用水量 单位:L 'CO2_total_watersize':0 //气泡水总用水量 单位:L 'flowing_water':0 //水流(预留位) 'water_pressure':0 //水压(预留位) 'water_pump':0 //水泵(预留位) 'power_consumption':0 //功耗(预留位) } 4、推送故障状态信息 Topic:/devices/{sn}/fault/post Payload: { 'inlet_water_temp_sensor_fault':0 //进水温度传感器故障 0:无故障,1:有故障 'ice_water_temp_sensor_fault':0 //冰水温度传感器故障 0:无故障,1:有故障 'heater_sensor_fault':0 //发热体传感器故障 0:无故障,1:有故障 'water_flow_fault':0 //水流故障 0:无故障,1:有故障 'water_leakage_fault':0 //漏水故障 0:无故障,1:有故障 'water_pressure_fault':0 //水压故障 0:无故障,1:有故障 'hot_water_temp_sensor_fault':0 //热水温度传感器故障 0:无故障,1:有故障 'over_temp_protection_shutdown_fault':0 //超温保护停机故障 0:无故障,1:有故障 } (预留)订阅: 1、出水、温度控制指令 Topic:/devices/{sn}/cmd/water_outlet_control Payload: { 'water_outlet_control':0 //0为关,1为开 'water_temp_control':0 //温度0~99 'water_flow_control':0 //出水量0~3000 'symbol_temp':℃ //符号单位(温度) 'symbol_watersize':ml //符号单位(出水量) } 2、制冷开关指令 Topic:/devices/{sn}/cmd/cooling_switch Payload: { 'cooling_switch':0 //0:关闭制冷,1:打开制冷 } 3、照明灯开关指令 Topic:/devices/{sn}/cmd/light_switch Payload: { 'light_switch':0 //0:关灯,1:开灯 } 4、冲洗开关指令 Topic:/devices/{sn}/cmd/flush_switch Payload: { 'flush_switch':0 //0:停止冲洗,1:开始冲洗 } 5、温度补偿设置指令 Topic:/devices/{sn}/cmd/temp_compensati_set Payload: { 'temp_compensati_set':0 //百分比-10 ~ 10 'symbol':% //符号单位 } 6、电压检测矫正指令 Topic:/devices/{sn}/cmd/vol_detection_correct Payload: { 'vol_detection_correct':0 //根据实际调整值 'symbol':V //符号单位 } 7、功率设置指令 Topic:/devices/{sn}/cmd/power_set Payload: { 'power_set':0 //百分比-20 ~ 20 'symbol':% //符号单位 } 8、总用水量指令 Topic:/devices/{sn}/cmd/total_watersize Payload: { 'total_watersize':0 //0~10000 'symbol':L //符号单位 } 9、气泡水总用水量指令 Topic:/devices/{sn}/cmd/CO2_total_watersize Payload: { 'CO2_total_watersize':0 //0~10000 'symbol':L //符号单位 } 10、时间设置 Topic:/devices/{sn}/cmd/set_time Payload: { 'set_time':'2026-02-27 18:00:00'SN } 测试机器SN: 311D298757A063E4 域名:139.199.225.248:1883 用户名:zkswe_admin 密码:www.zkswe.com