Prototype

We concluded our solution with the need for a prototype in the previous article. First, let's discuss what a prototype is.

It’s a simplified version of a product or its components, built to explore or demonstrate specific aspects of functionality, design, or technology. Prototypes are not meant to be complete or production-ready; instead, they are quick, disposable implementations that help in understanding requirements, validating ideas, or uncovering potential problems early in the development process:

  1. Proving Concepts: To explore if a particular idea or technology is viable.

  2. Clarifying Requirements: To provide stakeholders with a tangible artifact they can review and refine.

  3. Exploring Alternatives: To test different approaches and make informed decisions.

The purpose of a prototype is learning and experimentation, not delivering the final solution. This aligns with the pragmatic principle of tracer bullets—small, functional experiments that help guide development efforts without unnecessary overhead.

The value of a prototype is not the code itself, but the insights gathered during prototyping. Hence, it could be implemented in some dynamic language like Python or JavaScript. After it has fulfilled its purpose, it should be burned with fire.

Scope

To make things simple, let’s just start by collecting near real-time data only from substations and displaying that on a dashboard graph.

Implementation

Let's assume that our substation can use the IEC 61850 protocol. We can simulate a substation by implementing an IEC 61850 server that emits updates.

Then we need an adapter that translates IEC 61850 to MQTT. That's essentially an IEC 61850 client subscribed to data updates from the substation, and it publishes the updates to an MQTT topic.

At the end of the stack, we can have Grafana with an MQTT datasource reading from the MQTT topic and a dashboard that displays the streaming updates.

You can find the protype here: https://github.com/kovacstamasx/grid

You should see something similar on Grafana after starting the docker compose file