Anatomy of an HMI

How does the OSHMI (Open Substation HMI) software works?

To answer this question we must take a look at the diagram below.


The heart of the system is a real time data (web)server. It serves only that, real time data received from the field and processed. This data is kept in memory, this is necessary to obtain fast responses to queries that comes from the clients. This program runs in the background, there is no need for the operators to interact with it. During configuration time it’s convenient to interact with it but after that, in production, it’s better to run it with a hidden window or as a service (this can be easily accomplished using the amazing NSSM software).

This real time server also performs predefined point calculations at each 2 seconds, processes alarms and executes LUA scripts that can be used to define automations and calculations not available as standard system formulas.

The real time data is sent to a SQLite database (the use of other databases will require some slight adaptation of the software) in three separate tables for events, historical data and memory dump of the point list state.

The protocol driver connects with field devices acquiring data and sending commands. For now there are the IEC60870-5-104 and the ICCP drivers.

All the viewers are 100% web HTML5 clients and can run from a HMTL5 compatible browser. The Chromium browser is bundled with the OSHMI client. There are viewers for one line diagrams screens, events, alarms, tabular, trending and historical curves. All the web queries pass through the NGINX webserver, it redirects PHP scripts to the PHP processor and real time data queries to the OSHMI real time webserver (webserver.exe).

The Events Viewer is fed by a PHP script that queries events from a SOE (sequence of events) SQLite table. The historical Viewer also receive data from a SQLite table. The Screen and Tabular Viewers are fed by the real time webserver. The Trending Viewer receive the real time data and completes the past in the curve with historical data.

The HMIShell is used to lock a Windows machine to allow access only to HMI functions. A pure client machine can only run the HMIShell and a browser. Mobile devices can act as clients by giving access to their IP address and simply accessing a URL to open a viewer in a HTML5 browser (modern mobile versions of Safari, Chrome and Firefox are compatible).

More details in the next posts. Keep in touch.


2 thoughts on “Anatomy of an HMI

  1. Hallo mr Ricardo Olsen,
    i am interesting osHMI, i want to custom osHMI, i have question to you
    1. i was download osHMI, only binnary source,
    how to i get source code osHMI ?
    2. what osHMI support DNP3 and 101 protocol ?
    for your attention thank you.

    1. Hi there Mr. Purnama,
      The source code is available through a Mercurial repository, see:
      To compile the code you need the QT tools and the Borland C++ 5 compiler.
      The DNP3 protocol for now is available only as a proprietary driver. IEC101 is not supported by the project. But it’s possible to use any protocol converter/gateway that converts DNP3 or IEC101 to IEC104.
      Feel free to ask any question about how to configure or use OSHMI.
      Best regards,
      Ricardo Olsen

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s