HOOOS

用 Home Assistant 打造智能花园灌溉:基于天气与土壤湿度的自动化指南

0 4 极客园丁 智能灌溉花园自动化
Apple

大家好!今天我想和大家分享一个我最近捣鼓的“智能花园管家”项目——如何用 Home Assistant (HA) 构建一个基于天气预报和土壤湿度数据的智能灌溉系统。告别靠感觉浇水,让你的花园真正聪明起来!

为什么选择智能灌溉?

传统浇水常常凭经验,要么浇多了浪费水,要么浇少了植物遭殃。有了智能灌溉:

  1. 节水环保:只在需要时浇水,避免不必要的浪费,对环境更友好。
  2. 植物健康:根据实际需求精准补水,减少病虫害风险,促进植物健康生长。
  3. 省心省力:自动化运行,解放你的双手,即使出门在外也无需担心。
  4. 科学管理:数据驱动,让灌溉决策更科学。

核心组件一览

要实现智能灌溉,我们需要以下几个关键“大脑”和“手脚”:

  1. Home Assistant (HA) 服务器:这是整个系统的核心大脑,负责收集数据、执行自动化。你可以用树莓派、旧电脑或虚拟机来搭建。
  2. 智能阀门或继电器:用来控制水路的开关。
    • 如果你现有的是普通电磁阀,可以搭配智能继电器模块(如 Sonoff Basic R3/R4 或 ESPHome 自制模块)来控制。
    • 市面上也有直接集成了Wi-Fi/Zigbee/Z-Wave 的智能灌溉阀门或控制器。
  3. 土壤湿度传感器:用于实时监测土壤湿度。
    • 模拟传感器:成本低廉,如电容式土壤湿度传感器,通过 ESPHome 等微控制器接入 HA。
    • 数字传感器:如 Zigbee 协议的土壤湿度传感器,可以直接接入 HA 的 Zigbee 协调器。
  4. 气象数据源:获取天气预报信息。HA 有很多气象集成,如 OpenWeatherMap、和风天气、本地气象局等。

HA 集成与配置

1. 接入土壤湿度传感器

方案一:基于 ESPHome 的模拟传感器

这是 DIY 玩家的首选,成本低,可定制性强。你需要:

  • 一个 ESP32 或 ESP8266 开发板。
  • 一个电容式土壤湿度传感器(避免电阻式腐蚀)。
  • 在 HA 中安装 ESPHome 插件。

在 ESPHome 配置文件中,你可以这样定义你的传感器:

# esp32-soil-sensor.yaml
esp32:
  board: esp32dev # 根据你的开发板调整

wifi:
  ssid: "你的WIFI名称"
  password: "你的WIFI密码"

ap:
  ssid: "ESP-Soil-AP"

ota: # 允许无线更新固件
  
logger: # 开启日志

api: # 开启Home Assistant API

# 配置模拟输入,连接土壤湿度传感器的模拟输出到ESP32的ADC引脚
sensor:
  - platform: adc # 模拟数字转换器
    pin: GPIO34 # 你的ESP32连接传感器的引脚
    name: "土壤湿度原始数据"
    id: soil_moisture_raw
    unit_of_measurement: "V" # 或其他你认为合适的单位
    accuracy_decimals: 2
    update_interval: 60s
    # 转换为百分比(这需要你根据实际情况校准)
    filters:
      - calibrate_linear: # 线性校准,根据你的传感器读数调整
          - - 0.0 -> 0.0 # 干燥时的电压读数(例如,空气中)
          - - 3.3 -> 100.0 # 湿润时的电压读数(例如,水中)
      - lambda: return x / 100.0; # 将百分比转换为0-1范围,如果需要
    # 最终的传感器值,如果你想直接显示百分比,可以去掉上面的lambda filter
    # 并将calibrate_linear的输出直接视为百分比
  - platform: template
    name: "花园土壤湿度百分比"
    id: garden_soil_moisture_percent
    unit_of_measurement: "%"
    value_template: "{{ (states('sensor.土壤湿度原始数据') | float * 100) | round(1) }}" # 假设你校准后,直接用原始值即可

编译固件并上传到 ESP32 后,HA 会自动发现这个设备,你就有了实时的土壤湿度数据。

方案二:Zigbee 湿度传感器

如果你的 HA 已经集成了 Zigbee2MQTT 或 ZHA,直接购买兼容的 Zigbee 土壤湿度传感器(例如 Aqara、Tuya 等品牌),配对后即可直接获取湿度数据,非常便捷。

2. 接入灌溉阀门

如果你用智能继电器控制普通电磁阀,将其配置为一个开关实体:

# configuration.yaml
switch:
  - platform: mqtt # 或者esphome, tuya, smartthings等
    name: "花园灌溉阀门"
    command_topic: "cmnd/sonoff_irrigation/POWER" # 根据你的继电器主题调整
    state_topic: "stat/sonoff_irrigation/POWER"
    payload_on: "ON"
    payload_off: "OFF"
    retain: true

如果你使用的是智能灌溉控制器(如 Hunter Hydrawise, Rain Bird 等),HA 通常也有对应的集成。搜索并添加集成即可。

3. 接入气象数据

在 HA 的“设置” -> “设备与服务” -> “添加集成”中搜索并添加你偏好的天气服务,比如“OpenWeatherMap”。配置好 API Key 和位置后,你就能在 HA 中获取到未来几天的天气预报,包括降雨概率、温度等。

# configuration.yaml (如果你手动配置,通常通过UI配置更方便)
weather:
  - platform: openweathermap
    api_key: YOUR_OPENWEATHERMAP_API_KEY
    name: "本地天气"
    mode: daily # 获取每日预报,也可以是hourly

你会得到类似 weather.本地天气 的实体,其 state 属性通常是 sunny, rainy 等,还有 forecast 属性包含未来详细预报。

设计智能灌溉自动化逻辑

现在,最关键的一步是构建自动化规则。我们的目标是:当土壤湿度低于某个阈值,并且未来一段时间没有降雨时,才进行灌溉。

这是一个基本的自动化示例:

# automations.yaml
- id: 'garden_smart_irrigation'
  alias: '花园智能灌溉'
  description: '根据土壤湿度和天气预报自动开启灌溉'
  trigger:
    - platform: time_pattern # 每天固定时间检查一次,比如早上6点
      hours: 6
      minutes: 0
  condition:
    - condition: numeric_state # 土壤湿度低于30%才触发
      entity_id: sensor.花园土壤湿度百分比 # 替换为你的土壤湿度传感器实体ID
      below: 30
    - condition: not # 检查未来24小时内是否有降雨预测
      conditions:
        - condition: template
          value_template: >
            {% set forecast = state_attr('weather.本地天气', 'forecast') %}
            {% if forecast %}
              {% set rain_predicted = false %}
              {% for day in forecast[:2] %} # 检查未来2天(或你可以调整为其他时间范围)
                {% if day.precipitation_probability is defined and day.precipitation_probability > 30 %} # 降雨概率超过30%视为有雨
                  {% set rain_predicted = true %}
                {% endif %}
              {% endfor %}
              {{ rain_predicted }}
            {% else %}
              false # 如果无法获取预报,默认不触发浇水
            {% endif %}
    - condition: numeric_state # 温度不能太低,例如高于5摄氏度
      entity_id: sensor.本地天气_temperature # 替换为你的天气温度实体ID
      above: 5
  action:
    - service: switch.turn_on
      target:
        entity_id: switch.花园灌溉阀门 # 替换为你的灌溉阀门实体ID
    - delay: # 灌溉15分钟,根据你的花园和植物需求调整
        minutes: 15
    - service: switch.turn_off
      target:
        entity_id: switch.花园灌溉阀门
    - service: system_log.write
      message: "花园土壤湿度低且无雨,已智能开启灌溉15分钟。"
      level: info
  mode: single

逻辑解析:

  • 触发器 (Trigger):每天早上6点检查一次。你也可以设置为湿度低于某个阈值时立即触发。
  • 条件 (Condition)
    • sensor.花园土壤湿度百分比 低于30%。
    • 使用模板条件判断 weather.本地天气forecast 属性,检查未来两天内是否有降雨概率超过30%。
    • sensor.本地天气_temperature 高于5摄氏度,避免低温浇水伤及植物。
  • 动作 (Action)
    • 打开 switch.花园灌溉阀门
    • 延迟15分钟(可以根据植物和季节调整)。
    • 关闭 switch.花园灌溉阀门
    • 记录日志,方便追踪。

进阶技巧与注意事项

  1. 传感器校准:土壤湿度传感器需要校准。将传感器置于完全干燥的土壤和充分湿润的土壤中,记录读数,然后根据这些数据来设置你的阈值或进行线性转换。
  2. 多区域灌溉:如果你的花园有多个灌溉区域,你可以为每个区域设置独立的传感器和阀门,并创建独立的自动化规则,甚至可以设置它们轮流浇水,避免水压不足。
  3. 手动覆盖:务必设置一个手动开启/关闭灌溉的开关或按钮,以便在特殊情况下进行干预。
  4. 安全第一:处理水和电时务必小心,确保所有电气连接防水、安全。使用低压电磁阀和传感器可以降低风险。
  5. 季节性调整:不同季节植物对水的需求不同,你可能需要根据季节调整湿度阈值或灌溉时长。可以通过 HA 的 input_number 辅助实体来动态调整参数。
  6. 故障通知:可以添加自动化,在传感器离线、阀门未按预期开启/关闭时发送通知给你。

总结

通过 Home Assistant,我们完全可以打造一个高度智能、个性化的花园灌溉系统。这不仅能让你的花园焕发活力,还能让你在享受科技便利的同时,为环保贡献一份力量。

这个项目是一个很好的起点,你可以根据自己的需求和创意,不断地扩展和优化。祝你的花园越来越美丽!如果你在搭建过程中遇到任何问题,欢迎随时交流讨论!

点评评价

captcha
健康