用于Home Assistant,ESP8266和MiFlora的自动花园浇水系统



前段时间,我的家人在一个非常温暖和干旱的地方有一所带小花园的房子,我们面临着定期浇水的问题。

我希望灌溉系统是自动的,在选择灌溉系统时,我必须考虑以下条件:

  • 必须以所有可用方式节约的非常昂贵的水
  • 花园中各种植物对水分的需求,从多肉植物到喜欢水分的植物
  • 在没有人的情况下需要完全自动浇水,最好是可以远程控制
  • 不能避免灌溉错误的干旱气候

在评估了在本地DIY网络和亚马逊上找到的现成的解决方案并阅读了有关其可靠性(通常不是最高的)的评论之后,我们决定尝试自己做一些事情。

免责声明:作者不是IT专家,也不声称自己是该主题的专业知识。项目执行的水平是一种爱好。作者非常了解他在编程和电子领域的知识水平,并将非常感谢您为改进和优化所用解决方案提供的建议。

电路原理图


花园分为四个灌溉区,每个灌溉区都配备了单独的土壤湿度传感器,可以根据单独的时间表和不同的水量浇水。
在地面上,铺设带孔的滴灌PND管,这些管与会聚在集水单元中的管相连,并通过电磁阀与供水相连。阀由连接到ESP8266(Sonoff 4Ch)的继电器控制。

夜间由计时器来浇水,以增加被吸收到地下且不会被太阳蒸发的水量。

在计划的浇水时间,检查是否符合以下条件:

  • 土壤水分低于预定值
  • 接下来的2天没有足够的预计降水
  • 不超过此管线的灌溉水限制

二手设备


已安装HassIO的Raspberry Pie(已安装)

ESPHome固件ESP32 DevKit,用作MiFlora的蓝牙网关并从有线湿度传感器接收数据。

有线湿度传感器电容式土壤湿度传感器v1.2位于花园中,可测量最接近ESP32安装地点的浇水区中的湿度,MiFlora

传感器通过BLE连接到ESP32,后者可测量偏远浇水区中的湿度。

SONOFF 4Ch(用ESPHome缝制)位于进水单元中,所有浇水区的管道都从那里进来。4个常闭电磁阀,电压

为220V位于水位上并连接到Sonoff 4Ch。打开供水进行灌溉。选择了一个常闭模型,以使在电气和电子设备发生任何故障时“泛滥”的可能性最小,并使所需的继电器输出数量最小。

脉冲水表位于进水单元中灌溉系统的入口,并与Sonoff 4ch连接。允许将水流量数据完全传输给Home Assistant,并实现给定数量的灌溉功能。事实证明,在此版本的Sonoff上,固件的触点已经焊接好了,甚至还有一个免费的GPIO02-上面挂着一个脉冲计数器,这是非常成功的。


它看起来像一个装有阀门和水表的集热器。控制器(sonoff 4Ch)没有进入机架,它已安装在IP65防护罩中半米的位置

ESPHome和家庭助理设置


索诺夫4ch
ESPHome , :

switch:
  - platform: gpio
    name: "   1"
    pin: GPIO12
    id: sw1
    icon: mdi:water
  - platform: gpio
    name: "   2"
    pin: GPIO5
    id: sw2
    icon: mdi:water
  - platform: gpio
    name: "   3"
    pin: GPIO4
    id: sw3
    icon: mdi:water
  - platform: gpio
    name: "   4"
    pin: GPIO15
    id: sw4
    icon: mdi:water
binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: button
    pin:
      number: GPIO2
      mode: INPUT_PULLUP


电容式土壤湿度传感器v1.2
ESPHome:

sensor:
  - platform: adc
    pin: GPIO34
    filters:
      - lambda: |-
          if (x > 3.22) {
            return 0;
          } else if (x < 1.65) {
            return 100;
          } else {
            return (3.22-x) / (3.22-1.65) * 100.0;
          }
    name: "   1  "
    update_interval: 60s
    attenuation: 11db
    unit_of_measurement: "%"
    accuracy_decimals: 0
    icon: mdi:water-percent

(ADC)
, ( 3.22 ) (1,65 ). log' ESPHome HassIO .



ESP32 Home Assistant ,

脉冲水表
«», ( ). — , , ( — 3 10 ).
, GND GPIO .

ESPHome :

binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: counter
    pin:
      number: GPIO2
      mode: INPUT_PULLUP

Home Assistant :

(counter),
(, «» ). — counter, ESPHome, sensor, counter ( ).

2 — , «». , , .

( automations.yaml )
- alias:     
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  action:
  - data:
      entity_id:
      - counter.my_water_counter
    service: counter.increment
- alias:    1 
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  condition:
    - condition: state
      entity_id: switch.sistema_poliva_liniia_1
      state: 'on'
  action:
  - data:
      entity_id:
      - counter.my_water_line1, counter.my_water_line1t
    service: counter.increment    


configuration.yaml +

sensor:
  - platform: template
    sensors:
      water_counter:    
        unit_of_measurement: 'M3'
        value_template: "{{ (states('counter.my_water_counter')| float)/1000 }}"    
counter:
  my_water_counter:
    initial: 2.667
    step: 10
  my_water_line1:
    name: " 1     ()"
    initial: 0
    step: 10
  my_water_line1t:
    name: " 1   ()"
    initial: 0
    step: 10



MiFlora传感器
MiFlora ESPHome , esphome.io
Home Assistant — , , «» . — , .

虚拟降雨传感器
— . , .

darksky. , Apple « ». API , , , , HA . darksky, , .

2 :

configuration.yaml sensors.yaml

sensor:
  - platform: darksky
    api_key: xxxx_your_API_key_xxxx
    forecast:
      - 1
      - 2
    monitored_conditions:
      - precip_intensity

HA : sensor.dark_sky_precip_intensity_1d sensor.dark_sky_precip_intensity_2d, .

template-sensor:

configuration.yaml sensors.yaml

sensor:
  - platform: template
    sensors:
       rain2days:    
        unit_of_measurement: 'mm'
        value_template: "{{ (((states('sensor.dark_sky_precip_intensity_2d')| float)+(states('sensor.dark_sky_precip_intensity_1d')| float))*24)| round(3) }}"    

HA sensor.rain2days 2 .
, Darksky ,


收集完所有数据后,您可以直接进行浇水。

这就是我从家庭助理中的一个区域查看界面的方式:



在这里您可以设置用于灌溉的水量(使用滑块),并查看主要传感器和计数器的值。我为其中一条线路提供了接口,其余的一切都一样,仅在带有有线数据传感器的线路上要少一些。

在界面中,您会注意到一个“多余的”细节-辅助传感器“已达到标准”。它必须被引入,因为 我无法获得条件:当达到水量标准时,模板可以工作以停止自动化,结果,自动化只是检查该传感器的值。我确信可以使自动化的这一部分变得更简单,更优雅,但是我的水平还不够。

以下是生成的“拐杖”模板传感器的代码:

浇水充足传感器(在configuration.yaml或单独的文件中)
  - platform: template
    sensors:
      line4_status:
        friendly_name: " 4 -  "
        value_template: >-
          {% if states('counter.my_water_line4t')|float > states('input_number.slider4')|float %}
            yes
          {% elif states('counter.my_water_line4t')|float == states('input_number.slider4')|float  %}
            yes
          {% else %}
            no
          {% endif %}


开始浇水的自动化最终看起来像这样:

开始浇水(在automations.yaml或单独的文件中)
- alias:   4   23.01
  trigger:
    platform: time
    at: "23:01:00"
  condition:
   condition: and
   conditions:
#    
    - condition: numeric_state
      entity_id: sensor.rainfor2days
      below: 5
#      
    - condition: numeric_state
      entity_id: sensor.miflora_1_moisture
      below: 50
# ,       
    - condition: state
      entity_id: 'sensor.line4_status'
      state: 'no'
  action:
   - service: switch.turn_on
     entity_id: switch.sistema_poliva_liniia_4


浇水从傍晚开始,每条线在其自己的时间间隔开始。按开始时间进行分隔可让您使用一个进水水表来获取4条线上的数据。

在启动时,将检查三个条件:

  • 是否不超过今天的用水量限制(例如,如果打开了手动浇水)
  • 湿度是否超过50%(根据我们的条件观察,新洒的土壤的水分含量不超过60%)
  • 在接下来的两天内,预计不会出现大于5毫米的降水。

下一个自动化是禁用浇水:

禁用浇水(在automations.yaml或单独的文件中)
- alias:   4 
  trigger:
#      
  - entity_id: sensor.line4_status
    platform: state
    to: 'yes'
    for: 
      seconds: 5    
#   
  - platform: time
    at: "23:59:00"
#     
  - platform: numeric_state
    entity_id: sensor.miflora_1_moisture
    above: 65
#       
  - platform: state
    entity_id: switch.sistema_poliva_liniia_4
    to: 'on'
    for: 
      minutes: 60
  action:
   - service: switch.turn_off
     entity_id: switch.sistema_poliva_liniia_4


在自动化中,使用了多达4种触发方式,但是在大多数情况下,触发是由第一种触发的-“拐杖”传感器,该传感器监测超出极限的水量。出于安全原因,其余触发器大部分都已制成。

好吧,与此问题相关的最后一个自动化是重置每日计数器

将每日计数器清零(在automations.yaml或单独的文件中)

- alias:    4 
  trigger:
  - platform: time
    at: "00:00:01"
  action:
  - service: counter.reset
    entity_id: counter.my_water_line4t


项目经济学


灌溉系统控制部分的成本如下:(

在项目开始之前已经安装了HassIO的Raspberry PIE和在花园中带有涂层的WiFi路由器,我没有考虑它们)

UNIPUMP BCX-15 1/2“电磁阀(常闭)4 * 20欧元
Sonoff 4CH 17欧元
脉冲计Pulsar 8欧元
ESP32 DevKitC 3.5欧元
电容式土壤湿度传感器v1.2 2 * 0.67欧元
MiFlora传感器2 * 16欧元防护罩
,收集器,电线,配件

总计约50欧元总计:约190欧元

传感器和MK的安装时间大约是下午3-4点,持续了几个小时,但是大部分时间都花在了“发明自行车”和“拐杖”上,总的来说,工作很少。系统的物理组装大约花费了两个晚上。
一般而言,与“傻”计时器系统相比,节水量预计约为20-50%,按当地水价计算,该系统应在一个或两个季节内获得回报。

缺点和修改计划


该项目的结果显示了一些细微之处和进一步改进的机会。

特别是我将用24V型号代替220V电磁阀-该电压是灌溉系统的标准电压。在这种情况下,您将必须在系统上添加24V变压器,并将Sonoff 4Ch更改为具有干式触点的某些物体(例如Sonoff 4CH Pro或自组装的物体)。阀门本身更便宜(8欧元起),并减少了触电的可能性。

结果还表明,使用塑料管道时,供水压力过高,并且配件在灌溉周期中可能会泄漏。就我而言,这并不重要,所有配件都位于浇水地面上方,但是以良好的方式,您需要在进口处添加一个减压器以降低压力。

对于无法计量少于10升的灌溉用水量,我感到更加不高兴-该容积是这种水表的最小可测量量。这个问题可以通过拆解柜台并更换轮子来解决,但是直到那时手还没有到达那里。

All Articles