Work

EATON — Intelligent Power Manager

Dev
Frontend
Enterprise

Real-time energy dashboards for UPS-backed data centres, with facility- and device-level drill-down kept consistent under continuous streams by NgRx.

Streaming readings into one normalised NgRx store, with views selecting from it UPS estate · continuous readings device · rack A device · rack B device · site NgRx store normalised, one truth RxJS derives per view Views estate overview rack detail alert list components hold no state Why one store, and when it is not worth it Two views showing the same device read the same value by construction rather than by coincidence — views that disagree are the worst failure mode for monitoring software, because nothing signals that it happened. The ceremony is not repaid on a form-driven screen; it is repaid here.

As a consultant at Capgemini-Sogeti High Tech I built the web interfaces for EATON’s Intelligent Power Manager — real-time energy dashboards for UPS-backed data centres and facilities, including Eaton’s own site at Grenoble-Montbonnot.

The interface shows live consumption and lets an operator descend through it, from a facility down to an individual device. That hierarchy is the feature. A site-level number tells you something is wrong; the drill-down is how you find which rack.

Readings arrive continuously from many devices and several views show overlapping slices of the same data. If each component holds its own subscription you get views that disagree with each other, and nothing on screen signals that it has happened, which for monitoring software is the failure you least want. So the readings live in NgRx as one store, with RxJS composing the derived streams each view needs and ImmutableJS and Immer keeping updates from mutating state in place. Components select from the store instead of owning state, so two views of the same device read the same value.

I also coordinated work packages across the back-end and firmware teams. What the interface can show is bounded by what the hardware reports and how often, so the front end could not be specified on its own.