Analyse ZENTRA Cloud Data Online — Three Header Rows, Ports and All
Read as delimited textNo dedicated reader yet, and the generic one already handles the two things that break spreadsheets: the byte-order mark and the three-row header.
A ZENTRA Cloud export opens in a spreadsheet looking almost right, and then the timestamp column turns out to be text, or the first column heading has an invisible character glued to the front of it. Both are the same file doing what it always does. This page is what is in that file, port by port, and what happens to each part of it when you drop it in here.
Drop it here
Open the resampler and drag the file onto it — as it came off the logger, header lines and all. It reads the file in this browser tab: nothing is uploaded, there is no account, and no request goes out while you work.
Open the file readerWhat the export looks like
z6-14345,Port1,Port1,Port2,Port2,Port7 # Records: 3,ATMOS 41,ATMOS 41,TEROS 12,TEROS 12,Battery Timestamps, °C Air Temperature, % Relative Humidity, m³/m³ Water Content, °C Soil Temperature, mV Battery Voltage 06/01/2026 12:00:00 AM,18.4,62.1,0.284,17.9,4102 06/01/2026 12:15:00 AM,18.6,61.8,0.283,17.9,4101
The awkward parts, and what happens to them
- A byte-order mark on the first character, always. It attaches itself to the first column heading, which then matches nothing, and the symptom is software that inexplicably ignores your timestamp column.
- Stripped before anything looks at the header.
- Three header rows before the data starts.
- The table is found and the readings are read from underneath them.
- Twelve-hour timestamps — 06/01/2026 12:00:00 AM — which are month-first and use midnight as 12 AM.
- Read as instants, fifteen minutes apart, with the AM and PM applied.
- A missing reading is an EMPTY field rather than a marker. Nothing tells you it is missing except the absence.
- Read as missing rather than as zero, so the line breaks where the sensor stopped.
- A locale export with semicolons and decimal commas, which is what a European browser session sometimes produces.
- The separator and the decimal mark are both sniffed from the file.
- Ports are sparse and non-contiguous — 7 and 8 are the battery and the barometer — and the number of columns per port is not fixed.
- Every measurement column is kept as its own channel. What is not yet done is pairing the three rows back together, so a channel is not yet called "Air Temperature (°C) on Port 1".
Every line above is asserted by src/core/timeseries/__tests__/vendorFallback.test.ts, src/core/timeseries/__tests__/parse.test.ts, which runs on every change to this site’s code.
What has not been checked
- Everything on this page describes the ZENTRA Cloud CSV export. The ZENTRA Utility desktop export and the xlsx export were not available to check and nothing is claimed about either of them — if you have one, it will still be read, just not with any of the knowledge on this page behind it.
- The unit encoding depends on a download option: you can get m³/m³ and °C, or the ASCII forms m3/m3 and degree_C. Both occur. Sensor model names on row 2 drift between firmware versions, so nothing here matches them exactly.
- Per-port channel naming is the obvious thing a dedicated reader would add, and it does not exist yet. The test suite records what the general reader produces today precisely so that the improvement is measurable rather than asserted.
Why the first column heading has something stuck to it
The export always begins with a byte-order mark: three bytes that say "this is UTF-8" and are then, in most software, silently included in the first thing they touch. That first thing is the device serial in row 1, and one row down it is the word Timestamps. A tool that matches the heading exactly no longer matches it, which is why a ZENTRA file so often opens with everything present except the times.
It is stripped here before anything reads the header, which is the whole fix. If you are fighting the same thing in a spreadsheet, importing as UTF-8 rather than opening the file directly usually does it.
A note on the March 2026 migration
METER moved customers to ZENTRA Cloud 2.0, and a forced migration is the moment a lot of people go looking for somewhere else to put their data. Nothing on this page is advice about that migration and nothing here replaces a logger cloud — this reads files, it does not collect from a device.
What it does mean in practice is that an export you took before the migration and an export you take after it may not be the same shape. Both will still be read; if the newer one turns out to differ in a way worth knowing about, this page is where it will be written down.
Common questions
- My soil moisture column reads as text.
- That is usually the m³/m³ unit encoding, or a decimal comma in a locale export. Both are handled here — the separator and the decimal mark are worked out from the file rather than assumed — so try dropping the file in unmodified before editing it.
- Can I get the port numbers back onto the channel names?
- Not yet. Every measurement column is read as a channel with the name row 3 gives it, and pairing that with the port in row 1 and the sensor model in row 2 is what a ZENTRA-specific reader would add. The test suite records exactly what happens today so that when it changes, it changes visibly.
- Does the file leave my machine?
- No. It is read in your browser tab, and there is nowhere here to upload anything to.