怎樣把凈水機接入HASS智能家居
最近媳婦要生仔單位給我放了陪產假,一個月的時間實在是不知道除了帶娃還能干啥,家里凈水機買了2年了最近一測發(fā)現水質已經變成TDS80PPM了,正常凈水機出來的直飲水的水質在50PPM以下為優(yōu)秀,這可不能直接喝了,所以想加裝一個在線監(jiān)測模塊,用來監(jiān)測水質曲線,及時提醒更換濾芯
首先得有一個凈水器,我是自己手搓組裝的凈水器,目前家在長江中下游的魚米之鄉(xiāng),自來水品質在280PPM左右,原裝的進口陶氏98%反滲透RO膜在900塊左右實在太貴,重新買了國產陶氏95%反滲透RO膜價格在300左右,280x(1-95%)=14PPM是我能接受的脫鹽率,在更換RO膜前把在線TDS監(jiān)測做好是必要的,下面進入正題
首先需要采購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執(zhí)行文件,雙擊運行!之后需要用到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”,然后點擊發(fā)送,文本框中返回了“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的指令略有區(qū)別,可以在樂鑫官網查看不同的指令并輸入
設置HASSIO系統
首先進入NODERED里面,設置TCP IN,里面的端口就是上面你自己設置的喜歡的端口

設置功能節(jié)點,代碼復制即可【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節(jié)點內的主題是可以變成自己喜歡的主題,但是要和下方爬蟲代碼的主題一致

這樣我們就得到了溫度補償的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