GithubHelp home page GithubHelp logo

hutcheb / ckscada Goto Github PK

View Code? Open in Web Editor NEW
8.0 1.0 1.0 4.49 MB

Industrial SCADA Based on Kafka

License: Apache License 2.0

Makefile 1.23% HTML 0.83% JavaScript 55.80% CSS 1.32% Python 34.84% Shell 5.81% Batchfile 0.17%
scada iot iiot plc hmi

ckscada's Introduction

Introduction

ckSCADA is an open source SCADA system built using Kafka.

https://ckscada.readthedocs.io/

The primary aim is to be an open source alternate to proprietry SCADA systems.

Using Kafka allows the system to be easily extended using third party components. Kafka is a very well supported framework for messaging between components. The system is able to be scaled easily with the addition of additional Kafka brokers.

Roadmap

The system is currently in the very early stage of development and is not suitable for production use.

  • v0.1

      *       Basic framework has been setup and proof of concept implemented.
    

Future Release Milestones

  • v0.2

      *       Add exception handling to server code
    
      *       Document server code
    
      *       Fix issues around server redundancy
    
      *       Add additional devices including server metric tags
    
      *       Discuss Python implementation for server components
    
  • v0.3

      *       Investigate PLC4X project to use for PLC communication.
    

Server Installation

To install the server components.

Firstly make sure your Kafka broker/cluster has been setup already. There are plenty of tutorials on how to setup a Kafka cluster such as this one:-

https://kafka.apache.org/quickstart

Working under the assumption that your machine is connected to the internet.

Windows Installation

For Windows you will need to install node.js manually:-

https://nodejs.org/en/download/

Install Python 3

https://www.python.org/downloads/

make sure that python is included in your path.

Following this, download the ckscada package and download the npm/python packages.


  make.bat

Linux Installation

For Debian/Ubuntu use apt to install dependancies


  sudo apt install npm python3

Following this, download the ckscada package and download the npm/python packages.


  cd ckSCADA
  make

Edit the config.json file in the config folders. Include the nodeId, ip address and the port of one of your Kafka brokers.

We will next run the server components, opening a new terminal between each set of commands:-


  cd ckscada-server/server/src
  python3 ckagent.py --config ../../config/config.json

  cd ckscada-server/admin-server/src
  python3 ckadminserver.py --config ../../config/config.json

  cd ckscada-server/admin-client
  npm start .

There is a helper script to setup a few tags on a simulation device and start publishing them, the sample page on the client uses these.


  cd ckscada-server/server/src
  ./simulate_plant.sh

Client Installation

Viewer Only

To install the viewer download the Node.js package from nodejs.org for your operating system.

Windows Installation

Install node.js manually:-

https://nodejs.org/en/download/

Following this, download the ckscada package, npm packages and remove the folders that aren't needed.


  del ckscada-server

  cd ckscada-client
  npm install .

Linux Installation

For Debian/Ubuntu use apt to install it


  sudo apt install npm

Following this, download the ckscada package and build the npm packages.

  rm -r cksacda-server
  cd ckscada-client
  npm install .

Edit the config.json file in the config folder. Include the nodeId, ip address and the port of one of your Kafka brokers.

Assuming you have already setup your server you should then be able to run the viewer.


  cd ckscada-client
  npm start

This will open the welcome.svg screen and then open the Sample-Screen.svg file. This is just an example page using built-in tags from the standard server install. For production you will need to create your own HMI pages.

ckscada's People

Contributors

dependabot[bot] avatar hutcheb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

ckscada's Issues

Admin-Client - Add return status to queries

When lists are updated add a return status to be shown on the status bar.

E.g. Returned 1000 points
Found 4 devices

This allows the user to check if all the data has been return when the number of items is large.

Admin-Client - Add server status indicator

The Admin-Client doesn't show any status of the servers. Add an indication that the servers are able to be reached.

Possibly within the status bar down the bottom include how many servers can be reached e.g. 2/4.

This gives the user an indication that it is currently connected.

Admin-Client - Copy and Paste

The copy and paste menu items should be removed as I don't think it is possible to copy and paste to clipboard when it is initiated from a script.

The browser copy and paste functions should work. Currently the browser copy function copies the current list to the clipboard in json format. Change this so that it copies it using a format that can be pasted into a spreadsheet.

Admin-Client - User authentication

The admin-client doesn't have any user authentication.

This needs to be done in conjunction with Kafka security and the server agents.

Basic authentication would be included in this scope. LDAP security can be added later on.

Admin-Client - Server Config

Add a server list so a list of servers are shown.

This allows the user to confirm all servers are available to be contacted.

Possible columns, Server hostname, ip address, cpu load, ram, network bandwidth.

Admin-Client - Close button

The close button within the top menu doesn't work.

There is no need for this and can be removed.

The browser close function work just fine.

Admin-Client - Data Entry within Modal

Currently when entering data into the text boxes within the Modal popup after selecting a list item, there is no checking to confirm the data is valid. Add sanity checks on each text box.

This may also tie into using a schema within the Structure.json file.

Admin-Client - Read only fields

There are some fields within the Modal Popup for each list that don't make sense being able to update.

These should be shown as read only values.

Specify these using the Structure.json/Schema.

Admin-Client - Point list columns

The point list columns are fairly specific, when adding different device type these probably won't be applicable.

Using the Structure.json/Schema add an indicator so that columns can hidden from the list view and only shown within the Modal popup.

This allows only showing a common set of columns and then device specific fields within the Modal popup.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.