搭建Home Assistant后,使用ESP32-01S模块、培正PZEM-004模块将电表数据接入Home Assistant,最近借鉴网友的经验,使用ESP32-01S模块和红外反射光电开关,将燃气使用的数据添加到Home Assistant,实现对电、燃气的监测,以下是完全从零开始的教程,包括购买材料,刷ESPHome固件,硬件连接,接入Home Assistant等几个方面。
最终完成效果:
一、购买材料
共使用以下几个材料
- TCRT5000红外反射光电开关 1.45元
- ESP-01S esp8266串口wifi无线模块 5.85元
- ESP-01/01S无线透传开发板 8.9元
- type-c数据线及配套的充电头
- 杜邦线3根
3个模块是网上购买,共计16.2元,其余材料均使用现有的。
实现的原理大概是,天然气表的最后一位上有反光片,我家的是在数字6后面,这个反光片可以反射红外光,这样每转一圈,光电开关就能感应到,从而实现读取燃气表数值的功能。
二、刷ESPHome固件
模块收到后,将ESP-01Sm模块和ESP-01/01S无线透传开发板组合在一起,然后使用type-c数据线连接到电脑上,准备给ESP32-01S刷esphome固件。
打开web.esphome.io或者自己使用docker搭建的esphome网站。
右下角点击New device新建设备
输入要新建设备的名称,如gas,然后选择设备类型,这里选择ESP8266即可。
会出现一个密钥,记下来,后续在添加到Home Assistant的时候会用到。
点击INSTALL,然后选择固件下载方式,这里先不选,点击“取消”,之后在新建的项目上,点击“EDIT”,编辑ESPhome配置文件。
修改为以下测量燃气表数值的代码:
esphome:
name: “gas”
friendly_name: “燃气测量”
esp8266:
board: esp01_1m
restore_from_flash: True
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: “KHn0Dr42KoJfkL7qt6vznBGA1vt5oz+VF3kVmrlF8ZI=”
ota:
– platform: esphome
password: “f748d552a78a420f2f7895b84f2b60ac”
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: “LW_Gas”
password: “lw123456789”
captive_portal:
web_server:
port: 80
time:
– platform: sntp
id: sntp_time
timezone: Asia/Shanghai
– platform: homeassistant
id: hastime
timezone: Asia/Shanghai
globals:
– id: counter_int
type: float
restore_value: yes
initial_value: ‘94.42’ #燃气表目前的数值
binary_sensor:
– platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
filters:
– delayed_off: 1000ms
name: gas_counter_key_point
id: gas_counter_key_point
icon: mdi:gas-burner
on_release:
then:
– lambda: |-
id(counter_int) += 0.01;
id(gas_meter).publish_state(id(counter_int));
text_sensor:
– platform: wifi_info
ip_address:
icon: “mdi:ip”
name: Espcounter_IP
ssid:
name: Espcounter_SSID
icon: “mdi:access-point-network”
bssid:
name: Espcounter_BSSID
icon: “mdi:access-point-network”
number:
– platform: template
id: initial_value
name: “gas_meter值校正”
mode: box
optimistic: true
min_value: -99999
max_value: 99999
step: 0.01
restore_value: false
initial_value: 0
on_value:
then:
– lambda: |-
id(counter_int) += id(initial_value).state;
id(gas_meter).publish_state(id(counter_int));
sensor:
– platform: wifi_signal
name: “WiFi Espcounter”
update_interval: 60s
## 8266运行时间
– platform: uptime
name: Espcounter_Uptime_Sensor
– platform: template
name: “gas_meter”
id: gas_meter
lambda: !lambda |-
return id(counter_int);
unit_of_measurement: ‘m³’
state_class: ‘total_increasing’
accuracy_decimals: 2
device_class: ‘gas’
update_interval: 60s
switch:
– platform: restart #用于重启NodeMCU
name: “ranqi_esp8266_restart”
id: ranqi_esp8266_restart
编辑完成后,点击右上角的”INSTALL”,然后选择固件下载方式,于我们是首次刷ESPHOME,需要选择第二个,即”Plug into this computer”,然后点击”Download project“。
这样会下载一个固件文件到电脑上,类似”gas.bin”这样的。
下一步将固件文件刷到ESP32-01S里面。
打开ESPHome-Flasher-1.4.0软件,可以自动下载固件。
软件链接:Releases · esphome/esphome-flasher
也可以从科技爱好者博客上下载:ESPHome-Flasher-1.4.0-Windows-x64
选择ESP32的端口和刚下载的固件文件,点击”FLASH ESP”即可写入固件。
三、硬件连接
将光电开关和ESP32-01S连接,VCC连接ESP3.3V引脚,GND连接ESP的GND引脚,D0连接到ESP的IO0引脚。
将esp32模块使用type-c供电
将光电开关的光电接受头放到天然气表上,对准最后一位,因为天然气表的最后一位上有反光片,可以反射红外光,这样每转一圈,光电开关就能感应到,从而实现读取燃气表数值的功能。
我从家里找了一个小盒子,将模块放到里面,然后调整电位器,使得燃气表反光片转过来的时候,光电开关刚好能感受到,这个需要细心的调整,我试了好几次才调好,可以开着燃气灶或者放热水,这样燃气表转起来,才好调。
最终的效果:
四、接入Home Assistant
完成后,登录Home Assistant,一般情况下会自动发现ESPhome设备,如果没有的话,在配置中添加。
输入ESPhome的IP地址,以及密钥,密钥是刚开始配置的时候记录的,如果忘了也没关系,在ESPhome网站上可以再次查看。
添加后就可以看到燃气表的数值啦。
经过我半天的观察,测量数据非常准确,一点儿也不差!