Temperature Monitoring
Live readings, historical trends, configurable thresholds and out-of-range notifications for cool rooms, freezers and more.
Core roadmapThe monitoring platform built for the businesses that need it most. Reimagining temperature, humidity and refrigeration intelligence for a connected world.
Stop Wondering. Start Monitoring. • A GEMXIT innovation
You don't need a PLC or a computer-controlled refrigeration system to know what's happening inside your cool room.
Not every butcher, florist, café, restaurant, seafood business or independent grocer has an industrial control system — and not every business needs one. That's exactly why we're bringing back TMS — Temperature Monitoring System.
TMS is being designed to give businesses straightforward temperature and humidity monitoring, useful historical trends and configurable alerts, whether their refrigeration is controlled by a simple thermostat or a compatible electronic controller.
Know when conditions drift outside your chosen limits, including when you're away from the business. Where a controller provides a documented compatible interface, TMS may also collect additional operating information — without replacing the existing refrigeration controls or safety protections.
Stop Wondering. Start Monitoring.
Register interest for 2027 ↗The all-new TMS roadmap brings essential environmental monitoring together with deeper refrigeration insight, without the complexity of a traditional PLC or SCADA deployment.
Live readings, historical trends, configurable thresholds and out-of-range notifications for cool rooms, freezers and more.
Core roadmapTrack environmental conditions and spot changes that could affect flowers, produce, stock and storage quality.
Core roadmapPlanned communication with compatible refrigeration controllers via appropriately isolated RS-485 adapters.
Compatibility dependentConfigurable limits, alert delays, offline-device detection and escalation workflows designed to reduce missed failures.
Core roadmapAWS-based IoT connectivity, device identity, encrypted communications and access to multiple locations in one place.
Planned architectureEquipment trends and diagnostics, with carefully safeguarded remote setpoint controls where supported by the existing controller.
Advanced roadmapImagine opening TMS and immediately seeing your cool room conditions, recent trends and equipment status — from a phone, tablet or browser.
Designed around a simple principle: critical information should be immediately understandable, even when you're away from the business.
Be part of the next chapter ↗A first look at the visual direction for the next TMS mobile experience — live temperature, humidity, equipment status, alarms and trends, wherever you are.
A modular architecture designed to grow from independent sensor monitoring into deeper controller integration.
Controller integrations will require compatible equipment and qualified installation. Existing safety controls remain independent of TMS.
A technical look at the proposed TMS integration: isolated RS-485 physical connectivity, Modbus RTU register polling, Raspberry Pi edge processing and secure AWS telemetry. Real implementation patterns, with controller-specific values clearly marked as examples.
Connect a compatible controller's documented RS-485 interface to a galvanically isolated USB-to-RS-485 adapter. The Raspberry Pi acts as the Modbus RTU client. Existing refrigeration control and safety functions remain local.
The gateway sends a Modbus RTU request to a controller address, receives a 16-bit register and decodes it using the manufacturer's register map. This example is read-only and does not alter refrigeration operation.
# TMS Edge — illustrative read-only Modbus RTU polling
# pip install "pymodbus[serial]"
from datetime import datetime, timezone
import json
from pymodbus.client import ModbusSerialClient
client = ModbusSerialClient(
port="/dev/ttyUSB0", baudrate=9600,
bytesize=8, parity="N", stopbits=1, timeout=2
)
# DEMO ONLY: register 100 and scale 0.1 are placeholders.
# Replace using the exact controller manufacturer's map.
if not client.connect():
raise ConnectionError("RS-485 controller unavailable")
try:
result = client.read_holding_registers(
address=100, count=1, device_id=1
)
if result.isError():
raise RuntimeError(f"Modbus exception: {result}")
raw = result.registers[0]
signed = raw if raw < 32768 else raw - 65536
telemetry = {
"device_id": "tms-gateway-001",
"controller_id": 1,
"temperature_c": signed / 10.0,
"timestamp": datetime.now(timezone.utc).isoformat()
}
print(json.dumps(telemetry))
# Next: publish to AWS IoT Core using MQTT over TLS.
finally:
client.close()
100
, controller ID
1
, serial settings and scaling are illustrative placeholders. Real devices may use different function codes, offsets, signed formats and register layouts. Pin the PyModbus version when deploying.
Developer reference: PyModbus 3.11 client API . The diagram and code describe a proposed architecture, not a certified installation or a tested controller-specific integration.
TMS is exploring integrations with Danfoss, CAREL, Dixell, Eliwell, LAE Electronic and Full Gauge Controls. Support is determined by the specific model, firmware, communications module and documented protocol — not the brand name alone.
Some refrigeration controller ranges expose serial communications. Confirm Modbus RTU rather than a proprietary network before selecting hardware.
Selected refrigeration controller families can offer RS-485 / Modbus via built-in or optional serial interfaces, depending on model.
Investigate controller-specific Modbus interfaces, compatible serial accessories and documented parameter tables.
Assess model-specific communication protocols and serial interface availability before developing an adapter.
Evaluate supported refrigeration models and any serial communication modules or gateway requirements.
Check documented communication protocols and whether a supported gateway or adapter is needed.
| Connection | When TMS uses it | Engineering requirement |
|---|---|---|
| Native Modbus RTU | Controller explicitly supports Modbus over RS-485 | Isolated adapter, verified register map, bus commissioning |
| Manufacturer gateway | Controller uses a proprietary serial or network protocol | Approved gateway/API, vendor documentation and permissions |
| Independent sensors | Controller has no supported data interface | Dedicated calibrated temperature / humidity probes connected to TMS Edge |
KoolProg is a Danfoss configuration and service tool for supported refrigeration controllers; it is not a general-purpose programming language or proof that a controller exposes a third-party Modbus interface. TMS Edge would normally be developed in Python , using a documented protocol and verified register profile without modifying Danfoss firmware.
| Controller / tool | What official documentation establishes | What TMS must verify |
|---|---|---|
| AK-CC55 Compact | Danfoss publishes a Modbus RTU programming guide and parameter list; documented default serial framing is 8 data bits, even parity, 1 stop bit; baud rate defaults to auto detection. | Exact product code, firmware, RS-485 connection, network address, baud-rate negotiation and the matching register map |
| AK-CC55 Single / Multi Coil | Part of the AK-CC55 family, but software and integration details vary by variant. | Obtain the specific variant's guide; do not reuse the Compact map without validation |
| ERC / EET and other ranges | Some are configurable using KoolProg and KoolKey or a manufacturer gateway. | Confirm whether any accessible port actually supports an approved third-party data protocol; do not assume the service connector is standard RS-485 Modbus |
Important: The Danfoss AK-CC55 Compact serial defaults above are documented for that controller; they are not universal Danfoss defaults. TMS examples elsewhere on this page use fictional registers and different illustrative serial settings. Never attach an arbitrary RS-485 adapter to an undocumented programming port. Keep monitoring read-only until a model-specific integration has been commissioned.
Official references: AK-CC55 Compact Modbus programming guide (PDF) · Danfoss KoolProg · KoolProg user guide (PDF) .
For compatible Danfoss models with a documented Modbus RTU interface, TMS would poll the controller's exposed measurements and status registers using a dedicated profile for that model.
For compatible CAREL models, a TMS integration profile would decode the manufacturer's documented Modbus register table, including any optional serial interface requirements.
Controller RS-485 A/B → twisted-pair bus → galvanically isolated USB-to-RS-485 adapter → Raspberry Pi USB. Follow manufacturer guidance for reference conductor, cable shield, biasing and termination. Avoid star wiring on a multidrop bus.
For multi-controller deployments, assign unique slave IDs and poll each device sequentially. Keep refrigeration protection and fail-safe control entirely within the existing controller.
A Modbus read returns raw registers. TMS must apply the controller-specific address convention, register type, byte/word order, signed encoding, scale factor and validity checks before storing a temperature or alarm state.
Connectivity failures should be reported as stale / unavailable , never silently displayed as healthy readings.
These implementation examples show the proposed TMS Edge software design. They are not live-tested against a specific Danfoss or CAREL controller. Replace every model-dependent field with verified values from its register documentation.
Use a configuration profile for each verified controller. The addresses and scaling below are deliberately fictional to prevent accidental use on live refrigeration equipment. The serial settings shown are illustrative, not Danfoss defaults; confirm baud rate, parity and stop bits from the exact controller documentation.
from datetime import datetime, timezone
from pymodbus.client import ModbusSerialClient
# EXAMPLE ONLY: replace with the official register map
PROFILE = {
"model": "verified-controller-model",
"unit_id": 1,
"room_temp": {
"address": 100, # FICTIONAL, NOT a vendor address
"scale": 0.1,
"signed": True,
},
}
def decode_word(raw, signed=False):
if signed and raw >= 0x8000:
return raw - 0x10000
return raw
client = ModbusSerialClient(
port="/dev/ttyUSB0",
baudrate=9600, parity="N", stopbits=1,
bytesize=8, timeout=2,
)
try:
if not client.connect():
raise ConnectionError("RS-485 adapter unavailable")
reg = PROFILE["room_temp"]
reply = client.read_holding_registers(
address=reg["address"], count=1,
device_id=PROFILE["unit_id"],
)
if reply.isError():
raise RuntimeError(f"Modbus error: {reply}")
raw = decode_word(reply.registers[0], reg["signed"])
payload = {
"controller": PROFILE["model"],
"temperature_c": raw * reg["scale"],
"timestamp": datetime.now(timezone.utc).isoformat(),
"quality": "sample_read_only", # Not yet validated against a real device
}
print(payload)
finally:
client.close()
pip install "pymodbus[serial]==3.11.1"
). This is a single-read demonstration, not a production polling service. Confirm function code, register addressing, scaling and data format from the exact controller manual; apply range, stale-data and fault checks before declaring any measurement valid.
The gateway uses its own provisioned device certificate and private key to authenticate to AWS IoT Core. MQTT payloads include device identity, measurement time and quality status.
# pip install paho-mqtt
import json
import os
import ssl
import paho.mqtt.client as mqtt
ENDPOINT = os.environ["AWS_IOT_ENDPOINT"]
THING_ID = os.environ["TMS_THING_ID"]
TOPIC = f"tms/{THING_ID}/telemetry"
# Paths to securely provisioned device credentials
CA = "/etc/tms/certs/AmazonRootCA1.pem"
CERT = "/etc/tms/certs/device.pem.crt"
KEY = "/etc/tms/certs/private.pem.key"
client = mqtt.Client(
callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
client_id=THING_ID,
protocol=mqtt.MQTTv311,
)
client.tls_set(
ca_certs=CA,
certfile=CERT,
keyfile=KEY,
cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS_CLIENT,
)
telemetry = {
"device_id": THING_ID,
"temperature_c": 2.4,
"quality": "sample_read_only", # Not yet validated against a real device
"source": "modbus_rtu",
}
client.connect(ENDPOINT, port=8883, keepalive=60)
client.loop_start()
try:
result = client.publish(
TOPIC, json.dumps(telemetry), qos=1
)
result.wait_for_publish(timeout=10)
if not result.is_published():
raise TimeoutError("MQTT publish not confirmed")
finally:
client.disconnect()
client.loop_stop()
Each controller integration should ship with a versioned, verified profile rather than hard-coded assumptions shared across manufacturers.
{
"vendor": "EXAMPLE_ONLY",
"model": "VERIFY_EXACT_MODEL",
"protocol": "modbus_rtu",
"serial": {
"baudrate": 9600,
"parity": "N",
"stopbits": 1,
"slave_id": 1
},
"registers": {
"room_temperature": {
"address": 100,
"function": "holding",
"signed": true,
"scale": 0.1,
"unit": "celsius"
}
},
"read_only": true,
"verified_against_manual": false
}
App → authenticated API → policy validation → signed/authorised cloud command → gateway → controller. The gateway checks the device model, approved parameter, permitted range, freshness and command expiry before any write.
References: PyModbus · AWS IoT protocols · Danfoss · CAREL . Consult model-specific official technical manuals for protocol support and register maps.
From a single freezer to multiple locations, TMS is being designed for businesses that need dependable visibility without industrial-system complexity.
About 10 years ago, we built TMS using Raspberry Pi hardware, AWS infrastructure and a dedicated mobile app. It gave small businesses visibility into their refrigeration temperatures, alarms and historical data.
We loved building it. But the product never found its commercial footing, and eventually it was put on the shelf.
Now we're bringing it back. Same mission. New technology. Bigger possibilities.
We're exploring the next generation of affordable environmental and refrigeration monitoring. Interested in a pilot, a partnership or updates on development? We'd love to hear from you.
Register Your Interest ↗TMS 2.0 is in planning and development, with a target launch in 2027. Features and timing are subject to change.