怎样把净水机接入HASS智能家居
最近媳妇要生仔单位给我放了陪产假,一个月的时间实在是不知道除了带娃还能干啥,家里净水机买了2年了最近一测发现水质已经变成TDS80PPM了,正常净水机出来的直饮水的水质在50PPM以下为优秀,这可不能直接喝了,所以想加装一个在线监测模块,用来监测水质曲线,及时提醒更换滤芯
首先得有一个净水器,我是自己手搓组装的净水器,目前家在长江中下游的鱼米之乡,自来水品质在280PPM左右,原装的进口陶氏98%反渗透RO膜在900块左右实在太贵,重新买了国产陶氏95%反渗透RO膜价格在300左右,280x(1-95%)=14PPM是我能接受的脱盐率,在更换RO膜前把在线TDS监测做好是必要的,下面进入正题
首先需要采购TDS模块,ESP系列通讯模块,USB转TTL模块,我购买的是双路输入的TDS水质传感器模块,这样可以同时检测原水和净水的TDS值,并且购买的是带温度传感的版本,这样可以更加精确的计算温度补偿
还需要你的HASSIO内安装了NODE-RED、jupyterlab和MQTT服务器


之后用的手头上的NODEMCU来进行与HASS交互,我使用的是NODEMCU-32S,实际上用ESP8266系列的就可以,但是这种小模块大多是需要3.3V的供电,如果不想单独再买一个3.3V的电源模块(价格3元左右),可以直接买下图这种带USB接口的集成好的模块,更加方便一些当然也贵一些,

刷写固件
东西到手后,首先需要给他刷固件,如果你购买的ESP模块在购买时备注默认是AT固件的,那就可以不用刷固件了
需要的刷机版本在官方连接中自己选择购买的那一款,一般是8266或者ESP32
下载好手首选需要把ESP模块插入电脑中,然后使用刷机工具准备刷机





刷机设置记得右下角的COM口改成自己模块的COM口,可能是34567,是乱序的

设置模块
解压sscom v5.13.1,找到exe执行文件,双击运行!之后需要用到USB转TTL模块
如果用的是MCU-ESP32模块,那就需要把IO16接入模块的TX和IO17接入模块的RX
如果用的是MCU-ESP8266模块,就需要把IO15接入模块的TX和IO13接入模块的RX
如果购买的ESP模块是3.3V的,那就设置为使用模式,具体应该是IO0接入GND或者3.3V,然后把TTL模块的RX接到ESP模块TX,TTL模块的TX接到ESP模块RX
再打开串口,弹出如下对话框,在端口号中,选择你计算机对应的端口,本例子我的计算机应用的COM3,所以就选COM3了。波特率选择115200,要注意的是选择的不是一开始USB刷机的那个COM口,而是要选择USB转TTL的那个COM口,正常来说插入电脑后会有一个新的端口,就是那个新的端口


3,在输入框中,输入“AT”
在输入框中,输入“AT”,然后点击发送,文本框中返回了“OK”表示固件烧写成功,并且正常运行。注意要勾选“加回车换行”,还有就是看是否已经打开串口。
4,返回“OK”,刷写成功。
接下来我们要设置TCP串口透传模式
在串口调试助手中首先要输入【AT+CWLAP】,查看你家的WIFI在不在返回的信息中
输入【AT+CWMODE_DEF=1】,把模块改成AP模式
之后设置wifi账号和密码(自行修改):【AT+CWJAP="用户名","密码"】连接WIFI
之后输入【AT+SAVETRANSLINK=1,"node-red的ip地址",3316,"TCP"】(这里的1就是指模块开机就进入透传模式,node-red的ip地址连接到你的tcp服务器,简单来说就是HASS的地址,11111是自己喜欢的数字,不要用常用端口就可以,常用端口是哪些自己可以百度)
再输入【AT+UART_DEF=9600,8,1,0,0】,这个设置是根据TDS传感器的数据来的
这样你就得到一个可以UART透传的ESP模块啦,ESP32的指令略有区别,可以在乐鑫官网查看不同的指令并输入
设置HASSIO系统
首先进入NODERED里面,设置TCP IN,里面的端口就是上面你自己设置的喜欢的端口

设置功能节点,代码复制即可【let arr = [msg.payload];
arr.push(...msg.payload);
msg.payload={
"Raw_Water_TDS": (256 * arr[2] + 1 * arr[3]) * (1 + (0.02 * ((1 * arr[6]) - 25))),
"Clean_Water_TDS": (256 * arr[4] + 1 * arr[5]) * (1 + (0.02 * ((1 * arr[7]) - 25))),
"Raw_Water_Temperature": 1* arr[6],
"Clean_Water_Temperature": 1 * arr[7]}
return msg;】

MQTT节点内的主题是可以变成自己喜欢的主题,但是要和下方爬虫代码的主题一致

这样我们就得到了温度补偿的TDS数值
接下来把温度补偿的实体加入HASSIO内
首先要安装MQTT的库,输入代码【!pip install paho.mqtt】然后选择你新输入的代码,再点击软件上方的播放按钮

之后输入代码,再点击上方的播放按钮
【#office-sensor
import paho.mqtt.client as mqtt
import time
import random #随机库
HOST = "你的HASSIO地址"
PORT = 1883
def on_message_callback(client, userdata, message):
print(message.topic+" " + ":" + str(message.payload))
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
if(str(rc) == '0'):
print("start")
client.publish("homeassistant/sensor/Raw_Water_Quality/config",\
'{"device_class": "temperature", \
"name": "Raw_Water_TDS", \
"state_topic": "homeassistant/sensor/Water/state", \
"unit_of_measurement": "PMM", \
"value_template": "{{ value_json.Raw_Water_TDS}}" }')
client.publish("homeassistant/sensor/Clean_Water_Quality/config",\
'{"device_class": "temperature", \
"name": "Clean_Water_TDS", \
"state_topic": "homeassistant/sensor/Water/state", \
"unit_of_measurement": "PMM", \
"value_template": "{{ value_json.Clean_Water_TDS}}" }')
client.publish("homeassistant/sensor/Raw_Water_Temperature/config",\
'{"device_class": "temperature", \
"name": "Raw_Water_Temperature", \
"state_topic": "homeassistant/sensor/Water/state", \
"unit_of_measurement": "°C", \
"value_template": "{{ value_json.Raw_Water_Temperature}}" }')
client.publish("homeassistant/sensor/Clean_Water_Temperature/config",\
'{"device_class": "temperature", \
"name": "Clean_Water_Temperature", \
"state_topic": "homeassistant/sensor/Water/state", \
"unit_of_measurement": "°C", \
"value_template": "{{ value_json.Clean_Water_Temperature}}" }')
client = mqtt.Client()
client.connect(HOST, PORT, 60)
client.username_pw_set('你的登录名', '你的密码')
client.on_connect = on_connect
client.on_message = on_message_callback
client.loop_start()】
其中上面橙色框框里面是你的HASSIO地址和MQTT的服务器端口号,默认是1883
红色框框就是和NODERED相同的主题,如果要修改需要两边同时修改
青色 框框里面是你的HASSIO的登录名和密码,需要管理员权限

之后在你的HASSIO内就可以搜索到你刚建立的实体了

最后的接线
之后把TDS传感器的RX接入ESP模块中,同样是
如果用的MCU-ESP32模块,那就需要把IO16接入TDS的TX和IO17接入TDS的RX
如果用的MCU-ESP8266模块,就需要把IO15接入TDS的TX和IO13接入TDS的RX
如果购买的ESP模块是3.3V的,那就设置为使用模式,具体应该是IO0接入GND或者3.3V,然后把TTL模块的RX接到ESP模块TX,TTL模块的TX接到ESP模块RX
之后只需要把传感器接入净水器的自来水进水端和纯净水出水端,相信愿意弄这个的小伙伴应该也不需要教学怎么把模块接入净水器,需要注意的是传感器为3分的大小,一般净水器进水端为3分的水管,出水端一般为2分的水管,记得购买两个3分的三通和两个2分转3分的直通

打包的调试助手和串口驱动器放在这,需要自取
链接:https://pan.baidu.com/s/1TyrK1-WQnYCBI-RYP_gauQ?pwd=ipst
提取码:ipst