-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
86 lines (63 loc) · 2.59 KB
/
Program.cs
File metadata and controls
86 lines (63 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using MTConnect.Agents;
using MTConnect.Applications;
using MTConnect.Configurations;
using MTConnect.Formatters;
using Uns;
var app = new MTConnectAgentApplication();
app.Run(args, true);
public class ModuleConfiguration : DataSourceConfiguration
{
public string MqttBrokerAddress { get; set; }
public int MqttBrokerPort { get; set; }
}
public class SparkplugModule : MTConnectAgentModule
{
public const string ConfigurationTypeId = "sparkplug"; // This must match the module section in the 'agent.config.yaml' file
public const string DefaultId = "Sparkplug Module"; // The ID is mainly just used for logging.
private readonly ModuleConfiguration _configuration;
private readonly UnsClient _unsClient;
private readonly UnsSparkplugConnection _sparkplugConnection;
public SparkplugModule(IMTConnectAgentBroker agent, object configuration) : base(agent)
{
Id = DefaultId;
_configuration = AgentApplicationConfiguration.GetConfiguration<ModuleConfiguration>(configuration);
_sparkplugConnection = new UnsSparkplugConnection(_configuration.MqttBrokerAddress, _configuration.MqttBrokerPort);
_unsClient = new UnsClient();
_unsClient.AddMiddleware(new UnsReportByExceptionMiddleware());
}
protected override void OnStartAfterLoad(bool initializeDataItems)
{
Agent.ObservationAdded += AgentObservationAdded;
foreach (var device in Agent.GetDevices())
{
_sparkplugConnection.AddDevice($"MTConnect/Devices/{device.Uuid}");
}
_unsClient.AddConnection(_sparkplugConnection, UnsConnectionType.Output);
_unsClient.Start();
}
protected override void OnStop()
{
_unsClient.Stop();
}
private void AgentObservationAdded(object sender, MTConnect.Observations.IObservation observation)
{
var json = ToJson(observation);
_unsClient.Publish($"MTConnect/Devices/{observation.DeviceUuid}/{observation.DataItemId}", json);
}
private static string ToJson(MTConnect.Observations.IObservation observation)
{
var formatResult = EntityFormatter.Format("json", observation);
if (formatResult.Success)
{
formatResult.Content.Seek(0, SeekOrigin.Begin);
var bytes = new byte[formatResult.Content.Length];
using (var memoryStream = new MemoryStream())
{
formatResult.Content.CopyTo(memoryStream);
bytes = memoryStream.ToArray();
}
return System.Text.Encoding.UTF8.GetString(bytes);
}
return null;
}
}