Qt based simple SCADA framework, with dashboard, static and dynamic components

QSimpleScada

Qt/C++ based simple SCADA library for your IoT projects. We created QSimpleScada to speed up and simplify visualising any data, so we (and you) can concentrate on developing automation algorithms that rock. It completely handles connection to and editing of widgets. Using QSimpleScada, you can easily create a visualization of IoT data with static and dynamic components. After you are satisfied with the layout, save the generated .xml file and use it in your project.

Library is created with Qt/C++ and basic widget is based on C++. There is interface for QML, so you can independently create individual widgets on QML (as when creating classic QML UIs) and upload them to your app on a go.

Installing

Minimum requirements

Qt 5.8

Using qpm:

To install via qpm, run:

qpm install com.indeema.qsimplescada

And add:

 include (../vendor/vendor.pri)

To *.pro file of your project.

As a bonus, try out our preset of widgets:

qpm install com.indeema.eeiot

From GitHub:

To clone the repo, go to: https://github.com/IndeemaSoftware/QSimpleScada To also add preconfigured widgets, clone: https://github.com/IndeemaSoftware/EEIoT

And add:

include($$PWD/com/indeema/eeiot/com_indeema_eeiot.pri)

To the* .pro file. You'll receive QSimpleScadaLib folder with compiled Windows or MacOS libs.

Using binary release:

https://github.com/IndeemaSoftware/QSimpleScada/releases

Structure

One QScadaController can keep many devices with unique IP addresses. IP address is a unique id for each device. Each device can have several dashboards with unique ids. On each board, you can set up many widgets. You can save the architecture to a* .irp file.

Sample of usage

You can check examples of QSimpleScada use at https://github.com/IndeemaSoftware/QSimpleScadaSample

How the dynamic components look in the sample

Using QSimpleScada

  1. Create your device:
   QScadaDeviceInfo *lDeviceInfo = new QScadaDeviceInfo();
   lDeviceInfo->setName("Test Device");
   lDeviceInfo->setIp(QHostAddress("127.0.0.1"));
  1. Init your board controller. Your boardcontroller object is the main contact spot.
   QScadaBoardController *mController = new QScadaBoardController();   
   mController->appendDevice(lDeviceInfo);
  1. Init your board. Board ids are iterators. So if you will create one more board for this device, its id will be 1.
   mController->initBoardForDeviceIp("127.0.0.1");
  • To handle events, you can connect to signals:
signals:
    void objectDoubleClicked(QScadaObject*);
  • You can get pointers to specific board by calling methods:
    QList<QScadaBoard*> getBoardList();
    QList<QScadaBoard*> getBoardListForDeviceIp(QString);
  • And you can create new object by calling method of QScadaBoard object:
    QScadaObject *initNewObject(QScadaObjectInfo *);
    void createNewObject(QScadaObjectInfo *);

    void createQMLObject(int id, QString path);
    void createQMLObject(QString path);
  1. Define the editable or static type for your controller:
    mController->setEditingMode(true);
  1. Include your controller widget to you central widget:
   QGridLayout *mainLayout = new QGridLayout(ui->centralWidget);
   mainLayout->addWidget(mController);

Now your board controller is initialized. Next steps are setting up the widget resources. We’ve also developed a EEIoT library with a set of preconfigured widgets. You can download it at https://github.com/IndeemaSoftware/EEIoT and try it out as a start. Read wiki page to know the rules on how to create qml widgets that can be used by QSimpleScada

To use a widget collection: Call the function with QML resources url to let the controller know the location of QML widgets:

    QMLConfig::instance.appendQMLPath(:/com/indeema/eeiot/EEIoT/);

Path :/com/indeema/eeiot/EEIoT/ is added by default, so you don't need to add it manually. If you call appendQMLPath with different path to EEIoT, it will replace the default path. Also you can add your own custom widgets.

You can use our simple editor to create your first dashboard https://github.com/IndeemaSoftware/QSimpleScadaSample

Then set up QScadaBoardController in your app without any devices and boards and call:

    mController->openProject(QString <file>)

where is a full path to your project file (*.irp)

For example:

    mController->openProject(QString <file>)

Set up flexible connection, streaming, and visualization of widget data

mController->updateValue(deviceIp, boardId, Id, value);

Where:

  • deviceIp - QString, the IP address of the monitored device (for example, "192.168.1.1");
  • boardId - integer, unique ID of a dashboard (since 1 device may contain several dashboards);
  • Id - integer, unique ID of a widget;
  • value - QVariant, the value you're monitoring on a widget. Its type is undefined (QVariant), so that you can flexibly stream any data when builing different widgets on a board.

Support

License

MIT license Copyright 2019 © Indeema Software.

Developed by Volodymyr Shevchyk

Owner
Indeema Software Inc.
IoT and Blockchain development company.
Indeema Software Inc.
Similar Resources

A custom-made 11 key macropad + 2 rotary encoders with minimal components.

A custom-made 11 key macropad + 2 rotary encoders with minimal components.

⌨ Ladispad Ladispad is a custom-made 11 key macropad with 2 rotary encoders designed for the simplicity and the ease of assembly to non technical user

Dec 21, 2022

NavMeshComponents - High Level API Components for Runtime NavMesh Building

Status of the project Development This project is now developed as part of the AI Navigation package. Please add that package to your project in order

Jan 8, 2023

Maat is an open-source Dynamic Symbolic Execution and Binary Analysis framework

Maat is an open-source Dynamic Symbolic Execution and Binary Analysis framework

About Maat is an open-source Dynamic Symbolic Execution and Binary Analysis framework. It provides various functionalities such as symbolic execution,

Dec 27, 2022

A static C library to build applications for the Foenix retro computers, and, eventually, a single-tasking operating system and file browser that sits atop the Foenix MCP Kernel

@mainpage Foenix A2560 Foenix Retro OS: fr/OS A2560-FoenixRetroOS This project provides 2 things: A static C library/framework that anyone can use to

Jun 24, 2022

Blade - A simple, fast, clean, and dynamic language that allows you to develop complex applications quickly.

The Blade Programming Language Quick links: BUILDING | CONTRIBUTING | DOCS | LICENSE | tl;dr Blade is a simple, fast, clean and dynamic language that

Dec 31, 2022

An experimental dynamic malware unpacker based on Intel Pin and PE-sieve

Pin'n'Sieve A dynamic malware unpacker based on Intel Pin and PE-sieve (deploys PE-sieve scan on specific triggers). Caution: during the process the m

Dec 16, 2022

a playground for working with fully static tensors and automatic differentiation

This is a playground for learning about how to apply template-meta-programming to get more efficient evaluation for tensor-based automatic differentiation.

Mar 18, 2021

CredBandit - Proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process and send that back through your already existing Beacon communication channel

CredBandit CredBandit is a proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process a

Dec 25, 2022

First Rendition of Static Factory Design Method for developing studies and more using C++ ACSIL in Sierra Chart

First Rendition of Static Factory Design Method for developing studies and more using C++ ACSIL in Sierra Chart

Thanks for stopping by. This is my first GitHub repo. SierraChart ACSIL C++ STUDY DEV TEMPLATE This is meant to be a template for developing study gro

Jan 18, 2022
Comments
  • Compile QSimpleScada

    Compile QSimpleScada

    Hi, after build QSimpleScada with qt in windows can not find QSimpleScadaLib folder, and how to add QSimpleScadaLib to QSimpleScadaSample project.

    thanks

  • error :  : You need to set an executable in the custom run configuration.

    error : : You need to set an executable in the custom run configuration.

    Hello! After following the instructions . I wanted to run and build the project but i have the error " :-1: erreur : You need to set an executable in the custom run configuration.". I checked the projects>run , i found that excecutable path is empty. How can i fixe this problem ?

    Best regards

M5Core2 Weather Dashboard based on LVGL.

M5Core2 Weather Dashboard Demo Based on LVGL and X-TRACK. Before compile Because CPP does not support flexible array member, you need to modify the de

Dec 12, 2022
Example code for collecting weather data from an ESP32 and then uploading this data to InfluxDB in order to create a dashboard using Grafana.

InfluxGrafanaTutorial Example code for collecting weather data from an ESP32 and then uploading this data to InfluxDB in order to create a dashboard u

Dec 30, 2022
Home Assistant E-Ink Dashboard on the Inkplate 10
Home Assistant E-Ink Dashboard on the Inkplate 10

HomePlate Home Assistant E-Ink Dashboard on the Inkplate 10 Features Display Home Assistant dashboards on a beautiful e-ink display Display WiFi QR Co

Jan 6, 2023
Compatibility tool for Steam Play based on Wine and additional components

Introduction Proton is a tool for use with the Steam client which allows games which are exclusive to Windows to run on the Linux operating system. It

Dec 30, 2022
Is this hardware solution the ultimate in switch bounce elimination? Simple PCB, cheap components = final solution!
Is this hardware solution the ultimate in switch bounce elimination? Simple PCB, cheap components = final solution!

#230 Ultimate Switch Bounce Eliminator Direct link to video: https://youtu.be/b2uUYiGrS5Y It's time to try a final, alternative approach to the ubiqui

Nov 7, 2022
`lv_lib_100ask` is a reference for various out of the box schemes based on lvgl library or an enhanced interface for various components of lvgl library.

Introduction lv_lib_100ask is a reference for various out of the box schemes based on lvgl library or an enhanced interface for various components of

Dec 15, 2022
Bypass UAC at any level by abusing the Program Compatibility Assistant with RPC, WDI, and more Windows components
Bypass UAC at any level by abusing the Program Compatibility Assistant with RPC, WDI, and more Windows components

ByeIntegrity 8.0 The eighth Windows privilege escalation attack in the ByeIntegrity family. ByeIntegrity 8.0 is the most complex one I've created so f

Dec 15, 2022
Prometheus exporter for ARM® Hardware components using HWCPipe.

ARM® HWCPipe Exporter ARM® HWCPipe Exporter is a Prometheus exporter written in Java and C++ that retrieves metrics from Android devices running on AR

Oct 5, 2022
A collection of my ESPHome components.

ESPHome components A collection of my ESPHome components. To use this repository you should confugure it inside your yaml-configuration: external_comp

Jan 4, 2023
Additional components for ESP-IDF, maintained by Espressif

Espressif IDF Extra Components This repository aims to store ESP-IDF extra components which have been seperated and uploaded into IDF Component Manage

Jan 4, 2023