IoT — cold-chain monitoring with 42 freezer sensors

25 minutes. Two CSVs. You play the night-ops manager at a cold-chain warehouse and find the freezer whose temperature has been spiking.

Updated 2026-04-17

Industry: IoT / Cold chain Difficulty: Intermediate Time: 25 min Plan: Pro or higher for live MQTT

The scenario

You’re the night-ops manager at NorthChain Warehouse, a cold-chain 3PL storing frozen product for 40+ brands. You have 42 freezers across 4 rooms, each one publishing temperature every 5 minutes. If any freezer goes above -15°C for more than 30 minutes, your customers’ product is at risk and your contracts have financial penalties.

Right now you don’t have monitoring — you have someone checking a spreadsheet export every morning. That person is you, and you’re tired.

This tutorial uses a CSV export as the starting point. Once it works, you’ll switch to live MQTT (see Next steps).

Four questions:

  1. Is any freezer out of spec right now? — current-state check.
  2. Which freezer has been trending warm — not broken yet, but heading that way?
  3. Are any sensors dead — no readings in the last hour?
  4. Can we alert on all three — 24/7, route to Slack + SMS overnight?

Download the sample data

~169,000 rows · 14 days
telemetry.csv
Temperature at 5-min intervals per freezer. Includes a door_open flag, and has three realistic issues hidden in the data.
42 rows
freezers.csv
Freezer metadata — room location, target temperature, alarm threshold, install date.

Drop both into a chat. On Free plan, telemetry.csv (~8 MB) imports in under a minute.

01

Is anything out of spec right now?

Latest reading per freezer vs its alarm threshold.
Prompt
For each freezer, show the latest reading's timestamp and temperature. Join to freezers.csv to get the alarm threshold. Flag any freezer currently above its threshold, or any freezer whose last reading is more than 30 minutes old (sensor likely dead).
northchain · freezer status
step 1 · expected answer
Tablize
sql.query · latest reading per freezer × alarm threshold join 312 ms
2 of 42 freezers need attention. F-0032 has had no reading for 18 hours — sensor is likely offline. F-0017 is currently at -14.8°C, above its -15°C threshold.
FreezerRoomLast readingTempStatus
F-0032cold-room-218h agosensor offline
F-0017cold-room-21 min ago-14.8°Cabove threshold
F-0001 …cold-room-1~1–5 min ago~-18°Cok (40 freezers)
· Step 1 — F-0032 offline, F-0017 currently breaching
02

Which freezers are trending warm?

Early warning — freezers warming up over the last 72 hours, even if not yet alarming.
Prompt
For each freezer, compute the 24-hour rolling average temperature for each of the last 3 days. Flag any freezer whose rolling average has drifted up by more than 1°C over that period.

The Agent surfaces: F-0017 has been intermittently spiking above -15°C for 3 days — not consistent enough to show on the “latest reading” view but clearly pathological when you look at the trend. Likely a failing compressor or a defrost-cycle bug. Worth scheduling maintenance before it fails hard.

Keep it: + Save as daily Report — mornings, you get the week’s warming-trend list.

03

Sensor-health check

Dead sensors are as bad as dead freezers — you can't monitor what you can't see.
Prompt
For each freezer, compute the expected number of readings in the last 24 hours (1 every 5 minutes = 288). Show the actual count. Flag any freezer with fewer than 250 readings — that's a sensor or network issue.

The Agent ranks all 42 freezers by reading-count shortfall. F-0032 shows 0 readings in the last 18 hours, which was already caught in step 1 — but this query would also catch partial outages (readings every 15 minutes instead of every 5, e.g.).

Keep it: + Save as Script — reusable weekly sensor-health audit.

04

Set up the overnight Watch

One alarm rule that covers all three failure modes. Routes by severity.
Prompt
Create an always-on Watch that runs every 5 minutes. Alert if: (a) any freezer's last reading is above its threshold for more than 30 minutes (critical — Slack + SMS), or (b) any freezer's rolling 24h average has risen more than 1°C over 72h (warning — Slack only), or (c) any freezer has had no readings in 60 minutes (sensor issue — Slack only). Quiet hours don't apply.

The Agent creates the Watch with three sub-conditions, each routed differently. Test-fires it once — F-0017 and F-0032 trigger in the test.

Keep it: + Build Dashboard — a shop-floor screen showing live temp per freezer, color-coded by room. Open on the control-room TV full screen.

What you built in 25 minutes

  • 1 Report — daily warming-trend watch.
  • 1 Script — sensor-health audit, weekly.
  • 1 Watch — three-way alarm (critical / warning / sensor issue) with severity routing.
  • 1 Dashboard — live shop-floor screen.

You now have 24/7 cold-chain monitoring. Your night shift doesn’t check a spreadsheet; they get a Slack ping only when something’s wrong. The sensor-offline case used to take hours to catch — now it’s in your Slack within 60 minutes.

Next steps: switch from CSV to live MQTT

The CSV version of this tutorial is the static-data path. To run it live:

  • Point your devices at Tablize’s MQTT broker. See IoT, MQTT & cameras — credentials, topic format, QoS.
  • Re-ingest as a live table. Your telemetry table starts filling as devices publish. All the Reports / Watches you built on the CSV keep working — they query the same table name.
  • Enable push for the Dashboard. Swap the 5-second refresh for MQTT push — sub-second updates on the control-room screen.
  • Add the Spatial UI. Space → Room → Freezer → Temperature Point. Tablize’s Asset Graph gives you a clickable map of every freezer with live state, time-travel slider, and camera overlay if you wire cameras too.

Simulator — if you want to test the MQTT flow without real hardware, scripts/docs-samples/iot-simulator.py (coming soon) replays the telemetry.csv data onto a local MQTT broker at real-time speed.

Next steps in this industry

  • Read IoT, MQTT & cameras — full reference, including camera feeds and time-replay.
  • Read the Manufacturing tutorial — IoT in a factory setting, same primitives, different use case.
  • Explore Federation — if you run multiple warehouses, each workspace owns its own data; federation gives you a single roll-up view.

Nearby tutorials