大家好!今天我想和大家分享一个我最近捣鼓的“智能花园管家”项目——如何用 Home Assistant (HA) 构建一个基于天气预报和土壤湿度数据的智能灌溉系统。告别靠感觉浇水,让你的花园真正聪明起来!
为什么选择智能灌溉?
传统浇水常常凭经验,要么浇多了浪费水,要么浇少了植物遭殃。有了智能灌溉:
- 节水环保:只在需要时浇水,避免不必要的浪费,对环境更友好。
- 植物健康:根据实际需求精准补水,减少病虫害风险,促进植物健康生长。
- 省心省力:自动化运行,解放你的双手,即使出门在外也无需担心。
- 科学管理:数据驱动,让灌溉决策更科学。
核心组件一览
要实现智能灌溉,我们需要以下几个关键“大脑”和“手脚”:
- Home Assistant (HA) 服务器:这是整个系统的核心大脑,负责收集数据、执行自动化。你可以用树莓派、旧电脑或虚拟机来搭建。
- 智能阀门或继电器:用来控制水路的开关。
- 如果你现有的是普通电磁阀,可以搭配智能继电器模块(如 Sonoff Basic R3/R4 或 ESPHome 自制模块)来控制。
- 市面上也有直接集成了Wi-Fi/Zigbee/Z-Wave 的智能灌溉阀门或控制器。
- 土壤湿度传感器:用于实时监测土壤湿度。
- 模拟传感器:成本低廉,如电容式土壤湿度传感器,通过 ESPHome 等微控制器接入 HA。
- 数字传感器:如 Zigbee 协议的土壤湿度传感器,可以直接接入 HA 的 Zigbee 协调器。
- 气象数据源:获取天气预报信息。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.花园灌溉阀门
。 - 记录日志,方便追踪。
- 打开
进阶技巧与注意事项
- 传感器校准:土壤湿度传感器需要校准。将传感器置于完全干燥的土壤和充分湿润的土壤中,记录读数,然后根据这些数据来设置你的阈值或进行线性转换。
- 多区域灌溉:如果你的花园有多个灌溉区域,你可以为每个区域设置独立的传感器和阀门,并创建独立的自动化规则,甚至可以设置它们轮流浇水,避免水压不足。
- 手动覆盖:务必设置一个手动开启/关闭灌溉的开关或按钮,以便在特殊情况下进行干预。
- 安全第一:处理水和电时务必小心,确保所有电气连接防水、安全。使用低压电磁阀和传感器可以降低风险。
- 季节性调整:不同季节植物对水的需求不同,你可能需要根据季节调整湿度阈值或灌溉时长。可以通过 HA 的
input_number
辅助实体来动态调整参数。 - 故障通知:可以添加自动化,在传感器离线、阀门未按预期开启/关闭时发送通知给你。
总结
通过 Home Assistant,我们完全可以打造一个高度智能、个性化的花园灌溉系统。这不仅能让你的花园焕发活力,还能让你在享受科技便利的同时,为环保贡献一份力量。
这个项目是一个很好的起点,你可以根据自己的需求和创意,不断地扩展和优化。祝你的花园越来越美丽!如果你在搭建过程中遇到任何问题,欢迎随时交流讨论!