Field polygons and sensor settings: crop assignment, phenology dates, degree-days

Field polygons as GeoJSON with crop and area, and per-node settings with crop assignment, planting and phenology dates, last spray date and the growing-degree-day accumulator. 25 fields across 2 datasets.

Catalogue entries: Field polygons, Sensor settings.

Questions this data answers

  • Which fields and crops are registered on the account, with what area, so the satellite and risk layers know what to compute?
  • Which risk models run on each node, from the crop assigned to it?
  • Which model windows are open right now, from the planting, emergence and tuber-initiation dates on file?
  • How many degree-days has the crop accumulated since the planting date the farmer entered?
  • Is the spray advisory still in its waiting period after the last recorded spray?

2 datasets of configuration

Both describe the farm rather than measure anything on it directly. Field polygons are the shapes the satellite pipeline averages inside every week: a name, a crop label, the polygon as drawn, and the area computed straight off it. Sensor settings carry each soil node’s display name, crop assignment, the season’s key dates, the last spray date, a node’s own position where it differs from the station’s, and the growing-degree-day accumulator the platform advances every single hour.

What the dates gate

The potato models are gated entirely by crop stage. Late and early blight only start accumulating severity from emergence onward. Common scab gets evaluated solely inside a window after tuber initiation, which is exactly why its tile reads low for most of the season regardless of conditions. Row closure changes the canopy microclimate the leaf-wetness proxy assumes. Haulm kill closes the season outright for every model at once. A row with no dates simply runs the models ungated and records that fact in the risk dataset’s own metadata, so a reader can always tell a genuinely low score from an ungated one.

Crop labels

Free-text labels get normalised before they can select a model set: potatoes, Irish, viazi all map to potato; onions, kitunguu map to onion; coffee, kahawa, arabica map to coffee. A group label such as vegetables deliberately maps to nothing, since a group names several crops at once and the farm has to say which. A weather-only station with no soil node instead takes its crop from the farm profile, or from a field polygon if one exists.

Polygons in practice

A field of 2 hectares typically comes out to 6 to 12 vertices and about 200 optical pixels. Fields under roughly half a hectare hold too few pixels for a stable mean and get flagged as such. A polygon crossing a road or a homestead pulls that road straight into the index, so draw the cropped area itself, never the whole parcel. Editing a polygon changes what next week’s run averages going forward; rows already written keep the values the old shape produced.

Field polygons

User-drawn field boundaries (GeoJSON) consumed by the satellite pipeline.

How a polygon is used

FieldValue in the exampleNote
field_namePotatoes Naivasha 1shown in the dashboard and the field indices
crop_labelpotatoread by the crop registry when no sensor carries a crop
area_ha2.1computed from the polygon on save
geometryGeoJSON Polygon, 7 verticesstored as drawn; consumed weekly by the satellite pipeline
gateway_idthe owning stationa field belongs to 1 station

1 field polygon exists on the demonstration account. The satellite indices dataset carries its field_id on every row.

Dataset idfarm.fields
Cadenceon edit
EndpointGET /farm/fields
Key scopefarm:read
Declared fields8
History2026-03 to today
Coverageyour own account
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
id—
gateway_id—
field_name—
crop_label—
geometry—GeoJSON jsonb
area_haha
created_at—
updated_at—

Filters

No tag filters. Narrow with start, end, fields and limit.

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/farm/fields \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d limit=50

Through the MCP connector the same read is the platform_dataset tool with dataset=farm.fields. 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.

Sensor settings

Per-sensor display name, crop assignment and GDD accumulator.

Phenology dates and the model windows they open

FieldSet byRead by
namethe user, per nodedashboard, alert messages
crop_label, crop_type_idthe usercrop registry → model set; threshold rules per crop
planting_date, emergence_datethe userdegree-day accumulators, blight severity start
tuber_initiation_date, row_closure_datethe usercommon scab window, canopy microclimate assumptions
last_spray_datethe user or the advisory enginespray-window cooldown
haulm_kill_datethe usercloses the season for every model
gdd_base7_to_datethe platform, hourlygrowing-degree-day accumulator since planting
location_lat, location_lonthe userper-node position where it differs from the station
Dataset idfarm.sensor_settings
Cadenceon edit
EndpointGET /farm/sensor-settings
Key scopefarm:read
Declared fields17
History2026-03 to today
Coverageyour own account
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
gateway_id—
dev_eui—
node_id—
name—
crop_label—
crop_type_id—
planting_date—
emergence_date—
tuber_initiation_date—
row_closure_date—
haulm_kill_date—
last_spray_date—
gdd_base7_to_date°C·d
gdd_last_accumulated_at—
location_lat°
location_lon°
updated_at—

Filters

No tag filters. Narrow with start, end, fields and limit.

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/farm/sensor-settings \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d limit=50

Through the MCP connector the same read is the platform_dataset tool with dataset=farm.sensor_settings. 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.