Online HVAC monitoring over Modbus
Operators see the plant from a desk. Setpoints go back over the same link.
An operations view for air-conditioning plant: live status on a screen, history in a database, and remote control when someone cannot walk the floor. Data comes off the units over Modbus. Commands go back the same way. Collection first, then the desk.
The job
The units were already in the building. What was missing was a single place to see whether they were running, at what setpoint, and whether a trip had occurred. Walking the plant for every change does not scale. The client needed collection that did not invent a new protocol, a screen that an operator could read, and a path to start, stop, or adjust a unit without standing in front of it.
Collection
Each air-conditioning unit exposes registers over Modbus — typically RTU on serial, or TCP where a gateway is already in place. We map the points that matter: run/stop, mode, supply and return temperature, setpoint, alarm bits, and the handful of analog values the operator actually uses. Polling intervals are set so the picture is live without flooding the bus. Bad reads are marked; they are not silently replaced with the last good number.
Where the plant sits behind a serial line, a gateway or serial server presents Modbus TCP to the collector. The collector writes into storage and serves the operations view. The control network stays the control network. The desk only sees what we collect and what we are allowed to write.
What operators see
Online or offline, per unit
Run state, mode, and current setpoint
Temperatures and the analog points mapped for that model
Alarms and the time they appeared
A short history so a trip is not a single screenshot
The layout follows the plant, not a generic dashboard template. If a unit is unreachable, the screen says so. If a write failed, the screen says so. No green box on a dead poll.
Remote control
Start, stop, mode, and setpoint are written back as Modbus coils or holding registers, using the same map as the read path. Writes are explicit: an operator action, a confirmed target, a result. The collector does not guess. Where the client only wanted monitoring, the write path stays off. Where they wanted control, the allow list is the map — not a free-form register poke from the browser.
How it is put together
A Python collector talks Modbus, stores readings, and exposes the operations view. MySQL holds the latest state and the history the desk needs. The same service issues the control writes. On-site we prove the map against a live unit. Remote we keep the collector and the view running. Handover is the point list, the runbook, and the source.
If the plant later adds units or a second protocol, the collector takes another map. The screen follows the same pattern: status, history, and only the writes that were agreed.
