Skip to content

Commit e6502f9

Browse files
authored
Merge pull request #203 from json-scada/master
Version 0.48-alpha, add DNP3 Server Protocol
2 parents 92a9d0d + bceadff commit e6502f9

File tree

70 files changed

+33554
-6525
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+33554
-6525
lines changed

.gitignore

-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ src/plc4x-client/
1515
src/calculations/calculations
1616
src/i104m/i104m
1717
src/i104m/json-scada.json
18-
src/dnp3/opendnp3-3.0.4/
19-
src/dnp3/opendnp3/
20-
src/dnp3/Dnp3Client - Copia/
2118
src/carbone-reports/point_list.ods
2219
src/dnp3/Dnp3Client/Properties/
2320
src/htdocs-admin/translate.bat

.gitmodules

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "src/dnp3/opendnp3"]
2+
path = src/dnp3/opendnp3
3+
url = https://github.com/dnp3/opendnp3
4+
[submodule "src/mongo-cxx-driver/mongo-cxx-driver"]
5+
path = src/mongo-cxx-driver/mongo-cxx-driver
6+
url = https://github.com/mongodb/mongo-cxx-driver.git

README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
4848
- MongoDB as the real-time core database, persistence layer, config store, SOE historian.
4949
- Event-based realtime async data processing with MongoDB Change Streams.
5050
- Portability and modular interoperability over Linux, Windows, Mac OSX, x86/64, ARM.
51-
- Windows installer available in the [releases section](https://github.com/riclolsen/json-scada/releases/tag/V0.47-alpha).
51+
- Windows installer available in the [releases section](https://github.com/riclolsen/json-scada/releases/tag/V0.48-alpha).
5252
- Unlimited tags, servers, and users.
5353
- Horizontal scalability, from a single computer to big clusters (MongoDB-sharding), Docker containers, VMs, Kubernetes, cloud, or hybrid deployments.
5454
- Modular distributed architecture. Lightweight redundant data acquisition nodes can connect securely over TLS to the database server. E.g. a Raspberry PI can be a data acquisition node.
@@ -90,7 +90,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
9090
## Documentation
9191

9292
- [Generic Install Guide](https://github.com/riclolsen/json-scada/blob/master/docs/install.md)
93-
- [Windows Installer](https://github.com/riclolsen/json-scada/releases/tag/V0.47-alpha)
93+
- [Windows Installer](https://github.com/riclolsen/json-scada/releases/tag/V0.48-alpha)
9494
- [RedHat/Rocky Linux Installer Script](https://github.com/riclolsen/json-scada/blob/master/docs/install.md#rhel94-and-compatible-systems-automated-installation)
9595
- [Ubuntu Linux Installer Script](https://github.com/riclolsen/json-scada/blob/master/docs/install.md#ubuntu-2404-scripted-installation)
9696
- [Generic Install Guide](https://github.com/riclolsen/json-scada/blob/master/docs/install.md)
@@ -104,6 +104,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
104104
- [IEC60870-5-101 Server Driver](https://github.com/riclolsen/json-scada/blob/master/src/lib60870.netcore/iec101server/README.md)
105105
- [IEC60870-5-101 Client Driver](https://github.com/riclolsen/json-scada/blob/master/src/lib60870.netcore/iec101client/README.md)
106106
- [DNP3 Client Driver](https://github.com/riclolsen/json-scada/blob/master/src/dnp3/Dnp3Client/README.md)
107+
- [DNP3 Server Driver](https://github.com/riclolsen/json-scada/blob/master/src/dnp3/Dnp3Server/README.md)
107108
- [Telegraf Listener Driver](https://github.com/riclolsen/json-scada/blob/master/src/telegraf-listener/README.md)
108109
- [MQTT Sparkplug-B Client Driver](https://github.com/riclolsen/json-scada/blob/master/src/mqtt-sparkplug/README.md)
109110
- [OPC-UA Client Driver](https://github.com/riclolsen/json-scada/blob/master/src/OPC-UA-Client/README.md)
@@ -132,7 +133,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
132133
- [ ] IEC 61850 MMS Server
133134
- [ ] IEC 61850 GOOSE/SV Client
134135
- [x] DNP3 Client TCP/UDP/TLS/Serial - Windows x64 only!
135-
- [ ] DNP3 Server TCP/UDP/TLS/Serial
136+
- [x] DNP3 Server TCP/UDP/TLS/Serial
136137
- [x] MQTT/Sparkplug-B Pub/Sub TCP/TLS
137138
- [x] Modbus Client via PLC4X-GO
138139
- [ ] ICCP Client TCP/TLS

compile-docker/docker-compose.yaml

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
# {json:scada} Docker Compilation for Linux x64 - (c) 2020-2024 - Ricardo L. Olsen
1+
# {json:scada} Docker Compilation for Linux x64 - (c) 2020-2025 - Ricardo L. Olsen
22
# Requires Internet connection!
33

44
services:
55

66
dotnet_compile:
77
image: mcr.microsoft.com/dotnet/sdk:8.0
88
container_name: js_dotnet_compile
9-
command: sh -c "cd /src/lib60870.netcore/lib60870.netcore/ &&
9+
command: sh -c "apt-get update &&
10+
apt-get -y install build-essential cmake sasl2-bin libsasl2-dev libssl-dev libzstd-dev libsnappy-dev &&
11+
cd /src/lib60870.netcore/lib60870.netcore/ &&
1012
dotnet build --self-contained --runtime linux-x64 -c Release -o /publish_bin/ &&
1113
cd /src/lib60870.netcore/iec101client/ &&
1214
dotnet publish --self-contained --runtime linux-x64 -p:PublishReadyToRun=true -c Release -o /publish_bin/ &&
@@ -33,8 +35,6 @@ services:
3335
rm -rf obj bin &&
3436
cd /src/libplctag/libplctag.NET/src/libplctag &&
3537
rm -rf obj bin &&
36-
apt-get update &&
37-
apt-get -y install build-essential cmake &&
3838
cd /src/libiec61850 &&
3939
mkdir -p build &&
4040
cd build &&
@@ -49,7 +49,26 @@ services:
4949
cd /src/libiec61850/dotnet/core/2.0/IEC61850.NET.core.2.0/ &&
5050
rm -rf obj bin &&
5151
cd /src/libiec61850 &&
52-
rm -rf .install "
52+
rm -rf .install &&
53+
cd /src/mongo-cxx-driver/mongo-cxx-driver/build &&
54+
sed -i '/ $${fetch_args}/d' ../cmake/FetchMongoC.cmake &&
55+
cmake .. -DCMAKE_INSTALL_PREFIX=../../../mongo-cxx-driver-lib -DCMAKE_CXX_STANDARD=17 -DBUILD_VERSION=4.0.0 -DBUILD_SHARED_LIBS=OFF -DBUILD_SHARED_AND_STATIC_LIBS=OFF &&
56+
cmake --build . --config Release &&
57+
cmake --build . --target install --config Release &&
58+
cd /src/dnp3/opendnp3 &&
59+
mkdir -p build &&
60+
cd build &&
61+
cmake -DDNP3_EXAMPLES=OFF -DDNP3_TLS=ON .. &&
62+
make &&
63+
cp cpp/lib/libopendnp3.so /publish_bin &&
64+
cd /src/dnp3/Dnp3Server/ &&
65+
sed -i 's/mongo-cxx-driver-lib\\/lib64\\//mongo-cxx-driver-lib\\/lib\\//g' ./CMakeLists.txt &&
66+
sed -i '/sasl2/a snappy' ./CMakeLists.txt &&
67+
mkdir -p build &&
68+
cd build &&
69+
cmake .. &&
70+
make &&
71+
cp Dnp3Server /publish_bin"
5372
environment:
5473
- DOTNET_CLI_TELEMETRY_OPTOUT=1
5574
volumes:
@@ -58,6 +77,8 @@ services:
5877
- ../src/lib60870.netcore:/src/lib60870.netcore
5978
- ../src/OPC-UA-Client:/src/OPC-UA-Client
6079
- ../src/libplctag:/src/libplctag
80+
- ../src/mongo-cxx-driver:/src/mongo-cxx-driver
81+
- ../src/dnp3:/src/dnp3
6182
- ../demo-docker/bin:/publish_bin
6283

6384
# NOTICE Dnp3Client and OPC-DA-Client are Windows-only, so it can only run in docker/linux using Wine.

conf-templates/log.io-file.json

+10
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@
104104
}
105105
}
106106
},
107+
{
108+
"source": "node1",
109+
"stream": "dnp3server",
110+
"config": {
111+
"path": "/json-scada/log/dnp3server.log",
112+
"watcherOptions": {
113+
"usePolling": true
114+
}
115+
}
116+
},
107117
{
108118
"source": "node1",
109119
"stream": "mqttsparkplugclient",

demo-docker/docker-compose.yaml

+23-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ services:
172172
networks:
173173
- jsdemo_net
174174

175-
# IEC60870-5-104 SERVER, accepts connection on 127.0.0.1:2404 (originator address 1)
175+
# IEC60870-5-104 SERVER, demo config accepts connection on 127.0.0.1:2404 (originator address 1)
176176
iec104server:
177177
image: mcr.microsoft.com/dotnet/sdk:8.0
178178
container_name: jsdemo_iec104server
@@ -356,6 +356,28 @@ services:
356356
networks:
357357
- jsdemo_net
358358

359+
# DNP3 SERVER, demo config accepts connection on 127.0.0.1:20000 (local address 2, remote address 1)
360+
dnp3server:
361+
image: mcr.microsoft.com/dotnet/sdk:8.0
362+
container_name: jsdemo_dnp3server
363+
command: sh -c "sleep 60 && /jsonscada_bin/Dnp3Server"
364+
restart: unless-stopped
365+
environment:
366+
- LD_LIBRARY_PATH=/jsonscada_bin
367+
volumes:
368+
- ./conf:/conf
369+
- ./bin:/jsonscada_bin
370+
- ./log:/log
371+
links:
372+
- jsdemo_mongorsn1
373+
# exports the DNP3 server port to the host
374+
ports:
375+
- 20000:20000
376+
expose:
377+
- "20000"
378+
networks:
379+
- jsdemo_net
380+
359381
# OPC-DA client: requires wine as it is currently Windows-only
360382
opcda_client_wine:
361383
image: scottyhardy/docker-wine:latest

demo-docker/mongo_seed/files/demo_connections.json

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
{"_id":{"$oid":"6675d176e2f7917450d7585b"},"protocolDriver":"PLC4X","protocolDriverInstanceNumber":1,"protocolConnectionNumber":2003,"name":"PLC1","description":"PLC #1 MODBUS","enabled":true,"commandsEnabled":true,"topics":["MBPLC1_HR1|holding-register:1:UINT","MBPLC1_10HRS|holding-register:2:INT[10]"],"autoCreateTags": true,"endpointURLs":["modbus-tcp://localhost:5001?unit-identifier=2"],"giInterval": 1.5,"stats":null}
99
{"_id":{"$oid":"669ea9ce96e9a9fe7abe6ef8"},"protocolDriver":"OPC-DA","protocolDriverInstanceNumber":1,"protocolConnectionNumber":5001,"name":"OPCDAClient1","description":"Download from demo server from https://github.com/technosoftware-gmbh/opcdaaehda-client-solution-net/tree/master/x86/DemoServer","enabled":true,"commandsEnabled":true,"stats":null,"endpointURLs":["opcda://localhost/SampleCompany.DaSample.30"],"autoCreateTags":true,"useSecurity":false,"autoCreateTagPublishingInterval":5,"autoCreateTagQueueSize":5,"autoCreateTagSamplingInterval":0,"giInterval":300,"localCertFilePath":"","peerCertFilePath":"","timeoutMs":20000,"topics":[],"deadBand":5,"hoursShift":0,"password":"","username":""}
1010
{"_id":{"$oid":"66e6c7d1311eee86fc6b4f07"},"protocolDriver":"DNP3","protocolDriverInstanceNumber":1,"protocolConnectionNumber":33,"name":"DNP3DEMO","description":"DNP3 DEMO","enabled": true,"commandsEnabled":true,"stats":null,"ipAddresses":["127.0.0.1:20000"],"passphrase":"","pfxFilePath":"","useSecurity":false,"timeoutMs":10000,"localLinkAddress":2,"remoteLinkAddress":1,"giInterval":300,"hoursShift":0,"timeSyncInterval":0,"localCertFilePath":"","peerCertFilePath":"","peerCertFilesPaths":[],"rootCertFilePath":"","chainValidation":false,"allowOnlySpecificCertificates":false,"privateKeyFilePath":"","allowTLSv10":false,"allowTLSv11":false,"allowTLSv12":true,"allowTLSv13":true,"cipherList":"","connectionMode":"TCP Active","asyncOpenDelay":0,"timeSyncMode":0,"class0ScanInterval":0,"class1ScanInterval":0,"class2ScanInterval":0,"class3ScanInterval":0,"enableUnsolicited":true,"rangeScans":[],"baudRate":9600,"parity":"Even","stopBits":"One","handshake":"None","timeoutForACK":1000,"timeoutRepeat":1000}
11+
{ "_id": { "$oid": "679a83338b90fe1713ef7fef" }, "protocolDriver": "DNP3_SERVER", "protocolDriverInstanceNumber": 1, "protocolConnectionNumber": 34, "name": "DNP3SRV", "description": "DNP3 SERVER DEMO", "enabled": true, "commandsEnabled": true, "stats": null, "ipAddresses": [], "passphrase": "", "pfxFilePath": "", "useSecurity": false, "timeoutMs": 10000, "localLinkAddress": 2, "remoteLinkAddress": 1, "giInterval": 300, "hoursShift": 0, "timeSyncInterval": 0, "localCertFilePath": "", "peerCertFilePath": "", "peerCertFilesPaths": [], "rootCertFilePath": "", "chainValidation": false, "allowOnlySpecificCertificates": false, "privateKeyFilePath": "", "allowTLSv10": false, "allowTLSv11": false, "allowTLSv12": true, "allowTLSv13": true, "cipherList": "", "connectionMode": "TCP Passive", "asyncOpenDelay": 0, "timeSyncMode": 0, "class0ScanInterval": 0, "class1ScanInterval": 0, "class2ScanInterval": 0, "class3ScanInterval": 0, "enableUnsolicited": true, "rangeScans": [], "portName": "COM1", "baudRate": 9600, "parity": "Even", "stopBits": "One", "handshake": "None", "timeoutForACK": 1000, "timeoutRepeat": 1000, "ipAddressLocalBind": "0.0.0.0:20000", "autoCreateTags": true, "topics": [ "KAW2" ], "serverQueueSize": 2000 }

demo-docker/mongo_seed/files/demo_connections_linux.json

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
{"_id":{"$oid":"6675d176e2f7917450d7585b"},"protocolDriver":"PLC4X","protocolDriverInstanceNumber":1,"protocolConnectionNumber":2003,"name":"PLC1","description":"PLC #1 MODBUS","enabled":true,"commandsEnabled":true,"topics":["MBPLC1_HR1|holding-register:1:UINT","MBPLC1_10HRS|holding-register:2:INT[10]"],"autoCreateTags": true,"endpointURLs":["modbus-tcp://localhost:5001?unit-identifier=2"],"giInterval": 1.5,"stats":null}
99
{"_id":{"$oid":"669ea9ce96e9a9fe7abe6ef8"},"protocolDriver":"OPC-DA","protocolDriverInstanceNumber":1,"protocolConnectionNumber":5001,"name":"OPCDAClient1","description":"Download from demo server from https://github.com/technosoftware-gmbh/opcdaaehda-client-solution-net/tree/master/x86/DemoServer","enabled":true,"commandsEnabled":true,"stats":null,"endpointURLs":["opcda://localhost/SampleCompany.DaSample.30"],"autoCreateTags":true,"useSecurity":false,"autoCreateTagPublishingInterval":5,"autoCreateTagQueueSize":5,"autoCreateTagSamplingInterval":0,"giInterval":300,"localCertFilePath":"","peerCertFilePath":"","timeoutMs":20000,"topics":[],"deadBand":5,"hoursShift":0,"password":"","username":""}
1010
{"_id":{"$oid":"66e6c7d1311eee86fc6b4f07"},"protocolDriver":"DNP3","protocolDriverInstanceNumber":1,"protocolConnectionNumber":33,"name":"DNP3DEMO","description":"DNP3 DEMO","enabled": true,"commandsEnabled":true,"stats":null,"ipAddresses":["127.0.0.1:20000"],"passphrase":"","pfxFilePath":"","useSecurity":false,"timeoutMs":10000,"localLinkAddress":2,"remoteLinkAddress":1,"giInterval":300,"hoursShift":0,"timeSyncInterval":0,"localCertFilePath":"","peerCertFilePath":"","peerCertFilesPaths":[],"rootCertFilePath":"","chainValidation":false,"allowOnlySpecificCertificates":false,"privateKeyFilePath":"","allowTLSv10":false,"allowTLSv11":false,"allowTLSv12":true,"allowTLSv13":true,"cipherList":"","connectionMode":"TCP Active","asyncOpenDelay":0,"timeSyncMode":0,"class0ScanInterval":0,"class1ScanInterval":0,"class2ScanInterval":0,"class3ScanInterval":0,"enableUnsolicited":true,"rangeScans":[],"baudRate":9600,"parity":"Even","stopBits":"One","handshake":"None","timeoutForACK":1000,"timeoutRepeat":1000}
11+
{ "_id": { "$oid": "679a83338b90fe1713ef7fef" }, "protocolDriver": "DNP3_SERVER", "protocolDriverInstanceNumber": 1, "protocolConnectionNumber": 34, "name": "DNP3SRV", "description": "DNP3 SERVER DEMO", "enabled": true, "commandsEnabled": true, "stats": null, "ipAddresses": [], "passphrase": "", "pfxFilePath": "", "useSecurity": false, "timeoutMs": 10000, "localLinkAddress": 2, "remoteLinkAddress": 1, "giInterval": 300, "hoursShift": 0, "timeSyncInterval": 0, "localCertFilePath": "", "peerCertFilePath": "", "peerCertFilesPaths": [], "rootCertFilePath": "", "chainValidation": false, "allowOnlySpecificCertificates": false, "privateKeyFilePath": "", "allowTLSv10": false, "allowTLSv11": false, "allowTLSv12": true, "allowTLSv13": true, "cipherList": "", "connectionMode": "TCP Passive", "asyncOpenDelay": 0, "timeSyncMode": 0, "class0ScanInterval": 0, "class1ScanInterval": 0, "class2ScanInterval": 0, "class3ScanInterval": 0, "enableUnsolicited": true, "rangeScans": [], "portName": "COM1", "baudRate": 9600, "parity": "Even", "stopBits": "One", "handshake": "None", "timeoutForACK": 1000, "timeoutRepeat": 1000, "ipAddressLocalBind": "0.0.0.0:20000", "autoCreateTags": true, "topics": [ "KAW2" ], "serverQueueSize": 2000 }

demo-docker/mongo_seed/files/demo_instances.json

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
{"_id":{"$oid":"60da25df040e43523c8f4f58"},"protocolDriver":"OPC-UA_SERVER","protocolDriverInstanceNumber":1,"enabled":true,"logLevel":1,"nodeNames":[],"activeNodeName":"","activeNodeKeepAliveTimeTag":{"$date":"2020-05-14T20:09:50.557Z"},"keepProtocolRunningWhileInactive":false}
1111
{"_id":{"$oid":"66756c287994910acae4f602"},"protocolDriver":"PLC4X","protocolDriverInstanceNumber":1,"enabled":true,"logLevel":1,"nodeNames":[],"activeNodeName":"","activeNodeKeepAliveTimeTag":{"$date":"2020-05-14T20:09:50.557Z"},"keepProtocolRunningWhileInactive":false}
1212
{"_id":{"$oid":"669d5cec96e9a9fe7abe6ef3"},"protocolDriver":"OPC-DA","protocolDriverInstanceNumber":1,"enabled":true,"logLevel": 1,"nodeNames":[],"activeNodeName":"","keepProtocolRunningWhileInactive":false,"activeNodeKeepAliveTimeTag":{"$date":"2024-08-04T21:43:45.592Z"}}
13+
{"_id":{"$oid":"679a83658b90fe1713ef7ff3"},"protocolDriver":"DNP3_SERVER","protocolDriverInstanceNumber":1,"enabled":true,"logLevel":1,"nodeNames":[],"activeNodeName":"","activeNodeKeepAliveTimeTag":{"$date":"2020-07-16T13:34:30.869Z"},"keepProtocolRunningWhileInactive":false}

docs/install.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Execute commands below for scripted installation:
8888

8989
sudo dnf -y install git
9090
cd /home/jsonscada
91-
git clone https://github.com/riclolsen/json-scada --config core.autocrlf=input
91+
git clone --recurse-submodules https://github.com/riclolsen/json-scada --config core.autocrlf=input
9292
cd json-scada/platform-rhel9
9393

9494
# on x86-64 platform run
@@ -119,7 +119,7 @@ Execute commands below for scripted installation:
119119

120120
sudo dnf -y install git
121121
cd /home/jsonscada
122-
git clone https://github.com/riclolsen/json-scada --config core.autocrlf=input
122+
git clone --recurse-submodules https://github.com/riclolsen/json-scada --config core.autocrlf=input
123123
cd json-scada/platform-ubuntu-2404
124124

125125
# on x86-64 or ARM64 platform run
@@ -212,7 +212,7 @@ Download the code from the online repo
212212

213213
Or do a git clone
214214

215-
git clone https://github.com/riclolsen/json-scada --config core.autocrlf=input
215+
git clone --recurse-submodules https://github.com/riclolsen/json-scada --config core.autocrlf=input
216216

217217
Build the code using the adequate script for the host platform:
218218

index.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
4848
- MongoDB as the real-time core database, persistence layer, config store, SOE historian.
4949
- Event-based realtime async data processing with MongoDB Change Streams.
5050
- Portability and modular interoperability over Linux, Windows, Mac OSX, x86/64, ARM.
51-
- Windows installer available in the [releases section](https://github.com/riclolsen/json-scada/releases/tag/V0.47-alpha).
51+
- Windows installer available in the [releases section](https://github.com/riclolsen/json-scada/releases/tag/V0.48-alpha).
5252
- Unlimited tags, servers, and users.
5353
- Horizontal scalability, from a single computer to big clusters (MongoDB-sharding), Docker containers, VMs, Kubernetes, cloud, or hybrid deployments.
5454
- Modular distributed architecture. Lightweight redundant data acquisition nodes can connect securely over TLS to the database server. E.g. a Raspberry PI can be a data acquisition node.
@@ -90,7 +90,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
9090
## Documentation
9191

9292
- [Generic Install Guide](docs/install.md)
93-
- [Windows Installer](https://github.com/riclolsen/json-scada/releases/tag/V0.47-alpha)
93+
- [Windows Installer](https://github.com/riclolsen/json-scada/releases/tag/V0.48-alpha)
9494
- [RedHat/Rocky Linux Installer Script](docs/install.md#rhel94-and-compatible-systems-automated-installation)
9595
- [Ubuntu Linux Installer Script](docs/install.md#ubuntu-2404-scripted-installation)
9696
- [Generic Install Guide](docs/install.md)
@@ -104,6 +104,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
104104
- [IEC60870-5-101 Server Driver](src/lib60870.netcore/iec101server/README.md)
105105
- [IEC60870-5-101 Client Driver](src/lib60870.netcore/iec101client/README.md)
106106
- [DNP3 Client Driver](src/dnp3/Dnp3Client/README.md)
107+
- [DNP3 Server Driver](src/dnp3/Dnp3Server/README.md)
107108
- [Telegraf Listener Driver](src/telegraf-listener/README.md)
108109
- [MQTT Sparkplug-B Client Driver](src/mqtt-sparkplug/README.md)
109110
- [OPC-UA Client Driver](src/OPC-UA-Client/README.md)
@@ -132,7 +133,7 @@ To provide an easy to use, fully-featured, scalable, and portable SCADA/IIoT-I4.
132133
- [ ] IEC 61850 MMS Server
133134
- [ ] IEC 61850 GOOSE/SV Client
134135
- [x] DNP3 Client TCP/UDP/TLS/Serial - Windows x64 only!
135-
- [ ] DNP3 Server TCP/UDP/TLS/Serial
136+
- [x] DNP3 Server TCP/UDP/TLS/Serial
136137
- [x] MQTT/Sparkplug-B PUB/SUB TCP/TLS
137138
- [x] Modbus Client via PLC4X-GO
138139
- [ ] ICCP Client TCP/TLS

0 commit comments

Comments
 (0)