Soil moisture sensor, API and soil moisture percentage

I’ve been using some zigbee soil moisture sensors with Home Assistant to periodically set the soil moisture level for each zone. I noticed the observed moisture level (field capacity) is nowhere near the estimated field capacity in the App. For starter the observed level ranges between 10% - 40%, which is always below 50% depletion line. It appears the moisture level reported in the app is not exactly the “field capacity”. Is there some kind of conversion function I can use to make the sensor data usable?

Field capacity explained per University of Florida
image
Source: AE460/AE460: Interpretation of Soil Moisture Content to Determine Soil Field Capacity and Avoid Over-Irrigating Sandy Soils Using Soil Moisture Sensors

3 Likes

I assume you just used the settings that Rachio did when you picked the grade, sun exposure, and soil type. You can set the soil properties and crop coeff manually to dial it closer to what your sensors say. Thats what I did over the season, watching how the moisture behaved with heavy rains, dry spells, and waterings.

1 Like

The moisture levels in Rachio aren’t showing you ACTUAL soil moisture, as you have found. Obviously, 100% soil moisture would mean your yard was under a lake.

In Rachio, 100+ represents field capacity for a zone and 0% would equal permanent wilting point. Since we don’t want to get to the point of death for the plant, we set allowed depletion to 50% (default), which means we will fill the tank back up when the moisture level in the soil is 50% of the value between field capacity and permanent wilting point.

I suppose you could calculate those figures, but they are going to be specific to your system and settings as the variables of your soil, climate, and vegetation is going to alter these figures.

1 Like

Since my soil type is loam, I assumed the witting point to be 9% and the field capacity to be 25%. I used a linear function to transform the sensor reading to the rachio scale.

6.25 * (sensor value - 9)

This way I’ll get “0%” scale at sensor value 9%, and “100%” scale at sensor value 25%.

Below is my automation config for home assistant, in case anyone wants to use it.

alias: Rachio Humidity Zone 1
description: ""
trigger:
  - platform: time_pattern
    minutes: /5
condition: []
action:
  - service: rachio.set_zone_moisture_percent
    data:
      percent: >-
        {{ (states('sensor.plaid_systems_ps_sprzms_slp3_humidity') | float - 9 |
        float) * 6.25 | float}}
    target:
      entity_id: switch.zone_1
mode: single
3 Likes

can you walk me through your code? Is this in the home assistant automations tab that is on the device page?

I have some soil sensors and a rachio 3 so i am interested but I am still learning

my version

action:
  - action: rachio.set_zone_moisture_percent
    data_template:
      entity_id: switch.front_yard
      percent: >-
        {% set sensor_value = states('sensor.front_average_moisture') | float %}
        {% set wilting_point = 9 %} 
        {% set field_capacity = 25 %} 
        {% set moisture_percent = ((sensor_value - wilting_point) / (field_capacity -
        wilting_point)) * 100 %} 
        {% if moisture_percent < 0 %}
          0 
        {% elif moisture_percent > 100 %}
          100 
        {% else %}
          moisture_percent |int
        {% endif %}