DeepLeaf Yield DeepLeaf Yield

Climate CSV import

Climate files go to Climate CSV in the app, or POST …/climate/csv. DeepLeaf Yield reads most climate computer and logger exports as they are, and shows what it found before anything is saved.

The Climate page in the app at Records, Climate: Climate CSV and Add reading buttons, the crop cycle picker, and the sensor readings table, newest first, with time, metric, value, and source badges, each row with Edit and Delete.
The Climate page. Climate CSV opens the upload, which checks the file before it is imported.

Automatic detection

A file that doesn't use DeepLeaf Yield's own column names is read without a mapping. DeepLeaf Yield finds:

  • the header, below any lines of export details above it;
  • what each column holds, from column names in English, Dutch, Spanish, or French;
  • units in the header, such as Temp (°C), or in a units row under it, and converts °F, hPa, Pa, µS/cm, and mL/m² to the stored units;
  • separate date and time columns, and 12-hour clocks;
  • several compartments in one file;
  • whether dates are written day first or month first.

Anything it can't settle, such as a unit that could be °C or °F, is listed as a problem to fix, never guessed. A file with problems is not imported.

Check before you import

  1. Choose the file under Climate CSV and press Check the file.
  2. Read What will be imported: the layout, each column with its unit and conversion, the time range, and the first rows as they would be stored. Untick a column to leave it out.
  3. If the file holds several compartments, choose one under Compartment. Import the others into their own greenhouse's crop cycle.
  4. If every date could be read either way, such as 04/05, choose Day first (31/12) or Month first (12/31) under Date order. Otherwise the order is read from the time steps between rows.
  5. Press Import. Exactly what was checked is stored. A reading already stored for that time, metric, and source is kept, not doubled.

On the API, POST …/climate/csv/preview returns the same check and stores nothing. Send its mapping back with the upload to import exactly what was previewed.

Long or wide

DeepLeaf Yield's own layouts are read directly. Long: one reading per line.

timestamp,metric,value,source
2026-09-29 08:00,temperature_c,23.5,logger
2026-09-29 08:00,humidity_pct,71,logger

Wide: a timestamp column, then one column per metric. The source comes from the form's source field, default csv.

timestamp;temperature_c;humidity_pct;co2_ppm
2026-09-29 08:00;23,5;71;650

Column mapping

Only when detection reads a column wrongly, name the columns under Name the columns yourself (the columns form field):

GHtime=timestamp,Tair=temperature_c,RHair=humidity_pct,CO2air=co2_ppm

Columns left out of the mapping are ignored, and no detection is used.

Delimiters, decimals, and empty cells

  • Commas, semicolons, and tabs all work as separators.
  • With semicolons or tabs, a comma is read as the decimal mark, so 23,5 is 23.5.
  • Empty cells, NaN, -, and #N/A are skipped, and so are repeated header rows.
  • A byte-order mark from a spreadsheet export is dropped. The file must be UTF-8.

Times

  • ISO times such as 2026-09-29 08:00 or 2026-09-29T08:00+01:00.
  • Spreadsheet serial days such as 43326.0034722 (Excel dates) are read as times.
  • A time without an offset is read in the greenhouse time zone, or as UTC when the greenhouse has none. An offset written in the time, or a time column marked UTC, always wins.
  • Times are stored in UTC.