Skip to content

Commit da28a76

Browse files
committed
Various updates in preparation for release 0.7.
1 parent 4d5c032 commit da28a76

File tree

23 files changed

+3008
-1702
lines changed

23 files changed

+3008
-1702
lines changed

conf-templates/Opc.Ua.DefaultClient.Config.xml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
schemaLocation="./Schema/ApplicationConfiguration.xsd"
66
>
77
<ApplicationName>JSON-SCADA OPC-UA Client</ApplicationName>
8-
<ApplicationUri>urn:localhost:json-scada:OPCUAClient</ApplicationUri>
8+
<ApplicationUri>urn:localhost:OPCUA:JSON_SCADA_OPCUAClient</ApplicationUri>
99
<ProductUri>http://json-scada.org/UA/ClientDriver</ProductUri>
1010
<ApplicationType>Client_1</ApplicationType>
1111

1212
<SecurityConfiguration>
1313

1414
<!-- Where the application instance certificate is stored (MachineDefault) -->
15-
<ApplicationCertificate>
16-
<StoreType>X509Store</StoreType>
17-
<StorePath>CurrentUser\My</StorePath>
18-
<SubjectName>CN=UA Core Sample Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
19-
</ApplicationCertificate>
20-
15+
16+
<ApplicationCertificate>
17+
<StoreType>Directory</StoreType>
18+
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
19+
<SubjectName>CN=JSON-SCADA OPC-UA Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
20+
</ApplicationCertificate>
21+
2122
<!-- Where the issuer certificate are stored (certificate authorities) -->
2223
<TrustedIssuerCertificates>
2324
<StoreType>Directory</StoreType>
@@ -40,8 +41,13 @@
4041
for easy debugging purposes ONLY and turned off for production deployments! -->
4142
<AutoAcceptUntrustedCertificates>true</AutoAcceptUntrustedCertificates>
4243

43-
</SecurityConfiguration>
44+
<!-- WARNING: SHA1 signed certficates are by default rejected and should be phased out.-->
45+
<RejectSHA1SignedCertificates>false</RejectSHA1SignedCertificates>
46+
<MinimumCertificateKeySize>1024</MinimumCertificateKeySize>
4447

48+
</SecurityConfiguration>
49+
50+
4551
<TransportConfigurations/>
4652

4753
<TransportQuotas>

conf/Opc.Ua.DefaultClient.Config.xml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
<SecurityConfiguration>
1313

1414
<!-- Where the application instance certificate is stored (MachineDefault) -->
15-
<ApplicationCertificate>
16-
<StoreType>X509Store</StoreType>
17-
<StorePath>CurrentUser\My</StorePath>
18-
<SubjectName>CN=UA Core Sample Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
19-
</ApplicationCertificate>
20-
15+
16+
<ApplicationCertificate>
17+
<StoreType>Directory</StoreType>
18+
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
19+
<SubjectName>CN=JSON-SCADA OPC-UA Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
20+
</ApplicationCertificate>
21+
2122
<!-- Where the issuer certificate are stored (certificate authorities) -->
2223
<TrustedIssuerCertificates>
2324
<StoreType>Directory</StoreType>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
{"_id":{"$oid":"5f108e3e3d8adfd3eccb206e"},"protocolDriver":"IEC60870-5-104_SERVER","protocolDriverInstanceNumber":1.0,"protocolConnectionNumber":1001.0,"name":"IEC104DIST","description":"Demo distribution of IEC 104","enabled":true,"commandsEnabled":true,"ipAddressLocalBind":"0.0.0.0:2404","ipAddresses":[],"localLinkAddress":1.0,"remoteLinkAddress":2.0,"giInterval":null,"testCommandInterval":0.0,"timeSyncInterval":0.0,"sizeOfCOT":2.0,"sizeOfCA":2.0,"sizeOfIOA":3.0,"k":12.0,"w":8.0,"t0":10.0,"t1":15.0,"t2":10.0,"t3":20.0,"serverModeMultiActive":true,"maxClientConnections":20.0,"maxQueueSize":5000.0}
22
{"_id":{"$oid":"5f1090143d8adfd3eccb206f"},"protocolDriver":"IEC60870-5-104","protocolDriverInstanceNumber":1.0,"protocolConnectionNumber":61.0,"name":"IEC104DEMO","description":"Demo via IEC60870-5-104","enabled":true,"commandsEnabled":true,"ipAddressLocalBind":"","ipAddresses":["207.180.242.96:2404"],"localLinkAddress":2.0,"remoteLinkAddress":1.0,"giInterval":250.0,"testCommandInterval":60.0,"timeSyncInterval":650.0,"sizeOfCOT":2.0,"sizeOfCA":2.0,"sizeOfIOA":3.0,"k":12.0,"w":8.0,"t0":10.0,"t1":15.0,"t2":10.0,"t3":20.0}
3+
{"_id":{"$oid":"5ff3512268d80d68205b403f"},"protocolDriver":"OPC-UA","protocolDriverInstanceNumber":1,"protocolConnectionNumber":1003,"name":"OPCClient1","description":"OPC Client 1","enabled":true,"commandsEnabled":true,"stats":{"nodeName":"mainNode","timeTag":{"$date":"2021-02-23T10:54:54.433Z"}},"endpointURLs":["opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"],"configFileName":"c:\\json-scada\\conf\\Opc.Ua.DefaultClient.Config.xml","autoCreateTags":true,"useSecurity":false}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
{"_id":{"$oid":"5f05e02bbdf73ca11a22bc91"},"protocolDriver":"IEC60870-5-104","protocolDriverInstanceNumber":1.0,"enabled":true,"logLevel":1.0,"nodeNames":["mainNode"],"activeNodeName":"mainNode","activeNodeKeepAliveTimeTag":{"$date":"2020-07-24T14:21:01.736Z"},"keepProtocolRunningWhileInactive":false}
22
{"_id":{"$oid":"5f1057663d8adfd3eccb206b"},"protocolDriver":"IEC60870-5-104_SERVER","protocolDriverInstanceNumber":1.0,"enabled":true,"logLevel":1.0,"nodeNames":["mainNode"],"activeNodeName":"mainNode","activeNodeKeepAliveTimeTag":{"$date":"2020-07-16T13:34:30.869Z"},"keepProtocolRunningWhileInactive":false}
3+
{"_id":{"$oid":"5fe33f4817755e4c4c5e3cfa"},"protocolDriver":"OPC-UA","protocolDriverInstanceNumber":1,"enabled":true,"logLevel":1,"nodeNames":["mainNode"],"keepProtocolRunningWhileInactive":false,"activeNodeKeepAliveTimeTag":{"$date":"2021-02-23T10:54:54.429Z"},"activeNodeName":"mainNode"}

sql/create_tables.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ comment on column hist.flags is 'Bit mask 0x80=value invalid, 0x40=Time tag at s
3737
-- timescaledb hypertable, partitioned by day
3838
SELECT create_hypertable('hist', 'time_tag', chunk_time_interval=>86400000000);
3939
-- data retention policy (older data will be deleted)
40-
SELECT add_drop_chunks_policy('hist', INTERVAL '45 days');
40+
41+
-- SELECT add_drop_chunks_policy('hist', INTERVAL '45 days'); -- this is for timescaledb < 2.0
42+
SELECT add_retention_policy('hist', INTERVAL '45 days');
4143

4244
-- DROP TABLE realtime_data;
4345
CREATE TABLE IF NOT EXISTS realtime_data (

src/OPC-UA-Client/AsduReceiveHandler.cs

Lines changed: 69 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -110,60 +110,92 @@ public void Run()
110110

111111
private async Task ConsoleClient()
112112
{
113-
Log(conn_name + " - " + "Create an Application Configuration.");
113+
Log(conn_name + " - " + "Create an Application Configuration...");
114114
exitCode = ExitCode.ErrorCreateApplication;
115115

116116
ApplicationInstance application = new ApplicationInstance
117117
{
118118
ApplicationName = "JSON-SCADA OPC-UA Client",
119119
ApplicationType = ApplicationType.Client,
120-
ConfigSectionName = ""
120+
ConfigSectionName = "",
121121
};
122122

123-
// load the application configuration.
124-
ApplicationConfiguration config = await application.LoadApplicationConfiguration(OPCUA_conn.configFileName, false);
125-
config.SecurityConfiguration.AutoAcceptUntrustedCertificates = true;
123+
bool haveAppCertificate = false;
124+
ApplicationConfiguration config = null;
126125

127-
// check the application certificate.
128-
bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0);
129-
130-
if (!haveAppCertificate)
126+
try
131127
{
132-
throw new Exception("Application instance certificate invalid!");
133-
}
128+
// load the application configuration.
129+
Log(conn_name + " - " + "Load config from " + OPCUA_conn.configFileName);
130+
config = await application.LoadApplicationConfiguration(OPCUA_conn.configFileName, false);
131+
// config.SecurityConfiguration.AutoAcceptUntrustedCertificates = true;
134132

135-
if (haveAppCertificate)
136-
{
137-
config.ApplicationUri = X509Utils.GetApplicationUriFromCertificate(config.SecurityConfiguration.ApplicationCertificate.Certificate);
138-
if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
133+
// check the application certificate.
134+
haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0);
135+
136+
if (!haveAppCertificate)
137+
{
138+
Log(conn_name + " - " + "FATAL: Application instance certificate invalid!", LogLevelNoLog);
139+
Environment.Exit(1);
140+
}
141+
142+
if (haveAppCertificate)
139143
{
140-
autoAccept = true;
144+
config.ApplicationUri = X509Utils.GetApplicationUriFromCertificate(config.SecurityConfiguration.ApplicationCertificate.Certificate);
145+
if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
146+
{
147+
autoAccept = true;
148+
}
149+
config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
150+
}
151+
else
152+
{
153+
Log(conn_name + " - " + "WARN: missing application certificate, using unsecure connection.");
141154
}
142-
config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
143155
}
144-
else
156+
catch (Exception e)
145157
{
146-
Log(conn_name + " - " + "WARN: missing application certificate, using unsecure connection.");
158+
Log(conn_name + " - WARN: " + e.Message);
147159
}
148160

149-
Log(conn_name + " - " + "Discover endpoints of " + OPCUA_conn.endpointURLs[0]);
150-
exitCode = ExitCode.ErrorDiscoverEndpoints;
151-
var selectedEndpoint = CoreClientUtils.SelectEndpoint(OPCUA_conn.endpointURLs[0], haveAppCertificate && OPCUA_conn.useSecurity, 15000);
152-
Log(conn_name + " - " + "Selected endpoint uses: " +
153-
selectedEndpoint.SecurityPolicyUri.Substring(selectedEndpoint.SecurityPolicyUri.LastIndexOf('#') + 1));
161+
if (config == null)
162+
{
163+
Log(conn_name + " - " + "FATAL: error in XML config file!", LogLevelNoLog);
164+
Environment.Exit(1);
165+
}
166+
167+
try
168+
{
169+
Log(conn_name + " - " + "Discover endpoints of " + OPCUA_conn.endpointURLs[0]);
170+
exitCode = ExitCode.ErrorDiscoverEndpoints;
171+
var selectedEndpoint = CoreClientUtils.SelectEndpoint(OPCUA_conn.endpointURLs[0], haveAppCertificate && OPCUA_conn.useSecurity, 15000);
172+
Log(conn_name + " - " + "Selected endpoint uses: " +
173+
selectedEndpoint.SecurityPolicyUri.Substring(selectedEndpoint.SecurityPolicyUri.LastIndexOf('#') + 1));
154174

155-
Log(conn_name + " - " + "Create a session with OPC UA server.");
156-
exitCode = ExitCode.ErrorCreateSession;
157-
var endpointConfiguration = EndpointConfiguration.Create(config);
158-
var endpoint = new ConfiguredEndpoint(null, selectedEndpoint, endpointConfiguration);
175+
Log(conn_name + " - " + "Create a session with OPC UA server.");
176+
exitCode = ExitCode.ErrorCreateSession;
177+
var endpointConfiguration = EndpointConfiguration.Create(config);
178+
var endpoint = new ConfiguredEndpoint(null, selectedEndpoint, endpointConfiguration);
159179

160-
await Task.Delay(50);
161-
session = await Session.Create(config, endpoint, false, "OPC UA Console Client", 60000, new UserIdentity(new AnonymousIdentityToken()), null);
162-
// Log("" + session.KeepAliveInterval); // default is 5000
163-
session.KeepAliveInterval = System.Convert.ToInt32(OPCUA_conn.timeoutMs);
180+
await Task.Delay(50);
181+
session = await Session.Create(config, endpoint, false, "OPC UA Console Client", 60000, new UserIdentity(new AnonymousIdentityToken()), null);
164182

165-
// register keep alive handler
166-
session.KeepAlive += Client_KeepAlive;
183+
// Log("" + session.KeepAliveInterval); // default is 5000
184+
session.KeepAliveInterval = System.Convert.ToInt32(OPCUA_conn.timeoutMs);
185+
186+
// register keep alive handler
187+
session.KeepAlive += Client_KeepAlive;
188+
}
189+
catch (Exception e)
190+
{
191+
Log(conn_name + " - WARN: " + e.Message);
192+
}
193+
194+
if (session == null)
195+
{
196+
Log(conn_name + " - " + "FATAL: error creating session!", LogLevelNoLog);
197+
Environment.Exit(1);
198+
}
167199

168200
Log(conn_name + " - " + "Browsing the OPC UA server namespace.");
169201
exitCode = ExitCode.ErrorBrowseNamespace;
@@ -204,6 +236,9 @@ private async Task ConsoleClient()
204236
}
205237
private async Task FindObjects(Opc.Ua.Client.Session session, NodeId nodeid)
206238
{
239+
if (session == null)
240+
return;
241+
207242
try
208243
{
209244
ReferenceDescriptionCollection references;

src/OPC-UA-Client/OPC-UA-Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10+
<PackageReference Include="MongoDB.Bson" Version="2.11.6" />
1011
<PackageReference Include="MongoDB.Driver" Version="2.11.6" />
1112
<PackageReference Include="Mono.Options" Version="6.6.0.161" />
1213
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Client" Version="1.4.365.23" />

src/alarm_beep/package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/alarm_beep/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
"dependencies": {
1212
"a1-beep": "^1.2.1",
1313
"fs": "0.0.1-security",
14-
"mongodb": "^3.6.3"
14+
"mongodb": "^3.6.4"
1515
}
1616
}

src/grafana_alert2event/package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)