本文摘自上一篇文章:
我想用一台 D1 Mini 来代替 D1 迷你 V4 新版本。

上一个是用Esp Easy闪烁的,新的,我用ESP Home闪过它。
以下是两个教程:
一旦 D1 迷你 V4 使用Esp Home闪烁,我继续配置。
我利用D1Mini的变化来取代A0和GND之间的分隔桥的电阻,我放了一个51K。 该电阻的值设定在25°C的热电阻值上(因此安装前需手动测量)。
记录下,这里是布线图

D1 Mini的布线不变,所以我用D1 Mini V4再现图表。
请参阅此页面以进一步解释:
我意识到设备 ESP Home 的 yaml 文件的配置
一旦 D1 迷你 闪光 V4, 我去ESPHome Builder找到我的设备:

我点击EDIT并编辑yaml文件,这里是配置:
替代: 姓名: esphome-web-e586c5 friendly_name: ESPHome Hot Water esphome: 姓名: ${name} friendly_name : ${friendly_name} min_version: 2024.6.0 name_add_mac_suffix: 虚假项目: 姓名: esphome.web 版本: Dev esp8266: 董事会: esp01_1m # 启用日志记录 : # 启用 API Home Assistant api: # 允许 Over-The-Air Ota 更新: 平台: esphome 的 # 通过 Improv_serial 串行端口允许 Wi-Fi 配置: WiFi: # 设置 Wi-Fi AP: {} # 结合"ap"选项,这允许用户 # 通过 Wi-Fi AP. captive_portal 配置 Wi-Fi 凭据: dashboard_import : _import _url 包 : GitHub://esphome/example-configs/esphome-web/esp8266.yaml@main import_full _config: 真实 的 # 要有一个"next URL" for Improv_serial web_server: 传感器: 平台: NTC传感器: Temp_resistance 名称: 『温度』单位_of_measurement: "°C"精度_十进制: 2 校准: b_constant : 3950 参考温度: 25°C reference_resistance: 50kOhm - 平台: 抵抗ID: Temp_resistance 传感器: Temp_voltage 配置: 下游电阻器: 50kOhm reference_voltage: 3.3V - 平台: ADC 引脚: A0 id : Temp_voltage 的 # 冷水涡轮传感器 - 平台: pulse_meter 引脚 : 编号: GPIO13模式: 输入 : 真正的上拉: 真名: 'Drinking Water Flow' 单位 _of _measurement: 'L/min' accuracy_decimals: 0 内部_filter : 100ms超时: 5S过滤器: 乘以: 总计0.013: 姓名: 『总饮用水』单位_of_measurement: "L" ID: Total_eau _potable accuracy_decimals: 2 过滤器: 乘以: 0.013 # 热水涡轮传感器 - 平台: pulse_meter 引脚 : 编号: GPIO14模式: 输入 : 真正的上拉: 真名: '热水流'单位_of_measurement: 'L/min' accuracy_decimals: 0 内部_filter : 100ms超时: 5S过滤器: 乘以: 0.013 # 共计1/77: 姓名: "Total Conso Hot Water" 单元 _of _measurement : "L" ID: Total_eau _chaude accuracy_decimals: 2 过滤器: 乘以: 0.013 # 1/77 # 计算净冷水消耗的传感器 - 平台: 模板名称 : "Total Conso Cold Water"单元_of _measurement: "L" 精度 _ 十进制: 2 Lambda: |- return id(total _eau _potable).state - id(total _eau _chaude)。
在几行中,这里是解释:
温度传感器(NTC):
- 使用NTC热敏电阻
- 在°C到小数点2位的测量值
- 级联配置 : ADC(A0)→ 电阻 → ntc
- 校准B常数为3950,引用25°C/50kΩ
两个水流传感器(脉冲_米):
- GPIO13上的饮用水,GPIO14上的热水
- 在输入模式下设置启用拉上
- 转换 : 乘以0.013(按77个脉冲/升校准)
- 5s 超时(如果没有脉冲则返回到 0)
- 100ms内部滤波器稳定播放
- 每个都有一公升总米
- 澄清: 流量小数点0个小数位,共计2个小数位数
计算传感器:
- 计算冷水消耗量
- 公式: 饮用水总量 - 热水总量
- 澄清: 2个小数位数
我选择我保留的传感器

我将保留最后四个传感器,停用其他传感器,并通过以下方式重命名它们:
- 温度 _eau _chaude
- 传感器.esphome _total_eau _potable
- 传感器.esphome_total_eau_chaude
- 传感器.esphome_total_eau_froide


我添加了3个偏移传感器
当D1 Mini V4重新启动(例如果汁切割)时,计数从零开始。
所以我通过传感器组织了总计数的计算,该传感器给了我一个偏移的总和和以及当前计数的值。
因此,我添加了3个偏移实体。 对于纯粹主义者来说,只有两个是强制性的,第三是可以计算的。
因此,在设置/产品和服务/输入中,我添加了一个条目。

然后 编号


因此,这创建了 input_number.eau _froide _offset。
我这样做是为了另外两个补偿。

我选择使用『饮用水』用于通过饮用水计的所有东西,即总消耗量: 冷水+热水。
我添加了 3 个自动化来管理 D1 Mini 计数器重置
D1 Mini有一个尺寸缺陷,在重置时它失去了仪表的价值,所以一切都从头开始,所以它不适合我。
我注意到,在重置时,传感器在返回到零之前切换到『不可用』状态。
因此,我将把前一个不可用的状态赋值给一个输入_number,作为总计数的校正值。
为了使它更简单,我做了3个自动化来做到这一点:
化名 : 在不可用的触发器上抵消热水: Entent_id : Sensor.esphome _total_eau _chaude 用于: 不可用的触发器 : 国家行动: 目标 - 目标: entity_id : input_number.eau _chaude _offset 数据: 值 : >- { States('input_number.eau _chaude _offset')| float + trigger.from _state.state float } 动作: input_number.set_value 模式: 单一别名: 在不可用触发器上抵消冷水: Entent_id : Sensor.esphome _total_eau _froide 用于: 不可用的触发器 : 国家行动: 目标 - 目标: entity_id : input_number.eau_froide_offset 数据: 值 : >- { States('input _number.eau _froide _offset')| float + trigger.from _state.state float } 动作: input_number.set_value 模式: 单一别名: 在不可用的触发器上抵消饮用水: Entent_id : Sensor.esphome _total_eau _potable : 不可用的触发器 : 国家行动: 目标 - 目标: entity_id : input_number.eau _potable _offset 数据: 值 : >- { States('input_number.eau _potable _offset')| float + trigger.from _state.state float } 动作: input_number.set_value 模式: 单 人 单
对于每种类型的水(热、冷、饮用),当传感器不可用时:
- 自动化在断开连接前捕获最后一个已知值
- 此值被添加到存储在 input_number 中的偏移计数器中
- 这即使在传感器重新启动后也能保持总累积。

我宣布最终消费传感器
在我的Templates.yaml文件中,我添加了这三个传感器:
传感器: 姓名: 单瓶饮用水消耗量: Sensumption _eau_potable unit _of _measurement: "L" 设备 _ 类 : 水态级: Total_increasing 状态 : > {% set measure_current = state('sensor.esphome_total_eau _potable')| float %} {% 设置总值 _offset = state('input_number.eau _potable _offset')| float %如果 state('sensor.esphome _total_eau _potable')!='unavailable' else total _offset }} - 名称: "Cold Water Consumption": Sensumption _eau _froide unit _of _measurement: "L" 设备 _ 类 : 水态级: Total_increasing 状态 : > {% set measure_current = state('sensor.esphome_total_eau_froide')| 浮点数 %} {% 设置总值 _offset = state('input_number.eau _froide _offset')| float %如果 state('sensor.esphome _total_eau_froide')!='unavailable' else total _offset }} - 名称: 单曲"Hot Water Consumption": Sensumption _eau _chaude unit _of _measurement: "L" 设备 _ 类 : 水态级: Total_increasing 状态 : > {% set measure_current = state('sensor.esphome_total_eau _chaude')| 浮点数 %} {% 设置总值 _offset = state('input_number.eau _chaude _offset')| float %如果 state('sensor.esphome _total_eau _chaude)!
这些传感器是虚拟传感器(模板),可以持续跟踪耗水量。 让我们来分析一下它们是如何工作的:
数据来源:
- 物理传感器 ESP Home(sensor.esphome_total_eau _*)
- 偏移计数器(input_number.eau _*_offset)
措施的类型:
- 饮用水: 总入水量
- 热水: 热水消耗
- 冷水: 冷水消耗
共同特点:
- State_class : Total_increasing : 表示持续增加的仪表
- _ 测量单位: "L": 公升测量值
操作逻辑:
{% 设置 measure_current = state('sensor.esphome_total_eau _*')| float %}
{% 设置总值 _offset = state('input_number.eau _*_offset')| float %}
{{ total _offset + measure _current if state(…)!='unavailable' else total _offset } }
- 如果 ESP 传感器可用: 总值 = 抵消 + 当前度量
- 如果 ESP 传感器不可用: 总计 = 仅抵消
我配置记录器
我们必须记住保留我们需要的东西,但也不要记录那些没有用的东西。
所以在记录器配置中,我放入了:
包括: entity_globs : [...] - input_number.eau _* - sensor.consumption _eau _* 排除: entity_globs : [...] - 传感器.esphome*
我正在测试D1 Mini V4的重置
最后,我有
- 3 input_number,作为偏移量,
- 3个传感器,给了我D1 Mini的电流计值
- 3个计算传感器,给我永久米值

在现阶段,D1从未重新启动,因此D1计数器和永久计数器是相同的。
我拔掉并重新连接D1 mini,传感器在重置时间将不可用,然后返回到0。

此时,Offset 取取计数器的最后一个值。 然后D1 mini重新连接到Home Assistant:

永久计数器包括 D1(0)计数器的偏移值 + 值。
我跑一点热水和一点冷水,偏移不动,但仪表显示正确的值:

所以我只为我的仪表板和conso统计保留了最后3米。
结果 , 结果



如果必须再做一次(想法或反馈)
- 我会使用带有温度传感器的涡轮机,即使是冷水,我很想知道温度,特别是在冬天。


