Qt based simple SCADA framework, with dashboard, static and dynamic components
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.
Qt 5.8
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
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.
https://github.com/IndeemaSoftware/QSimpleScada/releases
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.
You can check examples of QSimpleScada use at https://github.com/IndeemaSoftware/QSimpleScadaSample
QScadaDeviceInfo *lDeviceInfo = new QScadaDeviceInfo();
lDeviceInfo->setName("Test Device");
lDeviceInfo->setIp(QHostAddress("127.0.0.1"));
QScadaBoardController *mController = new QScadaBoardController();
mController->appendDevice(lDeviceInfo);
mController->initBoardForDeviceIp("127.0.0.1");
signals:
void objectDoubleClicked(QScadaObject*);
QList<QScadaBoard*> getBoardList();
QList<QScadaBoard*> getBoardListForDeviceIp(QString);
QScadaObject *initNewObject(QScadaObjectInfo *);
void createNewObject(QScadaObjectInfo *);
void createQMLObject(int id, QString path);
void createQMLObject(QString path);
mController->setEditingMode(true);
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
For example:
mController->openProject(QString <file>)
mController->updateValue(deviceIp, boardId, Id, value);
Where:
MIT license Copyright 2019 © Indeema Software.