科技爱好者博客

从零开始用ESP模块将燃气表接入Home Assistant

搭建Home Assistant后,使用ESP32-01S模块、培正PZEM-004模块将电表数据接入Home Assistant,最近借鉴网友的经验,使用ESP32-01S模块和红外反射光电开关,将燃气使用的数据添加到Home Assistant,实现对电、燃气的监测,以下是完全从零开始的教程,包括购买材料,刷ESPHome固件,硬件连接,接入Home Assistant等几个方面。

最终完成效果:

一、购买材料

共使用以下几个材料

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网站上可以再次查看。

添加后就可以看到燃气表的数值啦。

经过我半天的观察,测量数据非常准确,一点儿也不差!

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 从零开始用ESP模块将燃气表接入Home Assistant (https://www.tujing.site/5882)

如果博客对您有帮助,请给我 赞助


退出移动版