• Stars
    star
    201
  • Rank 187,641 (Top 4 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 6 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

More Repositories

1

EEIoT

QML IoT components, for fast and super user friendly IoT projects
QML
42
star
2

QDashBoard

Sample dashboard developed with QML. Login, plots and several screens.
QML
41
star
3

QSimpleScadaSample

This is constructor for simple Scada UI
C++
30
star
4

CustomCollectionLayout

Swift
24
star
5

MenuController.iOS

Floating menu for an iOS application
Objective-C
12
star
6

EEAndroidRealmBrowser

Library for reviewing multiple local Android Realm DB
Java
4
star
7

SmartLock

Open your door with mobile phone.
Kotlin
4
star
8

indeema-ci

Modern, open source IT automation instrument
JavaScript
3
star
9

QBlockChain

Building blockchain with Qt
C++
3
star
10

Qt-IoT-Components-By-Indeema

Qt/C++ components developed by Indeema Software for IoT prposes. All these components are available here on github, or at qpm.
3
star
11

QPredix

This is Qt/C++ SDK for Predix Ge services API (https://www.predix.io/) developed by Indeema Software Inc.
C++
3
star
12

react-component-widget

Component for resizing and repositioning charts, parsing transferred data when working with Recharts library.
JavaScript
3
star
13

er-diagram-creator

It is an application that generates the er-diagram out of mongoose schema files in project. The app auto-detect files with .model.js extension among the project and extract the data schema, relations and additional options. The result is an er-diagram with all fields, types and connections between collections.
JavaScript
3
star
14

indeema-ci-client

This solution was created for web developers and DevOps to automize and speedup server setup process
TypeScript
3
star
15

QCivicAuth

Qt C++ desktop and mobile SDK for civic authentication
C++
2
star
16

AB2D

Connecting Arduino with accelerometer ADXL345 to Box2D with Qt framework
C++
2
star
17

IoT-temperature-with-Predix-and-Qt

IoT temperature with Predix and Qt
C++
2
star
18

intro-screen-android

Intro Screen Android
Java
1
star
19

QUWI-test

This is test application for QUWI company
QML
1
star
20

EEIoT_Sample

This is simple app that shows how to use EEIoT Library
QMake
1
star
21

Dashboard

React Chart
JavaScript
1
star
22

AndroidUtils

Java
1
star
23

CPlanarSegmentation

C language wrapper package over PCL Planner Segmentation modul
Objective-C++
1
star
24

example-passport

JavaScript
1
star
25

svg-anime-android

SVG Animation for Android
Java
1
star
26

QPredixSample

Simpleme usage of QPredix package
C++
1
star