{"id":13572842,"url":"https://github.com/robidev/iec61850_open_server","last_synced_at":"2026-05-18T00:38:30.380Z","repository":{"id":45888456,"uuid":"271985778","full_name":"robidev/iec61850_open_server","owner":"robidev","description":"An open source implementation of an IEC61850 IED using lib61850","archived":false,"fork":false,"pushed_at":"2026-03-17T21:26:40.000Z","size":8813,"stargazers_count":126,"open_issues_count":1,"forks_count":30,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-03-18T11:15:39.368Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robidev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-13T10:18:48.000Z","updated_at":"2026-03-17T21:26:44.000Z","dependencies_parsed_at":"2026-01-24T02:05:20.784Z","dependency_job_id":null,"html_url":"https://github.com/robidev/iec61850_open_server","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/robidev/iec61850_open_server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robidev%2Fiec61850_open_server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robidev%2Fiec61850_open_server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robidev%2Fiec61850_open_server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robidev%2Fiec61850_open_server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robidev","download_url":"https://codeload.github.com/robidev/iec61850_open_server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robidev%2Fiec61850_open_server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33160623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"ssl_error","status_checked_at":"2026-05-17T22:39:10.741Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T15:00:21.926Z","updated_at":"2026-05-18T00:38:25.370Z","avatar_url":"https://github.com/robidev.png","language":"Python","funding_links":[],"categories":["Industrial protocols"],"sub_categories":["IEC 61850"],"readme":"# IEC61850_open_server\nAn implementation of an IED using the libiec61850 library.\n\nThis project aims to simulate some options according to the IEC61850 standard, using only the SCL file. \nThe main goal is feeding the SCL file into the system, and the system instantiating all IEDS, LD's, \nLN's and services accordingly.\n\nThe current implementation contains 3 IED's, a SMV publisher(merging unit), a protection IED containting \na PTOC that will trigger on an overcurrent, and trigger the PTRC in the same LD. The PTOC is fed by \nsampled values from the merging unit. The PTRC publishes a trip command by GOOSE.\nA XCBR IED subscribes to GOOSE messages from the PTRC, and publishes back its stVal.\n\nProcess values are static simulations, and not connected to a real process-simulation. This software is not desigend to run realtime. Software uses Docker to run in containers.\n\nThe same executable should be usable to describe all IED's, only the config-file should change, allowing\na flexible setup that can be used in a docker container for a more complete simulation setup of a substation.\n\n# Process simulation using pySpice:  \nThe IEDS support simulated values from a spice-model. \nCurrently amps and voltages can be send from the simulation to the IED, and XSWI/XCBR can influence the simulation creating a closed loop between the SPICE model and the IED functions. \nA final showcase is implemented that takes the measurements, sends them to the IED's, and has everything interacting. The simulator can be opened from the client. \n\n# IEC61850 python based client (iec61850_open_client):  \nThis is a client that is configured using an SVG file for the mimics and data-references. \nThis client will provide a graphical interface to visualize the process, browse the model and control the simulation. \nThis is provided as a stand-alone project, but is used in the docker environment as the frontend to the showcase. \n\n# The frontend\n![Alt text](screenshot.png?raw=true \"Screenshot of the frontend\")\n\n# Usage\nWhen you follow the guide below; \"Getting started the most easy way\" you are presented with the IEC61850 client in your browser, with the instantiated IED's. The IED's are instantiated by \nthe scd file in [scd/open_substation.scd](scd/open_substation.scd)  \n\nYou can click the circuit-breaker square(CBR), or the disconnector square(DIS) to open a dialog for operating the element. As it is currently configured as SBO with enhanced security,\nyou will need to press, select, and then operate. The value in the dialog is prepared to be the opposite of te current value, but can be changed by hand. A succesfull select/operate will\nprovide feedback in green. If there is an error, it will be shown in red. For example, you will get an error if you try to open the disconnector under load. \nThis is because the disconnector will not open or close, if the circuit breaker is engaged due to interlocking(CILO logical node). To operate the disconnector, you should first open the \ncircuit breaker.  \n\nIn the default state the circuit-breaker and switch are conducting, the 2 merging units are publishing(one for each side of the transformer), and the PTOC is checking if current is too high.\nHowever, you can see in the HMI that current and voltage are 0. This is because the simulation is not running yet.  \nTo start the simulation, press the 'open simulation tab', wait for the initialisation to finish, and press \"play\". After a few seconds you should see nominal values in the HMI.  \nYou can manually open/close the circuit breaker and disconnector. However, the disconnector is protected by interlocking, and cannot open/close if the circuitbreaker is closed.  \n\nPress the play/pause button in the simualtion tab to pause the simulation. You can also modify simulation values by pressing 'modify' in the simulation tab, and choose the elements\nin the simulation you wish to modify value of. This way you can change the feed-in voltage per phase, and modify the load per-phase.  \n\nIf you want to manually modify a setting in an IED, you can click it's IP in the bottom field of the main client window. This will cause the IED field to display the IED's datamodel.\nYou can click the data-element you wish to modify, and a write dialog will be displayed.  \n\n# License\nThis software is licensed under the Apache 2.0 License where applicable. Please note that the libiec61850 is licensed differently (GPLv3), and this license will prevail for components that use this library. \n\n# Questions and Feedback\n\nFeel free to ask questions and provide feedback using the Github issues. Github issues is also used for backlog items.\n\n# Getting started the most easy way:\n\nThis will allow you to just run the existing showcase.\n\nMake sure you have installed the nessecary dependancies (Git and Docker-compose):  \n`$ sudo apt install git docker-compose` \n\nCreate a working folder, e.g. substation;  \n  \n`$ mkdir ~/substation`  \n`$ cd ~/substation`  \n\nGet the necesarry projects next to each other in the same directory;  \n`$ git clone https://github.com/robidev/iec61850_open_server.git`  \n`$ git clone https://github.com/robidev/iec61850_open_client.git`  \n\ncd into the server project  \n`$ cd iec61850_open_server`  \n\nBuild the Docker containers. Note: this uses the relative path, `../iec61850_open_client` so ensure you have this set up correctly like indicated in step 1;  \n`$ sudo docker-compose -f substation.yml -f substation.simulator.yml build`  \n\nRun the Docker compose file;  \n`$ sudo docker-compose -f substation.yml -f substation.simulator.yml up`  \n\nTo stop the Docker compose file;  \n`$ sudo docker-compose -f substation.yml -f substation.simulator.yml down`  \nOther methodes to stop the docker-compose file to lead to issues at a restart.  \n\nopen the client via the browser at;  \nhttp://127.0.0.1:5000\n\n# Getting started with a modified SCL file:\n\nThese steps describe how to generate new configs from a modified SCL file and run them.  \n\nMake sure you have installed the nessecary dependancies (Git,Java and Docker-compose):  \n`$ sudo apt install git default-jre docker-compose` \n\nCreate a working folder, e.g. substation;  \n  \n`$ mkdir ~/substation`  \n`$ cd ~/substation`  \n  \nGet the necessary projects;  \n`$ git clone https://github.com/robidev/iec61850_open_server.git`  \n`$ git clone https://github.com/robidev/iec61850_open_client.git`  \n`$ git clone https://github.com/mz-automation/libiec61850.git`  \n\ncd into the server project  \n`$ cd iec61850_open_server`  \n  \nGenerate the config files from the scd-file; (you need libiec61850 for this located in the parent directory)  \n`$ ./make_model.sh`  \n  \nGenerate the compose file from the scd-file;  \n`$ ./make_compose.sh`  \n  \nBuild the Docker containers. Note: this uses the relative path, `../iec61850_open_client` so ensure you have this;  \n`$ sudo docker-compose -f substation.yml -f substation.simulator.yml build`  \n\nRun the Docker compose file;  \n`$ sudo docker-compose -f substation.yml -f substation.simulator.yml up`  \n\nopen the client via the browser at;  \nhttp://127.0.0.1:5000\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobidev%2Fiec61850_open_server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobidev%2Fiec61850_open_server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobidev%2Fiec61850_open_server/lists"}