Soil moisture and temperature sensor data per soil node, at 2 depths

Soil node readings at 2 depths about every 10 minutes, plus hourly and daily roll-ups, 17 fields across 3 datasets, the series the soil-window models and the water balance read.

Catalogue entries: Soil node readings, Hourly soil roll-up, Daily soil roll-up.

Questions this data answers

  • Does the field need water today: how wet is the root zone at 2 depths right now, and which depth is drying faster?
  • When did the last irrigation or rain reach the soil, and how quickly has the profile dried since?
  • What is the soil temperature at root depth overnight, the reading the scab and rhizoctonia models need?
  • Are both soil nodes reading alike, or has one drifted, moved or lost its cell?
  • How has soil moisture developed over the last 30 days between irrigations, for tuning the schedule?

3 views of 1 node

A soil node reports about every 10 minutes on its own radio link, entirely independent of the weather station. The raw view is every packet as it arrived: 2 moisture channels and 2 temperature channels, battery and link quality, all tagged by node. The hourly view takes the mean of each channel per hour, the exact series the soil-window disease models read. The daily view takes the day’s mean along with battery and link quality, the shape the water balance turns straight into millimetres.

Moisture scale

A node reports moisture on its own 0 to 100 scale, not in volume percent. The soil baseline instead gives field capacity and wilting point for the location in volume percent, and the water balance is where those 2 scales finally meet. At Naivasha the probe reads 72 to 74 against a field capacity in the 30s, so the balance reports saturated and marks its own output as a sensor proxy until someone calibrates the probe, a 2-point fit done once per node. It’s exactly the failure mode a buyer of a soil node should know about going in.

Reading the soil sensor data samples

The 24-hour chart shows both moisture channels running flat, the deeper channel reading a point wetter than the shallow one, with no irrigation and no rain anywhere in the window. Soil temperature moves only 2 degrees over the day where the air above it moves 14, and lags the air by hours besides. The 30-day chart shows a month of daily means per node; the second node, sitting a few metres away, tracks the first within 1 or 2 points throughout. When the 2 nodes diverge, one of them has moved, dried out at the contact, or lost its cell, and the battery column says exactly which.

Joining the soil sensor data with other datasets

Soil against air: join on the hour or the day with the weather station data. Soil against irrigation: the water balance runs 1 row per station per day on that same stamp. Soil against the crop: the satellite indices run weekly, so aggregate this series up to weeks first before joining it.

Access to the soil sensor data

A key sees only the nodes approved on its own account and nothing beyond that; dev_eui in a query gets set from that same list and simply cannot reach a node on another farm.

Soil node readings

Raw ~10-minute uplinks from soil probes. Nodes uplink independently of the gateway; gateway_id is a logical farm key only.

The last uplinks from 2 soil nodes, the potato station at Naivasha, 2,490 m

Time UTCNodeMoisture ch1 %Moisture ch2 %Temp ch1 °CTemp ch2 °CBattery mVRSSI dBmSNR dB
09:38node 1768216.717.23200-115-2.8
09:39node 2718316.617.13480-1130.8
09:48node 1768216.717.33198-115-0.8
09:49node 2718316.617.13486-1124.2
09:58node 1768216.717.33198-117-1.2
09:59node 2718416.617.13458-1105.5
10:08node 1768216.717.33194-1131
10:09node 2718416.617.13442-1096.2
10:18node 1768216.717.23190-116-2.2
10:19node 2718416.717.13434-115-2.2
10:28node 1768216.717.23188-116-1.2
10:30node 2718416.717.13426-1123.5

Each node carries 2 depth channels. Moisture is the codec's 0 to 100 scale, so 72 is a reading against the probe's own range; the water balance converts it with the soil baseline. RSSI near −116 dBm is a long link that still decodes.

Dataset idfarm.soil.raw
Cadence~10 min
EndpointGET /farm/soil
Key scopefarm:read
Declared fields8
History2026-03 to today
Coverageyour own soil nodes
StatusOwn sensors, own account

Narrowed to your own gateways and to devices approved for API exposure.

Only for the account that owns the hardware. Readings and everything computed from them are served to keys on the owning account and to nobody else. The way to get this dataset is a station on your own field, or your own sensors sent in through Sensor Ingest. A NuaSense station on the field is what produces these rows; the hardware is described at nuasense.com/products.

Fields

FieldUnitNote
soil_moisture_1%depth channel 1
soil_moisture_2%depth channel 2
temperature_1°Cdepth channel 1
temperature_2°Cdepth channel 2
battery_mvmV
battery_pct%
rssidBm
snrdB

Filters

gateway_iddev_euinode_idapplication

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/farm/soil \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d start=-24h -d dev_eui=…

Through the MCP connector the same read is the platform_dataset tool with dataset=farm.soil.raw. Through a scheduled export it is one job with the same filters, delivered as a file. Every dataset takes the same arguments: start and end, every with agg, fields, limit up to 5,000, order, and the tags it declares.

Hourly soil roll-up

Hourly means from the soil probes: moisture and temperature at both measured positions, rolled up server-side from the raw uplinks of each node.

24 hours at 2 depths, node 1, the potato station at Naivasha, 2,490 m

Both channels flat across the day: no irrigation and no rain in the window, and the deeper channel a point wetter than the shallow one.
Soil temperature lags the air by hours and swings by 2 degrees where the air swings by 14. The soil-window models for scab and rhizoctonia read this series.
Dataset idfarm.soil.hourly
Cadencehourly
EndpointGET /farm/soil/hourly
Key scopefarm:read
Declared fields4
History2026-03 to today
Coverageyour own soil nodes
StatusOwn sensors, own account

Narrowed to your own gateways and to devices approved for API exposure.

Only for the account that owns the hardware. Readings and everything computed from them are served to keys on the owning account and to nobody else. The way to get this dataset is a station on your own field, or your own sensors sent in through Sensor Ingest. A NuaSense station on the field is what produces these rows; the hardware is described at nuasense.com/products.

Fields

FieldUnitNote
soil_moisture_1%
soil_moisture_2%
temperature_1°C
temperature_2°C

Filters

gateway_iddev_eui

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/farm/soil/hourly \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d start=-24h -d dev_eui=…

Through the MCP connector the same read is the platform_dataset tool with dataset=farm.soil.hourly. Through a scheduled export it is one job with the same filters, delivered as a file. Every dataset takes the same arguments: start and end, every with agg, fields, limit up to 5,000, order, and the tags it declares.

Daily soil roll-up

Daily means from the soil probes: moisture, temperature and the node's battery and radio state, rolled up server-side from the raw uplinks.

30 days, daily means per node, the potato station at Naivasha, 2,490 m

32 daily rows for this node. A drying curve between irrigations is the shape the water balance turns into millimetres.
32 daily rows for this node. A drying curve between irrigations is the shape the water balance turns into millimetres.
Dataset idfarm.soil.daily
Cadencedaily
EndpointGET /farm/soil/daily
Key scopefarm:read
Declared fields5
History2026-03 to today
Coverageyour own soil nodes
StatusOwn sensors, own account

Narrowed to your own gateways and to devices approved for API exposure.

Only for the account that owns the hardware. Readings and everything computed from them are served to keys on the owning account and to nobody else. The way to get this dataset is a station on your own field, or your own sensors sent in through Sensor Ingest. A NuaSense station on the field is what produces these rows; the hardware is described at nuasense.com/products.

Fields

FieldUnitNote
moisture_raw%
temperature°C
batterymV
rssidBm
snrdB

Filters

gateway_iddev_euinode_idapplication

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/farm/soil/daily \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d start=-24h -d dev_eui=…

Through the MCP connector the same read is the platform_dataset tool with dataset=farm.soil.daily. Through a scheduled export it is one job with the same filters, delivered as a file. Every dataset takes the same arguments: start and end, every with agg, fields, limit up to 5,000, order, and the tags it declares.